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

以下是 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);

任何人都对此有所了解?感谢。

有帮助吗?

解决方案

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

我没有查看您正在使用的代码,但您可能还需要调用一种方法来打开合成器,然后才能播放任何内容。此外,由于您正在播放打击乐音符,因此可以能够在消息上的音符后立即发送相应的音符消息(因此您无需弄清楚修复的持续时间)打击乐笔记)。我使用的大多数MIDI合成器即使在收到音符关闭消息后也会播放整个打击乐声音。

其他提示

木版是一种打击乐器。当您在已经分配了鼓或打击乐补丁的频道上播放正确的音符时,您应该听到它。 (在打击乐器或鼓声补丁中,每个音符都有不同的乐器:木块,军鼓,喜剧,克拉夫等。)

使用(例如)此通用MIDI(GM)参考查找补丁。您需要通道10用于GM打击乐,并且需要注释76为Hi Wood Block或77为低木块。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top