Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getSequencer()返回音频设备不可用_Java_Sequence_Midi_Runtime Error - Fatal编程技术网

Java getSequencer()返回音频设备不可用

Java getSequencer()返回音频设备不可用,java,sequence,midi,runtime-error,Java,Sequence,Midi,Runtime Error,我一直在不断地抛出异常。 当我尝试创建一个新的Sequencer对象时,我不断得到javax.sound.midi.MidiUnavailableException:Audio Device Unavailable异常。 下面是代码: import javax.sound.midi.*; public class MiniMusicPlayer1 { public static void main(String[] args) { try { Sequenc

我一直在不断地抛出异常。 当我尝试创建一个新的Sequencer对象时,我不断得到javax.sound.midi.MidiUnavailableException:Audio Device Unavailable异常。 下面是代码:

import javax.sound.midi.*;

public class MiniMusicPlayer1
{
  public static void main(String[] args)
  {
    try
    {
      Sequencer sequencer = MidiSystem.getSequencer();
      sequencer.open();
      Sequence seq = new Sequence(Sequence.PPQ, 4);
      Track track = seq.createTrack();
      for (int i = 5; i < 61; i += 4)
      {
        track.add(makeEvent(144, 1, i, 100, i));
        track.add(makeEvent(128, 1, i, 100, (i+2)));
      }
      sequencer.setSequence(seq);
      sequencer.setTempoInBPM(220);
      sequencer.start();            
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
  }

  public static MidiEvent makeEvent(int comd, int chan, int one, int two, int tick)
  {
    MidiEvent event = null;
    try
    {
      ShortMessage a = new ShortMessage();
      a.setMessage(comd, chan, one, two);
      event = new MidiEvent(a, tick);
    }
    catch (Exception e)
    {
      e.printStackTrace();
    }
    return event;
  }
}

起初我无法在我的电脑上播放MIDI文件,但后来我让它工作了,所以现在我可以播放MIDI文件了,没关系。 我甚至试图关闭使用我的声卡的每个进程,但错误仍然存在。
有人能帮我吗?

检查您的进程列表,看看是否有程序运行的副本。如果它曾经工作过,那么很有可能:

sequencer.open();
失败,因为sequencer已被另一个程序以独占方式打开。可能,那个“其他程序”只是你正在工作的程序的一个副本,不管出于什么原因,它仍然在运行。如果是这样,那么要关闭的程序可能是“java”程序之一。听起来您已经尝试过关闭其他midi程序

此外,您可能打开了“错误”的MIDI设备。

Sequencer sequencer = MidiSystem.getSequencer();
将只打开“默认”设备。此默认设备可能配置错误或不可用,而您的工作程序使用的设备可能不同。这样的事情发生的可能性很小,但您可能希望编写类似的代码

MidiSystem.getMidiDeviceInfo()
并浏览返回的设备,如本摘录所示

// Obtain information about all the installed synthesizers.
Vector synthInfos;
MidiDevice device;
MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
for (int i = 0; i < infos.length; i++) {
    try {
        device = MidiSystem.getMidiDevice(infos[i]);
    } catch (MidiUnavailableException e) {
          // Handle or throw exception...
    }
    if (device instanceof Synthesizer) {
        synthInfos.add(infos[i]);
    }
}
// Now, display strings from synthInfos list in GUI.
//获取有关所有已安装合成器的信息。
矢量合成;
MIDI设备;
MidiDevice.Info[]infos=MidiSystem.getMidiDeviceInfo();
for(int i=0;i
这在

中有更详细的解释,我的猜测是:

  • 您的系统没有硬件合成器(或者可能有,但您的声卡驱动程序无法识别)
  • Java声音合成器无法打开,因为您没有安装soundbank
  • 您仍然可以使用
    MidiSystem.getSequencer(false)
    获得一个未连接的sequencer,尽管这不是很有用
  • Timinity等应用程序不会受到影响,因为它们执行自己的软件合成


    也许可以使用Java来通过胆怯来玩游戏。

    我不打算解释错误,但我做了以下工作来解决我的问题,这与您的问题类似

    1。安装Timbity播放器

    $sudo-apt-get-install-timmity

    安装完成后,执行播放器

    $aplaymidi-l

    1    Port    Client name                      Port name
    2    14:0    Midi Through                     Midi Through Port-0
    
    如果上述命令不起作用,您可能必须重新启动机器

    2。安装alsa oss alsa(高级Linux声音体系结构)

    $sudo apt get安装alsa oss

    3。执行文件

    $aoss java MidiClassTest

    如果您使用Eclipse或其他IDE,您可能希望将其作为实例使用

    $aoss eclipse

    或者使用别名


    alias eclipse='aoss eclipse indigo&'

    “起初我无法在我的电脑上播放MIDI文件,但后来我让它工作了,所以现在我可以播放MIDI文件了,没关系”听起来好像你让它工作了?什么意思?您应该删除“编译器错误”标记。这是一个典型的运行时错误。我现在可以用另一个程序来播放MIDI文件,比如说Timmity,但我无法让这段代码正常工作。它总是告诉我“音频设备不可用”。我试图以root用户身份运行它,同样的错误。我试图杀死所有使用我的声卡的进程,但仍然得到了这个错误。我从这段代码中得到的输出是:Real-Time Sequencer Java sound Synthesizer。我试图对程序进行扫描,但在/dev/中的声音设备附近没有看到任何进展。
    1    Port    Client name                      Port name
    2    14:0    Midi Through                     Midi Through Port-0