引入一個(gè)音頻文件和音符庫(kù),然后通過(guò)使用具體的值來(lái)確定什么時(shí)候播放哪個(gè)音符。在下面的示例中,我們將使用一組包含六個(gè)不同音符的數(shù)組,表示C、D、E、F、G和A音符。然后,我們通過(guò)改變順序來(lái)生成不同的鈴聲。
const notes = ["C", "D", "E", "F", "G", "A"]; const audio = new Audio("file.mp3"); // 按照指定的順序播放音符 function playNotes(order) { order.forEach((note) => { const index = notes.indexOf(note); // 查找音符的索引 const time = 500 * index; // 按索引計(jì)算出每個(gè)音符的等待時(shí)間 setTimeout(() => { audio.play(); }, time); // 按照計(jì)算好的等待時(shí)間播放音符 }); } // 調(diào)用函數(shù) playNotes(["C", "E", "G", "D", "F", "A"]);
在上面的示例中,當(dāng)“playNotes”函數(shù)被調(diào)用時(shí),數(shù)組中的音符按照指定的順序被播放。在此代碼中,我們使用“setInterval”函數(shù)來(lái)計(jì)算不同音符之間的等待時(shí)間。
首先,我們需要計(jì)算每個(gè)音符的等待時(shí)間。在我們的示例中,時(shí)間間隔是500毫秒,我們將每個(gè)音符的索引與此相乘來(lái)計(jì)算每個(gè)音符的等待時(shí)間。然后,我們使用“setTimeout”函數(shù)來(lái)在指定的時(shí)間后播放音頻文件,完成音樂(lè)的播放。在“setTimeout”函數(shù)中,我們指定的時(shí)間表示音符需要等待多久才能開(kāi)始播放。
//不同樂(lè)器的聲音庫(kù) const audio = { "A": new Audio("instruments/piano/A.ogg"), "B": new Audio("instruments/piano/B.ogg"), "C": new Audio("instruments/piano/C.ogg"), "D": new Audio("instruments/piano/D.ogg") }; //將數(shù)字轉(zhuǎn)換為二進(jìn)制編碼,并補(bǔ)齊前導(dǎo)零 function toBinary(number) { return ("00000" + Number(number).toString(2)).substr(-5); } // 解碼二進(jìn)制串 function decodeBinary(binary) { const notes = ["A", "B", "C", "D"]; let decodedString = ""; for (let i = 0; i < binary.length; i += 5) { decodedString += notes[parseInt(binary.substr(i, 5), 2)]; } return decodedString; } // 鋼琴演奏函數(shù) function playPiano(code) { const binary = toBinary(code); const notes = decodeBinary(binary); notes.split("").forEach((note) => { audio[note].play(); }); } // 調(diào)用函數(shù) playPiano(53373);
上面的代碼展示了如何使用JavaScript來(lái)創(chuàng)建一個(gè)簡(jiǎn)單的鋼琴。我們定義了一個(gè)音頻庫(kù)來(lái)存儲(chǔ)不同音符的聲音,然后定義了“playPiano”函數(shù)來(lái)在屏幕上演奏音符。在此代碼中,我們使用了二進(jìn)制編碼,將數(shù)字轉(zhuǎn)換成一個(gè)包含多個(gè)音符的數(shù)組。我們只需將鋼琴按下的數(shù)字輸入到函數(shù)中,就可以讓他進(jìn)行演奏了。
JavaScript樂(lè)譜可以非常具有創(chuàng)造性和有趣。上面所演示的兩種方法,我們只是從冰山一角中挑選出兩組非常簡(jiǎn)單的例子。實(shí)際上,您可以使用JavaScript來(lái)創(chuàng)造許多有趣的樂(lè)譜,它可以讓你在創(chuàng)建動(dòng)畫(huà)、添加音樂(lè)和改進(jìn)您的網(wǎng)站時(shí)呈現(xiàn)出更多的創(chuàng)意。