資料介紹
描述
讓我們在堅果殼中制作音樂
如果您喜歡 Arduino 并且對音樂有基本的了解,那么為什么不與Let's Make Music一起玩樂呢?
使用非常基本的套件列表并使用非常少、非常短和基本的功能,可以制作非常詳細(xì)的樂譜,以便在簡單配置的 Arduino 和揚(yáng)聲器上播放。結(jié)果可能非常驚人和有益!
能力
為了讓您了解“讓我們制作音樂”的草圖功能,我制作了一些非常復(fù)雜的樂譜,由一些傳奇的流行藝術(shù)家創(chuàng)作,所有這些樂曲都忠實地演奏。不幸的是,由于版權(quán)原因,我無法發(fā)布這些內(nèi)容。不過,我已經(jīng)包含了其他開箱即用的示例 (OOTB),它們提供了有用的能力演示和指導(dǎo),以幫助您開始自己的分?jǐn)?shù)。
硬件
再簡單不過了——你只需要一個 Arduino 微控制器(任何一個都可以)、一個 100 歐姆的電阻、一個小面包板、一些電線,最好是一個 8 歐姆 0.25 瓦的揚(yáng)聲器(如果你不這樣做,還需要一個蜂鳴器手頭沒有揚(yáng)聲器)。
接線圖如下圖所示,但它是一個非常簡單的電路。草圖使用數(shù)字輸出引腳 11 來驅(qū)動揚(yáng)聲器,但如果您希望使用另一個引腳,請選擇合適的替代引腳并#define speaker
根據(jù)需要更改草圖中的定義 ' '。
我應(yīng)該建議微控制器不應(yīng)該直接連接到除了揚(yáng)聲器/蜂鳴器之外的任何東西,否則你可能會損壞你的微控制器。
讓我們做音樂
該草圖包括使用基本和標(biāo)準(zhǔn)音樂術(shù)語和概念將您自己的樂譜和作品組合在一起所需的一切。例如,草圖包括一套全面的標(biāo)準(zhǔn)速度、涵蓋多個八度音階的預(yù)設(shè)音符以及基于所選速度的常見音符/休息時間值。
該草圖提供了五個可用于創(chuàng)建和播放音樂的功能。這些是:
set_tempo - 以每分鐘節(jié)拍數(shù)(即每分鐘四分音符)為單位設(shè)置樂曲的節(jié)奏(節(jié)奏),例如set_tempo(allegro)
,set_tempo(144)
等。四分音符的值計算為 60/節(jié)奏秒。然后根據(jù)該計算值確定所有其他音符持續(xù)時間。在草圖啟動時,速度設(shè)置為default_tempo
(animato
),或每分鐘 120 拍(四分音符)。速度將保持在此設(shè)置,直到被用戶代碼更改。
play - 將在給定的持續(xù)時間內(nèi)播放給定的音符,例如,將在最小的持續(xù)時間內(nèi)播放中 C,在四分音符+ 八分音符的持續(xù)時間內(nèi)播放 F2 升號,等等。當(dāng)然,這些播放的速度取決于節(jié)奏設(shè)置。play(note_C4,
minim)
play(note_FS2,
crot + quav)
休息- 在給定的持續(xù)時間內(nèi)休息,在此期間保持沉默,例如rest(quav)
,rest(0.5)
等。請記住,休息也適用于當(dāng)前速度。
顫音- 用給定的兩個音符在給定的持續(xù)時間一個接一個地連續(xù)執(zhí)行顫音,例如trill(note_C4, note_CS4, minim)
,trill(note_F3, note_E3, crot)
等。默認(rèn)情況下和 OOTB,顫音在每個四分音符或其中一部分執(zhí)行八個音符變化,具體取決于在給出的顫音持續(xù)時間它的函數(shù)調(diào)用,與速度設(shè)置無關(guān)。如果每個 crotchet 需要更少或更多的音符更改,則重置定義“ ”。請記住,顫音也適用于當(dāng)前速度。#define
trills_per_crotchet
等待- 等待給定的持續(xù)時間(秒或其一部分),例如wait(5.5)
等待 5.5 秒,wait(minim)
等待最小持續(xù)時間等。此功能由播放和休息功能使用,但也可用于最終用戶代碼。
讓我們看一個熟悉的曲子(生日快樂)的例子:
// 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);
要注意上面的例子是:
-
樂譜的節(jié)奏已設(shè)置為
default_tempo
(每分鐘 120 拍)
- 樂譜以條形排列。在這個例子中,小節(jié)有 3 個節(jié)拍(3/4 拍)。當(dāng)您輸入自己的樂譜時,這是一種有用的方法,因為它可以讓您跟隨音樂并輕松挑選出您無疑會錯誤引入的錯誤音符和/或持續(xù)時間!
- 音符一個接一個地播放(單通道設(shè)計),參考草圖的音符定義中的音符值(請參閱嬰兒床表以獲取這些和其他有用的點點滴滴的易于訪問的列表)
-
使用標(biāo)準(zhǔn)樂譜,例如
crot
(chet)、minim
、quav
(er) 等,在指定的時間/持續(xù)時間內(nèi)演奏每個音符。同樣,使用Crib Sheet可以輕松訪問這些音符。
讓我們看另一個簡短的例子,當(dāng)你玩它時你就會知道:
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
我們在第 3 小節(jié)的中間引入了一個空頭crot
(切)
- 當(dāng)樂曲完成時,我們將速度重置為默認(rèn)值。
最后,在本節(jié)中,讓我們回顧一下生日快樂,這次我們將在每個奇數(shù)小節(jié)的開頭添加一個顫音:
//_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í)慣的旋律,但有一點曲折。顫音功能是音樂顫音的簡單實現(xiàn),但應(yīng)該對您的樂譜產(chǎn)生一些興趣。
希望到此為止,您了解所應(yīng)用的原則嗎?
一些有用的指針和技巧...
三胞胎
三連音是一個單獨的節(jié)拍,分為三個等時的音符,通常在三連音音符上方用“3”表示。這很容易建模,例如,如果我們將以下三個音符定義為三連音 - A3、AS3 和 B3 并且值得一個四分音符,那么我們可以簡單地將其轉(zhuǎn)錄為:
// crotchet triplet
play(note_A3, crot/3);
play(note_AS3, crot/3);
play(note_B3, crot/3);
同樣的想法適用于任何部門。
領(lǐng)帶
并列音符是由連接兩個相同音高音符的曲線表示的樂譜。在平局中,不播放第二個音符,但將其持續(xù)時間值添加到第一個音符。因此,例如,如果樂譜顯示兩個并列的音符,比如note_AF3
都帶有四分音符的持續(xù)時間,那么我們會將其表示為play(note_AF3, crot + crot)
, 或play(note_AF3, minim)
。第一個表示更好,因為它推斷我們正在演奏一個并列的音符。請注意,捆綁的音符通常可以從一個小節(jié)的末尾延伸到下一個小節(jié)。在這些情況下,它有助于在您包含描述條形圖的任何評論中標(biāo)記這一點。
另一個例子可能是兩個音符,比如說note_F4
第一個音符的持續(xù)時間值是四分音符,第二個音符的持續(xù)時間值是八分音符。我們將其表示為play(note_F4, crot + quav)
。等等。
復(fù)合音符和休息時間
我們在上面的技術(shù)中看到了我們?nèi)绾文軌驈?fù)合和操縱音符持續(xù)時間以滿足表示三連音和連音的樂譜的精確需求。同樣的技術(shù)同樣適用于需要音符時長的rest
和函數(shù)。trill
事實上,只要有意義,任何算術(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
。因此,如果您需要一個不在標(biāo)準(zhǔn)列表中的速度,那么只需指定您自己的速度。例如set_tempo(95)
,介于maestroso
(每分鐘 88 次)和moderato
(每分鐘 100 次)之間,依此類推。
重復(fù)
樂譜的一部分經(jīng)常重復(fù)。與其復(fù)制相同的一組和一系列的音符/休止符,使用標(biāo)簽和(可怕的)goto
語句會很有幫助。為此,有必要檢測樂譜的一部分是否已經(jīng)重復(fù)。這可以使用具有兩種狀態(tà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
簡單、清晰且易于實施,即使樂譜具有多個重復(fù)部分。如果它們更適合您的需求,請隨意使用 do/while 或 while 構(gòu)造。
轉(zhuǎn)錄樂譜
在將樂譜編碼為音樂命令時,它有助于有序和結(jié)構(gòu)化。根據(jù)樂譜的拍號逐個小節(jié)工作,用小節(jié)編號評論每個小節(jié),并添加任何其他可能有幫助的評論。這種方法有助于調(diào)試您的代碼,因為我可以保證您將引入不正確的音符和/或音符/休息時間。在逐條閱讀代碼的同時聆聽樂譜以確保準(zhǔn)確性,很快就會發(fā)現(xiàn)哪里出了問題。
盒子外面
Let's Make Music 草圖包含了整理您自己的樂譜所需的所有音樂數(shù)據(jù)和功能。還包括許多樂譜示例,因此您可以了解如何使用各種草圖功能,也可以立即在 Arduino 上播放音樂。
為方便起見,示例分?jǐn)?shù)作為函數(shù)提供,并且可以以任何順序直接從主 void 循環(huán)引用。如果一個接一個地組裝多個得分函數(shù),然后wait(..)
在每個函數(shù)之間添加一個函數(shù)調(diào)用,以便在一個結(jié)束和下一個開始之間獲得短暫的休息,例如wait(3)
等待三秒鐘。
OOTB 提供的樂譜函數(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 制作音樂的樂趣。它并不過分復(fù)雜,但提供了一些簡單而基本的命令,可以產(chǎn)生非常好的結(jié)果。下載并打印嬰兒床表,作為對所有草圖的音樂數(shù)據(jù)定義和功能的方便和快速參考。
最重要的是,享受在 Arduino 上制作音樂并玩得開心!
延伸閱讀
您可能還會發(fā)現(xiàn)同一作者的這些貢獻(xiàn)有趣且有用:
- 使用無限計時器- 一種在草圖中創(chuàng)建任意數(shù)量的非阻塞計時器的簡單方法
- 為您的草圖添加心跳- 包括一種可見的方法來查看您的代碼在您的微控制器上運(yùn)行,而無需任何額外的組件或接線!
- 一個靈活、可擴(kuò)展的庫 (ez_SIPO8_lib) - 支持實現(xiàn)多個串行輸入/串行輸出 IC、74HC595,無論是單獨還是在級聯(lián)組中,最多 255 個 IC(2040 個輸出引腳)
- 通用開關(guān)庫 (ez_switch_lib) - 適用于大多數(shù)開關(guān)類型和接線方案,包含新穎的功能
- 了解和使用按鈕開關(guān),基本知識- 按鈕開關(guān),一個簡單但通常很棘手的工具包。本教程提供了實現(xiàn)簡單按鈕開關(guān)的來龍去脈,靈活地探索電路設(shè)計的差異、不同的讀取方法和去抖動。
- 中斷驅(qū)動按鈕開關(guān)- 一種將按鈕開關(guān)與外部中斷聯(lián)系起來的方法和示例。
- 撥動開關(guān)- 如何可靠地讀取撥動式開關(guān)。
- Buttons & Lights Game - 使用按鈕開關(guān)和 LED 帶來一點樂趣。
- 外部中斷- 支持并發(fā)異步多個中斷的通用框架。配置多個不同特性的外部中斷,并添加代碼提供中斷后異步處理。
- REM_SYS, A Programmatic Timed Reminder Alerting - 用于經(jīng)過時間和實時異步定時警報的編程框架。定義任意數(shù)量的計時器(提醒)警報(亞秒到小時)并異步處理。
- AMP:Arduino 音樂播放器開源硬件分享
- 使用Arduino Uno的天文棺材舞蹈模因音樂
- Arduino音樂:音符和和弦檢測器
- 使用Arduino制作基于音樂的項目
- Arduino UNO構(gòu)建音樂播放器
- Arduino UNO嬰兒高腳椅音樂劇
- Arduino搭建音樂仙女燈
- 使用Arduino和處理的音樂燈
- 如何用Arduino制作音樂
- Arduino制作有節(jié)奏的燈條輕音樂
- Arduino Uno國內(nèi)改版電路原理圖下載 0次下載
- Arduino Uno Rev.3開發(fā)板意大利原版電路圖 0次下載
- Arduino編程基礎(chǔ)(一)——Arduino語言資料下載
- 基于Arduino的電子音樂發(fā)聲器的設(shè)計方案 3次下載
- Arduino 328控制板制作音樂 140次下載
- 基于Arduino的音樂創(chuàng)作系統(tǒng)設(shè)計 1271次閱讀
- 如何使用Python和PinPong庫控制Arduino 1033次閱讀
- 如何利用Arduino UNO和SD卡制作音樂播放器 8107次閱讀
- 如何從網(wǎng)頁控制arduino? 4186次閱讀
- 微雪電子Arduino 音頻播放擴(kuò)展板簡介 2128次閱讀
- 新唐科技音樂合成系列介紹 1446次閱讀
- 多款音樂芯片電路圖 1.6w次閱讀
- arduino如何控制舵機(jī)及詳細(xì)步驟 16.5w次閱讀
- arduino連接顯示屏方法詳解 4.7w次閱讀
- Arduino如何安裝驅(qū)動_Arduino安裝驅(qū)動步驟 5.9w次閱讀
- 淺談Arduino和樹莓派的區(qū)別 2.1w次閱讀
- arduino用什么語言編程 6.9w次閱讀
- arduino是什么以及arduino能干什么 4.5w次閱讀
- arduino開發(fā)板有什么用 2.1w次閱讀
- 7款富有創(chuàng)意的可穿戴音樂設(shè)備:音樂的享受 3615次閱讀
下載排行
本周
- 1蘇泊爾電磁爐線路的電路原理圖資料合集
- 2.02 MB | 286次下載 | 5 積分
- 2長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
- 0.46 MB | 87次下載 | 5 積分
- 3AO4803A雙P通道增強(qiáng)型場效應(yīng)晶體管的數(shù)據(jù)手冊
- 0.11 MB | 28次下載 | 2 積分
- 4長虹液晶彩電LS29機(jī)芯的技術(shù)資料說明
- 3.42 MB | 16次下載 | 2 積分
- 5AI智能眼鏡產(chǎn)業(yè)鏈分析
- 4.43 MB | 14次下載 | 免費
- 6TP4055 500mA線性鋰離子電池充電器中文手冊
- 0.75 MB | 9次下載 | 免費
- 7TP4054 400mA線性鋰離子電池充電器中文手冊
- 0.70 MB | 2次下載 | 免費
- 8TP4057X 500mA線性鋰離子電池充電器中文手冊
- 0.74 MB | 2次下載 | 免費
本月
- 1人形機(jī)器人電機(jī)驅(qū)動和傳感報告
- 4.27 MB | 475次下載 | 免費
- 2蘇泊爾電磁爐線路的電路原理圖資料合集
- 2.02 MB | 286次下載 | 5 積分
- 3長虹液晶電視R-HS310B-5HF01的電源板電路原理圖
- 0.46 MB | 87次下載 | 5 積分
- 4U盤一鍵制作
- 23.84 MB | 41次下載 | 免費
- 5AO4803A雙P通道增強(qiáng)型場效應(yīng)晶體管的數(shù)據(jù)手冊
- 0.11 MB | 28次下載 | 2 積分
- 6Altium Designer元件庫
- 17.11 MB | 26次下載 | 免費
- 7長虹液晶彩電LS29機(jī)芯的技術(shù)資料說明
- 3.42 MB | 16次下載 | 2 積分
- 8AI智能眼鏡產(chǎn)業(yè)鏈分析
- 4.43 MB | 14次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935127次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191382次下載 | 10 積分
- 5十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183342次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81586次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費下載
- 0.02 MB | 73815次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論