2013-07-20 28 views
5

我一直在嘗試使用midi.js http://mudcu.be/midi-js/使用基於JavaScript瀏覽器的midi.js創建鼓聲音?

我試圖尋找張貼關於使用它,但問題的地方已經發現沒有,所以我要努力在這裏..

1日關閉磁帶庫效果很好。

我想要得到一個鼓聲來觸發,但它不工作。我可以從「acoustic_grand_piano」中觸發其他音符,但不能從「synth_drum」中觸發。

我認爲midi音符35應該與「低音鼓聲」有關。

使用從演示Basic.html

window.onload = function() { 
    MIDI.loadPlugin({ 
     soundfontUrl: "./soundfont/", 
     instrument: "synth_drum", 
     callback: function() { 
      var delay = 0; // play one note every quarter second 
      var note = 35; // the MIDI note 
      var velocity = 127; // how hard the note hits 
      // play the note 
      MIDI.setVolume(0, 127); 
      MIDI.noteOn(0, note, velocity, delay); 
      MIDI.noteOff(0, note, delay + 0.75); 
     } 
    }); 
}; 
+2

發送到頻道10?大多數MIDI GM合成器都希望鼓音軌位於第10頻道。 –

+0

不幸的是,我不認爲midi.js庫會以這種方式使用頻道。 –

+0

@DonavonLerman你是否發現了這個問題的解決方案呢? – Amruta

回答

3

樣品打「synth_drum」之前的聲音必須在該儀器裝入一個通道。這是通過​​函數完成的。正確的方法如下。

MIDI.loadPlugin({ 
    soundfontUrl: "/apps/spaceharp/static/soundfont/", 
    instrument: "synth_drum", 
    callback: function() { 
     var delay = 0; // play one note every quarter second 
     var note = 35; // the MIDI note 
     var velocity = 127; // how hard the note hits 
     // play the note 
     MIDI.programChange(0, 118); // Load "synth_drum" (118) into channel 0 
     MIDI.setVolume(0, 127); 
     MIDI.noteOn(0, note, velocity, delay); // Play note on channel 0 
     MIDI.noteOff(0, note, delay + 0.75); // Stop note on channel 0 
    } 
}); 

MIDI standardized specification(或通用MIDI)爲每個樂器指定一個特定的名稱和編號。在MIDI規範中查找「Synth Drum」可得到118的樂器編號,因此需要將118加載到通道0.

您可以找到樂器映射列表in the MIDI.js source。在MIDI.GeneralMIDI中也有方便的功能,它們將獲取byName,byId和byCategory的樂器信息。

+0

合成鼓不是一個鼓組套件,其中提到了原始問題(35 =低音鼓等)的音符映射。 –

相關問題