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