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

Posted

技术标签:

【中文标题】在 Java 上播放单个 MIDI 木版音符?【英文标题】:Play single midi woodblock note on Java? 【发布时间】:2009-10-25 14:38:50 【问题描述】:

我打算使用 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);

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

【问题讨论】:

可能重复:***.com/questions/380103/… 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

使用(例如)this General MIDI (GM) reference 来查找补丁。 GM 打击乐需要 10 通道,Hi Wood Block 需要 76 号音符,Low Wood Block 需要 77 号。

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

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

【讨论】:

以上是关于在 Java 上播放单个 MIDI 木版音符?的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中同时播放 .mp3 和一系列音符 (MIDI)

在播放时捕捉 MIDI 音符?

在 Java 中播放时将 midi 文件输出到控制台

Flutter mobile,播放midi文件

使用 pygame.midi 播放 midi 音符时出现分段错误

iOS AUSampler 连续播放 MIDI 音符