2009-10-25 28 views
1

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

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

任何人采取的代码有这事?谢谢。

+1

可能的重复:http://stackoverflow.com/questions/380103/simple-java-midi-example-not-producing-any-sound – 2009-10-25 14:48:12

回答

1

根据您的合成器,打击乐声音将出现在通道10或通道16(阵列中的索引9或15)上。木版的声音将是音符编号76和77,并且您可能需要使用音符速度值128(用于最大音量)。

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

0

木版是一种打击乐器。当您在已分配鼓或打击乐补丁的声道上播放正确音符时,您应该听到它。 (在打击乐器或鼓乐片中,每个音符演奏不同的乐器:木块,军鼓,高音鼓,深入等)

0

使用(例如)this General MIDI (GM) reference来查找音色。您需要通道10用于GM打击乐器,Hi Wood Block的注释数字为76或Low Wood Block为77。

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

注意:GM似乎是基于1的,而您的API似乎是基于0的,所以您可能不得不从某些这些值中减去1。