資料介紹
描述
讓我們?cè)趫?jiān)果殼中制作音樂(lè)
如果您喜歡 Arduino 并且對(duì)音樂(lè)有基本的了解,那么為什么不與Let's Make Music一起玩樂(lè)呢?
使用非?;镜奶准斜聿⑹褂梅浅I?、非常短和基本的功能,可以制作非常詳細(xì)的樂(lè)譜,以便在簡(jiǎn)單配置的 Arduino 和揚(yáng)聲器上播放。結(jié)果可能非常驚人和有益!
能力
為了讓您了解“讓我們制作音樂(lè)”的草圖功能,我制作了一些非常復(fù)雜的樂(lè)譜,由一些傳奇的流行藝術(shù)家創(chuàng)作,所有這些樂(lè)曲都忠實(shí)地演奏。不幸的是,由于版權(quán)原因,我無(wú)法發(fā)布這些內(nèi)容。不過(guò),我已經(jīng)包含了其他開(kāi)箱即用的示例 (OOTB),它們提供了有用的能力演示和指導(dǎo),以幫助您開(kāi)始自己的分?jǐn)?shù)。
硬件
再簡(jiǎn)單不過(guò)了——你只需要一個(gè) Arduino 微控制器(任何一個(gè)都可以)、一個(gè) 100 歐姆的電阻、一個(gè)小面包板、一些電線,最好是一個(gè) 8 歐姆 0.25 瓦的揚(yáng)聲器(如果你不這樣做,還需要一個(gè)蜂鳴器手頭沒(méi)有揚(yáng)聲器)。
接線圖如下圖所示,但它是一個(gè)非常簡(jiǎn)單的電路。草圖使用數(shù)字輸出引腳 11 來(lái)驅(qū)動(dòng)揚(yáng)聲器,但如果您希望使用另一個(gè)引腳,請(qǐng)選擇合適的替代引腳并#define speaker
根據(jù)需要更改草圖中的定義 ' '。
我應(yīng)該建議微控制器不應(yīng)該直接連接到除了揚(yáng)聲器/蜂鳴器之外的任何東西,否則你可能會(huì)損壞你的微控制器。
讓我們做音樂(lè)
該草圖包括使用基本和標(biāo)準(zhǔn)音樂(lè)術(shù)語(yǔ)和概念將您自己的樂(lè)譜和作品組合在一起所需的一切。例如,草圖包括一套全面的標(biāo)準(zhǔn)速度、涵蓋多個(gè)八度音階的預(yù)設(shè)音符以及基于所選速度的常見(jiàn)音符/休息時(shí)間值。
該草圖提供了五個(gè)可用于創(chuàng)建和播放音樂(lè)的功能。這些是:
set_tempo - 以每分鐘節(jié)拍數(shù)(即每分鐘四分音符)為單位設(shè)置樂(lè)曲的節(jié)奏(節(jié)奏),例如set_tempo(allegro)
,set_tempo(144)
等。四分音符的值計(jì)算為 60/節(jié)奏秒。然后根據(jù)該計(jì)算值確定所有其他音符持續(xù)時(shí)間。在草圖啟動(dòng)時(shí),速度設(shè)置為default_tempo
(animato
),或每分鐘 120 拍(四分音符)。速度將保持在此設(shè)置,直到被用戶代碼更改。
play - 將在給定的持續(xù)時(shí)間內(nèi)播放給定的音符,例如,將在最小的持續(xù)時(shí)間內(nèi)播放中 C,在四分音符+ 八分音符的持續(xù)時(shí)間內(nèi)播放 F2 升號(hào),等等。當(dāng)然,這些播放的速度取決于節(jié)奏設(shè)置。play(note_C4,
minim)
play(note_FS2,
crot + quav)
休息- 在給定的持續(xù)時(shí)間內(nèi)休息,在此期間保持沉默,例如rest(quav)
,rest(0.5)
等。請(qǐng)記住,休息也適用于當(dāng)前速度。
顫音- 用給定的兩個(gè)音符在給定的持續(xù)時(shí)間一個(gè)接一個(gè)地連續(xù)執(zhí)行顫音,例如trill(note_C4, note_CS4, minim)
,trill(note_F3, note_E3, crot)
等。默認(rèn)情況下和 OOTB,顫音在每個(gè)四分音符或其中一部分執(zhí)行八個(gè)音符變化,具體取決于在給出的顫音持續(xù)時(shí)間它的函數(shù)調(diào)用,與速度設(shè)置無(wú)關(guān)。如果每個(gè) crotchet 需要更少或更多的音符更改,則重置定義“ ”。請(qǐng)記住,顫音也適用于當(dāng)前速度。#define
trills_per_crotchet
等待- 等待給定的持續(xù)時(shí)間(秒或其一部分),例如wait(5.5)
等待 5.5 秒,wait(minim)
等待最小持續(xù)時(shí)間等。此功能由播放和休息功能使用,但也可用于最終用戶代碼。
讓我們看一個(gè)熟悉的曲子(生日快樂(lè))的例子:
// Happy_Birthday
set_tempo(default_tempo);
// bar 1
play(note_G3, quav);
play(note_G3, quav);
play(note_A3, crot);
play(note_G3, crot);
// bar 2
play(note_C4, crot);
play(note_B3, minim);
// bar 3
play(note_G3, quav);
play(note_G3, quav);
play(note_A3, crot);
play(note_G3, crot);
// bar 4
play(note_D4, crot);
play(note_C4, minim);
// bar 5
play(note_G3, quav);
play(note_G3, quav);
play(note_G4, crot);
play(note_E4, crot);
// bar 6
play(note_C4, crot);
play(note_B3, crot);
play(note_A3, crot);
// bar 7
play(note_F4, quav);
play(note_F4, quav);
play(note_E4, crot);
play(note_C4, crot);
// bar 8
play(note_D4, crot);
play(note_C4, minim);
要注意上面的例子是:
-
樂(lè)譜的節(jié)奏已設(shè)置為
default_tempo
(每分鐘 120 拍)
- 樂(lè)譜以條形排列。在這個(gè)例子中,小節(jié)有 3 個(gè)節(jié)拍(3/4 拍)。當(dāng)您輸入自己的樂(lè)譜時(shí),這是一種有用的方法,因?yàn)樗梢宰屇S音樂(lè)并輕松挑選出您無(wú)疑會(huì)錯(cuò)誤引入的錯(cuò)誤音符和/或持續(xù)時(shí)間!
- 音符一個(gè)接一個(gè)地播放(單通道設(shè)計(jì)),參考草圖的音符定義中的音符值(請(qǐng)參閱嬰兒床表以獲取這些和其他有用的點(diǎn)點(diǎn)滴滴的易于訪問(wèn)的列表)
-
使用標(biāo)準(zhǔn)樂(lè)譜,例如
crot
(chet)、minim
、quav
(er) 等,在指定的時(shí)間/持續(xù)時(shí)間內(nèi)演奏每個(gè)音符。同樣,使用Crib Sheet可以輕松訪問(wèn)這些音符。
讓我們看另一個(gè)簡(jiǎn)短的例子,當(dāng)你玩它時(shí)你就會(huì)知道:
set_tempo(default_tempo * 2); // lively pace
// 3/4 time
// bar 1
play(note_C4, minim);
play(note_G3, crot);
// bar 2
play(note_G3, crot);
play(note_GS3, minim);
// bar 3
play(note_G3, minim);
rest(note_crot);
// bar 4
play(note_B3, minim);
play(note_C4, crot);
set_tempo(default_tempo); // reset tempo
要注意上面的例子是:
- 我們將速度提高到默認(rèn)值的兩倍 - 每分鐘 240 拍
-
rest
我們?cè)诘?3 小節(jié)的中間引入了一個(gè)空頭crot
(切)
- 當(dāng)樂(lè)曲完成時(shí),我們將速度重置為默認(rèn)值。
最后,在本節(jié)中,讓我們回顧一下生日快樂(lè),這次我們將在每個(gè)奇數(shù)小節(jié)的開(kāi)頭添加一個(gè)顫音:
//_Happy_trill_Birthday
set_tempo(default_tempo);
// 3/4 time
// bar 1
trill(note_G3, note_GS3, quav);
play(note_G3, quav);
play(note_A3, crot);
play(note_G3, crot);
// bar 2
play(note_C4, crot);
play(note_B3, minim);
// bar 3
trill(note_G3, note_GS3, quav);
play(note_note_G3, quav);
play(note_A3, crot);
play(note_G3, crot);
// bar 4
play(note_D4, crot);
play(note_C4, minim);
// bar 5
trill(note_G3,
play(note_G3, quav);
play(note_G4, crot);
play(note_E4, crot);
// bar 6
play(note_C4, crot);
play(note_B3, crot);
play(note_A3, crot);
// bar 7
trill(note_F4, note_FS4, quav);
play(note_F4, quav);
play(note_E4, crot);
play(note_C4, crot);
// bar 8
play(note_D4, crot);
play(note_C4, minim);
這是我們習(xí)慣的旋律,但有一點(diǎn)曲折。顫音功能是音樂(lè)顫音的簡(jiǎn)單實(shí)現(xiàn),但應(yīng)該對(duì)您的樂(lè)譜產(chǎn)生一些興趣。
希望到此為止,您了解所應(yīng)用的原則嗎?
一些有用的指針和技巧...
三胞胎
三連音是一個(gè)單獨(dú)的節(jié)拍,分為三個(gè)等時(shí)的音符,通常在三連音音符上方用“3”表示。這很容易建模,例如,如果我們將以下三個(gè)音符定義為三連音 - A3、AS3 和 B3 并且值得一個(gè)四分音符,那么我們可以簡(jiǎn)單地將其轉(zhuǎn)錄為:
// crotchet triplet
play(note_A3, crot/3);
play(note_AS3, crot/3);
play(note_B3, crot/3);
同樣的想法適用于任何部門(mén)。
領(lǐng)帶
并列音符是由連接兩個(gè)相同音高音符的曲線表示的樂(lè)譜。在平局中,不播放第二個(gè)音符,但將其持續(xù)時(shí)間值添加到第一個(gè)音符。因此,例如,如果樂(lè)譜顯示兩個(gè)并列的音符,比如note_AF3
都帶有四分音符的持續(xù)時(shí)間,那么我們會(huì)將其表示為play(note_AF3, crot + crot)
, 或play(note_AF3, minim)
。第一個(gè)表示更好,因?yàn)樗茢辔覀冋谘葑嘁粋€(gè)并列的音符。請(qǐng)注意,捆綁的音符通??梢詮囊粋€(gè)小節(jié)的末尾延伸到下一個(gè)小節(jié)。在這些情況下,它有助于在您包含描述條形圖的任何評(píng)論中標(biāo)記這一點(diǎn)。
另一個(gè)例子可能是兩個(gè)音符,比如說(shuō)note_F4
第一個(gè)音符的持續(xù)時(shí)間值是四分音符,第二個(gè)音符的持續(xù)時(shí)間值是八分音符。我們將其表示為play(note_F4, crot + quav)
。等等。
復(fù)合音符和休息時(shí)間
我們?cè)谏厦娴募夹g(shù)中看到了我們?nèi)绾文軌驈?fù)合和操縱音符持續(xù)時(shí)間以滿足表示三連音和連音的樂(lè)譜的精確需求。同樣的技術(shù)同樣適用于需要音符時(shí)長(zhǎng)的rest
和函數(shù)。trill
事實(shí)上,只要有意義,任何算術(shù)組合都是允許的,例如play(note_D5, minim + crot + quav)
, rest(crot + quav)
,trill(note_G2, note_GS2, dot_minim + quav/2)
等。
節(jié)奏
雖然草圖提供了標(biāo)準(zhǔn)速度定義的列表,但該函數(shù)可以指定任何值set_tempo
。因此,如果您需要一個(gè)不在標(biāo)準(zhǔn)列表中的速度,那么只需指定您自己的速度。例如set_tempo(95)
,介于maestroso
(每分鐘 88 次)和moderato
(每分鐘 100 次)之間,依此類推。
重復(fù)
樂(lè)譜的一部分經(jīng)常重復(fù)。與其復(fù)制相同的一組和一系列的音符/休止符,使用標(biāo)簽和(可怕的)goto
語(yǔ)句會(huì)很有幫助。為此,有必要檢測(cè)樂(lè)譜的一部分是否已經(jīng)重復(fù)。這可以使用具有兩種狀態(tài)之一的簡(jiǎn)單變量來(lái)管理 -false
如果重復(fù)部分尚未重復(fù),則為“ true
”,否則為“ ”。例如:
...
bool repeated = false;
...
repeat_1:
play(note_B3, crot);
rest(quav);
play(note_C4, quav);
play(note_D4, crot+quav); // dotted crotchet
play(note_C4, quav);
...
If (repeated == false){
repeated = true;
play(note_A3, crot);
rest(crot);
play(note_C4, crot);
play(note_D4, crot);
goto repeat;
}
// continue with the rest of the score...
我向你們中間的純粹主義者道歉,但在這種情況下,a 的使用goto
簡(jiǎn)單、清晰且易于實(shí)施,即使樂(lè)譜具有多個(gè)重復(fù)部分。如果它們更適合您的需求,請(qǐng)隨意使用 do/while 或 while 構(gòu)造。
轉(zhuǎn)錄樂(lè)譜
在將樂(lè)譜編碼為音樂(lè)命令時(shí),它有助于有序和結(jié)構(gòu)化。根據(jù)樂(lè)譜的拍號(hào)逐個(gè)小節(jié)工作,用小節(jié)編號(hào)評(píng)論每個(gè)小節(jié),并添加任何其他可能有幫助的評(píng)論。這種方法有助于調(diào)試您的代碼,因?yàn)槲铱梢员WC您將引入不正確的音符和/或音符/休息時(shí)間。在逐條閱讀代碼的同時(shí)聆聽(tīng)樂(lè)譜以確保準(zhǔn)確性,很快就會(huì)發(fā)現(xiàn)哪里出了問(wèn)題。
盒子外面
Let's Make Music 草圖包含了整理您自己的樂(lè)譜所需的所有音樂(lè)數(shù)據(jù)和功能。還包括許多樂(lè)譜示例,因此您可以了解如何使用各種草圖功能,也可以立即在 Arduino 上播放音樂(lè)。
為方便起見(jiàn),示例分?jǐn)?shù)作為函數(shù)提供,并且可以以任何順序直接從主 void 循環(huán)引用。如果一個(gè)接一個(gè)地組裝多個(gè)得分函數(shù),然后wait(..)
在每個(gè)函數(shù)之間添加一個(gè)函數(shù)調(diào)用,以便在一個(gè)結(jié)束和下一個(gè)開(kāi)始之間獲得短暫的休息,例如wait(3)
等待三秒鐘。
OOTB 提供的樂(lè)譜函數(shù)有:
-
middle_C
-
twinkle_twinkle
(小星星)
-
silent_night
-
jingle_bells
-
happy_birthday
-
ditty_1
-
door_bell_1
-
door_bell_2
-
ode_to_joy
(貝多芬)
-
canon_in_D
(帕赫貝爾)
-
scarborough_fair
最后
Let's Make Music 小品是關(guān)于用 Arduino 制作音樂(lè)的樂(lè)趣。它并不過(guò)分復(fù)雜,但提供了一些簡(jiǎn)單而基本的命令,可以產(chǎn)生非常好的結(jié)果。下載并打印嬰兒床表,作為對(duì)所有草圖的音樂(lè)數(shù)據(jù)定義和功能的方便和快速參考。
最重要的是,享受在 Arduino 上制作音樂(lè)并玩得開(kāi)心!
延伸閱讀
您可能還會(huì)發(fā)現(xiàn)同一作者的這些貢獻(xiàn)有趣且有用:
- 使用無(wú)限計(jì)時(shí)器- 一種在草圖中創(chuàng)建任意數(shù)量的非阻塞計(jì)時(shí)器的簡(jiǎn)單方法
- 為您的草圖添加心跳- 包括一種可見(jiàn)的方法來(lái)查看您的代碼在您的微控制器上運(yùn)行,而無(wú)需任何額外的組件或接線!
- 音樂(lè)和燈光工作臺(tái)- 旨在將計(jì)算機(jī)編程新手介紹給該主題,使用具有酷炫效果的簡(jiǎn)單命令。方法是導(dǎo)師和學(xué)生之一
- 一個(gè)靈活、可擴(kuò)展的庫(kù) (ez_SIPO8_lib) - 支持實(shí)現(xiàn)多個(gè)串行輸入/串行輸出 IC、74HC595,無(wú)論是單獨(dú)還是在級(jí)聯(lián)組中,最多 255 個(gè) IC(2040 個(gè)輸出引腳)
- 通用開(kāi)關(guān)庫(kù) (ez_switch_lib) - 適用于大多數(shù)開(kāi)關(guān)類型和接線方案,包含新穎的功能
- 了解和使用按鈕開(kāi)關(guān),基本知識(shí)- 按鈕開(kāi)關(guān),一個(gè)簡(jiǎn)單但通常很棘手的工具包。本教程提供了實(shí)現(xiàn)簡(jiǎn)單按鈕開(kāi)關(guān)的來(lái)龍去脈,靈活地探索電路設(shè)計(jì)的差異、不同的讀取方法和去抖動(dòng)。
- 中斷驅(qū)動(dòng)按鈕開(kāi)關(guān)- 一種將按鈕開(kāi)關(guān)與外部中斷聯(lián)系起來(lái)的方法和示例。
- 撥動(dòng)開(kāi)關(guān)- 如何可靠地讀取撥動(dòng)式開(kāi)關(guān)。
- Buttons & Lights Game - 使用按鈕開(kāi)關(guān)和 LED 帶來(lái)一點(diǎn)樂(lè)趣。
- 外部中斷- 支持并發(fā)異步多個(gè)中斷的通用框架。配置多個(gè)不同特性的外部中斷,并添加代碼提供中斷后異步處理。
- REM_SYS, A Programmatic Timed Reminder Alerting - 用于經(jīng)過(guò)時(shí)間和實(shí)時(shí)異步定時(shí)警報(bào)的編程框架。定義任意數(shù)量的計(jì)時(shí)器(提醒)警報(bào)(亞秒到小時(shí))并異步處理。
- AMP:Arduino 音樂(lè)播放器開(kāi)源硬件分享
- 使用Arduino Uno的天文棺材舞蹈模因音樂(lè)
- Arduino音樂(lè):音符和和弦檢測(cè)器
- 使用Arduino制作基于音樂(lè)的項(xiàng)目
- Arduino UNO構(gòu)建音樂(lè)播放器
- Arduino UNO嬰兒高腳椅音樂(lè)劇
- Arduino搭建音樂(lè)仙女燈
- 使用Arduino和處理的音樂(lè)燈
- 如何用Arduino制作音樂(lè)
- Arduino制作有節(jié)奏的燈條輕音樂(lè)
- Arduino Uno國(guó)內(nèi)改版電路原理圖下載 0次下載
- Arduino Uno Rev.3開(kāi)發(fā)板意大利原版電路圖 0次下載
- Arduino編程基礎(chǔ)(一)——Arduino語(yǔ)言資料下載
- 基于Arduino的電子音樂(lè)發(fā)聲器的設(shè)計(jì)方案 3次下載
- Arduino 328控制板制作音樂(lè) 140次下載
- 基于Arduino的音樂(lè)創(chuàng)作系統(tǒng)設(shè)計(jì) 959次閱讀
- 如何使用Python和PinPong庫(kù)控制Arduino 718次閱讀
- 如何利用Arduino UNO和SD卡制作音樂(lè)播放器 7319次閱讀
- 如何從網(wǎng)頁(yè)控制arduino? 3836次閱讀
- 微雪電子Arduino 音頻播放擴(kuò)展板簡(jiǎn)介 1862次閱讀
- 新唐科技音樂(lè)合成系列介紹 1304次閱讀
- 多款音樂(lè)芯片電路圖 1.5w次閱讀
- arduino如何控制舵機(jī)及詳細(xì)步驟 16.3w次閱讀
- arduino連接顯示屏方法詳解 4.7w次閱讀
- Arduino如何安裝驅(qū)動(dòng)_Arduino安裝驅(qū)動(dòng)步驟 5.8w次閱讀
- 淺談Arduino和樹(shù)莓派的區(qū)別 2.1w次閱讀
- arduino用什么語(yǔ)言編程 6.9w次閱讀
- arduino是什么以及arduino能干什么 4.4w次閱讀
- arduino開(kāi)發(fā)板有什么用 2w次閱讀
- 7款富有創(chuàng)意的可穿戴音樂(lè)設(shè)備:音樂(lè)的享受 3512次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開(kāi)發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多