程序一切正常,重新装了系统,就不能播放midi文件了 我编了个程序,一切正常,能播放midi格式的音乐,虽然修改过几次,但都正常得备份了,并备份在了邮箱了,可昨天我系统出了问题,重新装了系统,程序就不能播放midi格式的音乐了,但可以播放wav波形音乐,我使用电脑上的播放器播放midi音乐,可以正常播放,但在程序就不能播放midi,我从邮箱里下载了以前正常的程序,以前的程序也不能播放了midi了,这是怎么回事??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这问题太多了,看看你系统的控制面板——声音和音频设备——音频——midi音乐播放的默认设备有问题没?你的驱动有问题没?如果没问题,最好把代码发出来,检查下代码是否有问题 我看就是,有些dll没有啦。看一下提示信息吧,应该会有结果的 没有任何提示我今天把程序调试好了,是程序的问题,就是这一句:private Sequencer sequencer;sequencer= MidiSystem.getSequencer(false); 我改成sequencer= MidiSystem.getSequencer(); 就恢复正常了,这是怎么回事???我看了JDK API,上面写得很费解,谁能告诉我这是怎么回事啊,为什么我以前的系统在程序中写sequencer= MidiSystem.getSequencer(false); 就正确并可以播放音乐,同时我把程序放到别人的机器上测试也可以播放,现在我重装了系统,就不能播放了,我把程序放到第3台机器上,也不能播放,难道这跟机器有关?我如何解决这个问题,怎么加一个if语句来判断到底是sequencer= MidiSystem.getSequencer(false); 还是sequencer= MidiSystem.getSequencer(); 没有人知道怎么设置么???if(………………) sequencer= MidiSystem.getSequencer(false); else sequencer= MidiSystem.getSequencer(); import java.awt.*; import java.awt.event.ActionEvent;import java.awt.event.ActionListener; import javax.swing.*; import javax.sound.midi.MidiSystem;import javax.sound.midi.Sequence;import javax.sound.midi.Sequencer;import java.net.*;public class Music extends JFrame { private JMenuBar menuBar = new JMenuBar(); private JMenu mMusic=new JMenu("音乐"); private JCheckBoxMenuItem mMusic0 = new JCheckBoxMenuItem("m1"), mMusic1 = new JCheckBoxMenuItem("m2"), mMusic2 = new JCheckBoxMenuItem("m3"), mLoop = new JCheckBoxMenuItem("循环播放"), mStop=new JCheckBoxMenuItem("停止播放"); private Sequencer sequencer; private Sequence sequence; private URL urlMusic0,urlMusic1,urlMusic2; boolean loopAll=true; //判断是全部循环播放,还是单曲循环播放 boolean play=false; private int num; private Thread thread; Music(){ menuBar.add(mMusic); mMusic.add(mMusic0); mMusic.add(mMusic1); mMusic.add(mMusic2); mMusic.addSeparator(); mMusic.add(mLoop); mMusic.add(mStop); setJMenuBar(menuBar); setLocation((Toolkit.getDefaultToolkit().getScreenSize().width - getSize().width) / 2, (Toolkit.getDefaultToolkit().getScreenSize().height - getSize().height) / 2); urlMusic0= getClass().getResource("sound/music0.mid"); urlMusic1= getClass().getResource("sound/music1.mid"); urlMusic2= getClass().getResource("sound/music2.mid"); try{ sequencer= MidiSystem.getSequencer(false); sequencer.open(); }catch(Exception e){ e.printStackTrace(); } thread=new Thread(new MusicRun()); thread.start(); mMusic0.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ mMusic0.setState(true); mMusic1.setState(false); mMusic2.setState(false); mLoop.setState(false); mStop.setState(false); setMusic(0); } }); mMusic1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ mMusic0.setState(false); mMusic1.setState(true); mMusic2.setState(false); mLoop.setState(false); mStop.setState(false); setMusic(1); } }); mMusic2.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ mMusic0.setState(false); mMusic1.setState(false); mMusic2.setState(true); mLoop.setState(false); mStop.setState(false); setMusic(2); } }); mLoop.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ mMusic0.setState(false); mMusic1.setState(false); mMusic2.setState(false); mLoop.setState(true); mStop.setState(false); setMusicLoop(); } }); mStop.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent ae){ mMusic0.setState(false); mMusic1.setState(false); mMusic2.setState(false); mLoop.setState(false); mStop.setState(true); stopMusic(); } }); setSize(300, 200); //设置窗口大小 setVisible(true); //设置窗口为可视 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口时退出程序 } public void setMusic(int n){ sequencer.stop(); loopAll=false; num=n; play=true; if(thread.getState()==Thread.State.TIMED_WAITING) thread.interrupt(); } public void setMusicLoop(){ sequencer.stop(); loopAll=true; play=true; if(thread.getState()==Thread.State.TIMED_WAITING) thread.interrupt(); } public void stopMusic(){ play=false; sequencer.stop(); } public void playMusic(){ play=true; } public class MusicRun extends Thread { public void run(){ while(true){ if(play){ if(loopAll){ try{ num=(int)(Math.random()*10)%3; if(num==0){ sequence= MidiSystem.getSequence(urlMusic0); sequencer.setSequence(sequence); sequencer.start(); Thread.sleep(76000); }else if(num==1){ sequence= MidiSystem.getSequence(urlMusic1); sequencer.setSequence(sequence); sequencer.start(); Thread.sleep(140000); }else{ sequence= MidiSystem.getSequence(urlMusic2); sequencer.setSequence(sequence); sequencer.start(); Thread.sleep(64000); } }catch(Exception e){ } }else{ try{ if(num==0){ sequence= MidiSystem.getSequence(urlMusic0); sequencer.setSequence(sequence); sequencer.start(); Thread.sleep(76000); }else if(num==1){ sequence= MidiSystem.getSequence(urlMusic1); sequencer.setSequence(sequence); sequencer.start(); Thread.sleep(140000); }else{ sequence= MidiSystem.getSequence(urlMusic2); sequencer.setSequence(sequence); sequencer.start(); Thread.sleep(64000); } }catch(Exception e){ } } } try{ Thread.sleep(2000); }catch(Exception e ){} } } } public static void main(String args[]) { new Music(); } } 哪位能帮我把我在10楼发的代码加一个if(………………) sequencer= MidiSystem.getSequencer(false); else sequencer= MidiSystem.getSequencer(); 谢谢 你安装了jmf吧?前些日子,我机器用系统播放器连midi格式的音乐都播放不了,发现我机器的声音属性中的midi的默认设备发生了变化,这是由于jmf和midi发生冲突的原因,如果你安装了jmf,可能也会发生这样的情况,jmf改变了系统默认属性,把Java Sound Sequencer当做了默认设备,不需要if语句,只要在代码中加上这一条语句:System.setProperty("javax.sound.midi.Sequencer","com.sun.media.sound.RealTimeSequencerProvider");然后使用sequencer= MidiSystem.getSequencer(); 我是安装了jmf,可你怎么知道是jmf和midi发生冲突了????我现在使用sequencer= MidiSystem.getSequencer(false);就不能播放那我要是用sequencer= MidiSystem.getSequencer(false);的话,我该怎么做才能播放音乐? 你可以查看JDK api:public static Sequencer getSequencer(boolean connected) throws MidiUnavailableException获得默认的 Sequencer,它可选地连接到默认设备上。 如果 connected 为 false,则返回的 Sequencer 实例为未连接,它没有打开的 Transmitter。为了在 MIDI 设备或 Synthesizer 上运行 sequencer,有必要获得 Transmitter 并设置其 Receiver。 如果定义了系统属性 javax.sound.midi.Sequencer,或者在文件 "sound.properties" 中定义了该属性,则它可用于标识默认的 sequencer。抛出: MidiUnavailableException - 如果由于资源限制使 sequencer 不可用,或者系统中未安装 sequencer,或者如果 connected 为 true 并且任何已安装的 MidiDevice 都没有可用的 Receiver在jre/lib文件夹下面找到sound.properties文件 关于HashSet中加入重复元素的问题…… 大家知道58 |= 128 >> 5 是多少吗 jdbc PreparedStatement 的 setString() 方法的问题 把cs的界面导出成xml文件 高手入,解释下.问个小问题,关于TOMCAT的。 有两个关于线程的问题不明白,请德高望重的高手的指点一下,谢谢了!!分不够再加! 请教,一个简单问题!! 这样配置了,为什么运行java还要出错 哪位能提供struts结构的论坛小弟有重谢,给分 如何把string转换成int?在线等候 自定义了一个DVDSet[]数组,结果打印出内存地址来了!!! java 数组和字符串有什么区别?
我今天把程序调试好了,是程序的问题,就是这一句:private Sequencer sequencer;
sequencer= MidiSystem.getSequencer(false); 我改成sequencer= MidiSystem.getSequencer(); 就恢复正常了,这是怎么回事???我看了JDK API,上面写得很费解,谁能告诉我这是怎么回事啊,为什么我以前的系统在程序中写sequencer= MidiSystem.getSequencer(false); 就正确并可以播放音乐,同时我把程序放到别人的机器上测试也可以播放,现在我重装了系统,就不能播放了,我把程序放到第3台机器上,也不能播放,难道这跟机器有关?我如何解决这个问题,怎么加一个if语句来判断到底是sequencer= MidiSystem.getSequencer(false); 还是sequencer= MidiSystem.getSequencer();
没有人知道怎么设置么???
if(………………)
sequencer= MidiSystem.getSequencer(false);
else
sequencer= MidiSystem.getSequencer();
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import java.net.*;public class Music extends JFrame {
private JMenuBar menuBar = new JMenuBar();
private JMenu mMusic=new JMenu("音乐");
private JCheckBoxMenuItem
mMusic0 = new JCheckBoxMenuItem("m1"),
mMusic1 = new JCheckBoxMenuItem("m2"),
mMusic2 = new JCheckBoxMenuItem("m3"),
mLoop = new JCheckBoxMenuItem("循环播放"),
mStop=new JCheckBoxMenuItem("停止播放");
private Sequencer sequencer;
private Sequence sequence;
private URL urlMusic0,urlMusic1,urlMusic2;
boolean loopAll=true; //判断是全部循环播放,还是单曲循环播放
boolean play=false;
private int num;
private Thread thread;
Music(){
menuBar.add(mMusic);
mMusic.add(mMusic0);
mMusic.add(mMusic1);
mMusic.add(mMusic2);
mMusic.addSeparator();
mMusic.add(mLoop);
mMusic.add(mStop);
setJMenuBar(menuBar);
setLocation((Toolkit.getDefaultToolkit().getScreenSize().width - getSize().width) / 2,
(Toolkit.getDefaultToolkit().getScreenSize().height - getSize().height) / 2);
urlMusic0= getClass().getResource("sound/music0.mid");
urlMusic1= getClass().getResource("sound/music1.mid");
urlMusic2= getClass().getResource("sound/music2.mid");
try{ sequencer= MidiSystem.getSequencer(false);
sequencer.open(); }catch(Exception e){
e.printStackTrace();
}
thread=new Thread(new MusicRun());
thread.start();
mMusic0.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
mMusic0.setState(true);
mMusic1.setState(false);
mMusic2.setState(false);
mLoop.setState(false);
mStop.setState(false);
setMusic(0);
} });
mMusic1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
mMusic0.setState(false);
mMusic1.setState(true);
mMusic2.setState(false);
mLoop.setState(false);
mStop.setState(false);
setMusic(1);
} });
mMusic2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
mMusic0.setState(false);
mMusic1.setState(false);
mMusic2.setState(true);
mLoop.setState(false);
mStop.setState(false);
setMusic(2);
} });
mLoop.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
mMusic0.setState(false);
mMusic1.setState(false);
mMusic2.setState(false);
mLoop.setState(true);
mStop.setState(false);
setMusicLoop();
}
});
mStop.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
mMusic0.setState(false);
mMusic1.setState(false);
mMusic2.setState(false);
mLoop.setState(false);
mStop.setState(true);
stopMusic();
}
});
setSize(300, 200); //设置窗口大小
setVisible(true); //设置窗口为可视
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //关闭窗口时退出程序
}
public void setMusic(int n){
sequencer.stop();
loopAll=false;
num=n;
play=true;
if(thread.getState()==Thread.State.TIMED_WAITING)
thread.interrupt(); }
public void setMusicLoop(){
sequencer.stop();
loopAll=true;
play=true;
if(thread.getState()==Thread.State.TIMED_WAITING)
thread.interrupt();
}
public void stopMusic(){
play=false;
sequencer.stop();
}
public void playMusic(){
play=true;
}
public class MusicRun extends Thread {
public void run(){
while(true){
if(play){
if(loopAll){
try{
num=(int)(Math.random()*10)%3;
if(num==0){
sequence= MidiSystem.getSequence(urlMusic0);
sequencer.setSequence(sequence);
sequencer.start();
Thread.sleep(76000);
}else
if(num==1){
sequence= MidiSystem.getSequence(urlMusic1);
sequencer.setSequence(sequence);
sequencer.start();
Thread.sleep(140000);
}else{
sequence= MidiSystem.getSequence(urlMusic2);
sequencer.setSequence(sequence);
sequencer.start();
Thread.sleep(64000);
}
}catch(Exception e){
}
}else{
try{
if(num==0){
sequence= MidiSystem.getSequence(urlMusic0);
sequencer.setSequence(sequence);
sequencer.start();
Thread.sleep(76000);
}else
if(num==1){
sequence= MidiSystem.getSequence(urlMusic1);
sequencer.setSequence(sequence);
sequencer.start();
Thread.sleep(140000);
}else{
sequence= MidiSystem.getSequence(urlMusic2);
sequencer.setSequence(sequence);
sequencer.start();
Thread.sleep(64000);
}
}catch(Exception e){
}
}
}
try{
Thread.sleep(2000);
}catch(Exception e ){}
}
}
}
public static void main(String args[]) {
new Music();
}
}
if(………………)
sequencer= MidiSystem.getSequencer(false);
else
sequencer= MidiSystem.getSequencer();
谢谢
System.setProperty("javax.sound.midi.Sequencer","com.sun.media.sound.RealTimeSequencerProvider");
然后使用sequencer= MidiSystem.getSequencer();
我现在使用sequencer= MidiSystem.getSequencer(false);就不能播放
那我要是用sequencer= MidiSystem.getSequencer(false);的话,我该怎么做才能播放音乐?
public static Sequencer getSequencer(boolean connected)
throws MidiUnavailableException
获得默认的 Sequencer,它可选地连接到默认设备上。
如果 connected 为 false,则返回的 Sequencer 实例为未连接,它没有打开的 Transmitter。为了在 MIDI 设备或 Synthesizer 上运行 sequencer,有必要获得 Transmitter 并设置其 Receiver。 如果定义了系统属性 javax.sound.midi.Sequencer,或者在文件 "sound.properties" 中定义了该属性,则它可用于标识默认的 sequencer。抛出:
MidiUnavailableException - 如果由于资源限制使 sequencer 不可用,或者系统中未安装 sequencer,或者如果 connected 为 true 并且任何已安装的 MidiDevice 都没有可用的 Receiver在jre/lib文件夹下面找到sound.properties文件