我编了个程序,一切正常,能播放midi格式的音乐,虽然修改过几次,但都正常得备份了,并备份在了邮箱了,可昨天我系统出了问题,重新装了系统,程序就不能播放midi格式的音乐了,但可以播放wav波形音乐,我使用电脑上的播放器播放midi音乐,可以正常播放,但在程序就不能播放midi,我从邮箱里下载了以前正常的程序,以前的程序也不能播放了midi了,这是怎么回事???

解决方案 »

  1.   

    这问题太多了,看看你系统的控制面板——声音和音频设备——音频——midi音乐播放的默认设备有问题没?你的驱动有问题没?如果没问题,最好把代码发出来,检查下代码是否有问题
      

  2.   

    我看就是,有些dll没有啦。看一下提示信息吧,应该会有结果的
      

  3.   

    没有任何提示
    我今天把程序调试好了,是程序的问题,就是这一句: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(); 
      

  4.   


    没有人知道怎么设置么???
    if(………………)
       sequencer= MidiSystem.getSequencer(false); 
    else
       sequencer= MidiSystem.getSequencer(); 
      

  5.   


    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();
       }   
    }  
      

  6.   

    哪位能帮我把我在10楼发的代码加一个
    if(………………) 
      sequencer= MidiSystem.getSequencer(false); 
    else 
      sequencer= MidiSystem.getSequencer(); 
    谢谢
      

  7.   

    你安装了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(); 
      

  8.   

    我是安装了jmf,可你怎么知道是jmf和midi发生冲突了????
    我现在使用sequencer= MidiSystem.getSequencer(false);就不能播放
    那我要是用sequencer= MidiSystem.getSequencer(false);的话,我该怎么做才能播放音乐? 
      

  9.   

    你可以查看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文件