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