由於mudcube MIDI.js的文檔似乎缺乏這方面的內容,我希望有人能夠指引我朝着正確的方向前進。說白了,使用midi.js,你如何調整midi音符的持續時間和結尾?MIDI.js音符持續時間不變
對於一些背景,我創建了一個可拖動和可拖動的音符(jQuery-ui)的音樂工作人員小部件,可以添加或刪除,以形成可用於播放MIDI的序列。儘管如此,一切都有效,但是,由於我試圖用更復雜的時機來擴展這個小部件的功能,所以我遇到了一些問題。
看來我只能在設定的時間內播放音符,並且對於我的所有努力,尚未能夠實施可能會改變此持續時間的變化,例如半音,四分音符,八音符等此外,這可能是其中一個原因,MIDI.noteOff對輸出沒有可感知的影響。人們會認爲給定的音符會無限期地播放,直到MIDI.noteOff被調用,然而,無論是否調用noteOff,音符都會播放然後逐漸消失。
讓我在這裏說,我已經做了廣泛的研究,在SO和網絡一般到底了。我發現有類似問題的人並應用了他們的修復程序,但他們的答案對我無效。見how do I play arbitrary notes in Midi with javascript和MIDI.noteOff does not seem to work reliably
我的筆記稱爲noteSequence其中每個音符與noteValue(即「C4」)和noteDuration屬性的對象被轉換成midiSequence在功能convertToMidiSequence的序列。一切都適用於旋律序列和和絃,我只想添加持續時間功能。我還應該說,調整「延遲」變量或noteDuration屬性只會增加序列播放前的時間。然後在初始延遲之後,序列以與之前相同的時序播放。
非常感謝您花了一些時間來看看這些,希望能幫到您。非常感謝。
這裏是運行我的MIDI應用代碼:
$(document).ready(function() {
MIDI.loadPlugin({
soundfontUrl: GLOBALS.SOUNDFONT_URL,
instrument: 'acoustic_grand_piano',
callback: function() {
var channel = 0,
instrument = 0,
velocity = 127,
delay = 1;
MIDI.programChange(0, instrument);
}
});
});
function playCurrentSequence() {
playSequence(noteSequence);
}
function playSequence(sequence) {
var midiSequence = convertToMidiSequence(sequence);
for (var i = 0; i < midiSequence.length; i++) {
if (!(midiSequence[i] instanceof Array)) {
playNote(midiSequence[i], i);
}
else {
playChord(midiSequence[i], i);
}
}
}
function playNote(midiNote, notePositionInMeasure) {
var channel = 0,
velocity = 127,
delay = 1;
MIDI.noteOn(channel, midiNote, velocity, delay + notePositionInMeasure + 1);
MIDI.noteOff(channel, midiNote,
delay + midiNote.noteDuration + notePositionInMeasure + 1);
MIDI.Player.stop();
}
function playChord(midiChord, notePositionInMeasure) {
var channel = 0,
velocity = 127,
delay = 1;
for (var i = 0; i < midiChord.length; i++) {
MIDI.noteOn(channel, midiChord[i], velocity, delay + notePositionInMeasure + 1);
MIDI.noteOff(channel, midiChord[i],
delay + midiChord[i].noteDuration + notePositionInMeasure + 1);
MIDI.Player.stop();
}
}
如何測量'noteDuration'?爲什麼'+ 1'? –
@CL。我已經將'noteDuration'設置爲4來表示整個音符(我嘗試了許多其他值),但是這可能會根據正確的時序實現而改變。 '+ 1'是一個來自早期修復的保留('notePositionInMeasure'是給定音符在零索引數組中的位置,這是爲了確保總是至少添加1),但它目前似乎沒有改變它在那裏或沒有。感謝您指出,我會刪除它。 – catch22
[執行](http:// mudcu。noteOff的be/midi-js/js/MIDI.Plugin.js)被註釋掉。我還沒有找到任何有關「延遲」實際意義的文檔。 –