1

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

这是取自http://www.jsresources.org的代码

  /*
   * 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);

有人对此有所了解吗?谢谢。

4

3 回答 3

1

根据您的合成器,打击乐声音将位于通道 10 或通道 16(阵列中的索引 9 或 15)。木版声音将是音符编号 76 和 77,您可能希望使用 128 的音符力度值(最大音量)。

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

于 2009-10-25T15:15:11.950 回答
0

木版是一种打击乐器。当您在分配了鼓或打击乐音色的通道上演奏正确的音符时,您应该会听到它。(在打击乐器或鼓音色中,每个音符演奏不同的乐器:木块、小军鼓、hi-tom、clave 等)

于 2009-10-25T14:49:45.027 回答
0

使用(例如)这个通用 MIDI (GM) 参考来查找补丁。GM 打击乐需要 10 通道,Hi Wood Block 需要 76 号音轨,Low Wood Block 需要 77 号音轨。

此外,乐器 116 是全键盘(从 1 到 128 的任何音高)木版。我相信这应该适用于任何非打击乐器(即不是 10,或者可能是 16)频道。

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

于 2009-10-25T15:14:11.780 回答