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