在Java上播放单个midi木版音符?

在Java上播放单个midi木版音符?,java,midi,Java,Midi,我计划使用Java创建自己的节拍器(木版乐器),可以设置其bpm、音量等。我已经尝试了从getChannels()获得的超过16个通道(MIDI 1.0规范),但根本听不到木版 这里的代码取自 有人知道这件事吗?谢谢。木版是一种打击乐器。当你在一个指定了鼓或打击乐器的频道上弹奏正确的音符时,你应该能听到它。(在打击乐器或鼓阵中,每个音符演奏不同的乐器:木块、圈套鼓、hi-tom、clave等)木块是一种打击乐器。当你在一个指定了鼓或打击乐器的频道上弹奏正确的音符时,你应该能听到它。(在打击乐或鼓

我计划使用Java创建自己的节拍器(木版乐器),可以设置其bpm、音量等。我已经尝试了从
getChannels()
获得的超过16个通道(MIDI 1.0规范),但根本听不到木版

这里的代码取自


有人知道这件事吗?谢谢。

木版是一种打击乐器。当你在一个指定了鼓或打击乐器的频道上弹奏正确的音符时,你应该能听到它。(在打击乐器或鼓阵中,每个音符演奏不同的乐器:木块、圈套鼓、hi-tom、clave等)

木块是一种打击乐器。当你在一个指定了鼓或打击乐器的频道上弹奏正确的音符时,你应该能听到它。(在打击乐或鼓补丁中,每个音符播放不同的乐器:木块、圈套鼓、hi-tom、clave等)

使用(例如)查找补丁。GM敲击乐需要10号通道,Hi木块需要76号通道,Low木块需要77号通道

此外,乐器116是全键盘(1到128之间的任意音高)木版。我认为这应该适用于任何非打击乐器(即不是10或16)频道

注意:GM似乎是基于1的,而您的API似乎是基于0的,因此您可能需要从这些值中减去一个。

使用(eg)查找修补程序。GM敲击乐需要10号通道,Hi木块需要76号通道,Low木块需要77号通道

此外,乐器116是全键盘(1到128之间的任意音高)木版。我认为这应该适用于任何非打击乐器(即不是10或16)频道


注意:GM似乎是基于1的,而您的API似乎是基于0的,因此您可能需要从这些值中减去一个。

根据您的合成器,敲击声将出现在通道10或通道16上(数组中的索引9或15)。木版的声音是音符编号76和77,您可能希望使用音符速度值128(最大音量)


我没有看过您正在使用的代码,但是您可能还需要调用一个方法来打开合成器,然后才能播放任何内容。此外,由于您正在演奏打击乐器的音符,因此您可以在“音符打开”消息之后立即发送相应的“音符关闭”消息(因此您不必计算固定打击乐器音符的持续时间)。我使用过的大多数MIDI合成器即使在接收到note off消息后也会播放整个打击乐器的声音。

根据合成器的不同,打击乐器的声音将在通道10或通道16上播放(数组中的索引9或15)。木版的声音是音符编号76和77,您可能希望使用音符速度值128(最大音量)

我没有看过您正在使用的代码,但是您可能还需要调用一个方法来打开合成器,然后才能播放任何内容。此外,由于您正在演奏打击乐器的音符,因此您可以在“音符打开”消息之后立即发送相应的“音符关闭”消息(因此您不必计算固定打击乐器音符的持续时间)。我使用过的大多数MIDI合成器即使在收到音符关闭信息后也能播放整个打击乐器的声音。

可能重复:可能重复:
  /*
   * Turn the note on on MIDI channel 1.
   * (Index zero means MIDI channel 1)
   */
  MidiChannel[] channels = synth.getChannels();
  channels[0].noteOn(nNoteNumber, nVelocity);

  /*
   * Wait for the specified amount of time
   * (the duration of the note).
   */
  try
  {
   Thread.sleep(nDuration);
  }
  catch (InterruptedException e)
  {
  }

  /*
   * Turn the note off.
   */
  channels[0].noteOff(nNoteNumber);