電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>Arduino音樂

Arduino音樂

2022-10-19 | zip | 0.06 MB | 次下載 | 免費(fèi)

資料介紹

描述

讓我們在堅(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)有趣且有用:

  • 為您的草圖添加心跳- 包括一種可見的方法來查看您的代碼在您的微控制器上運(yùn)行,而無需任何額外的組件或接線!
  • 音樂和燈光工作臺- 旨在將計(jì)算機(jī)編程新手介紹給該主題,使用具有酷炫效果的簡單命令。方法是導(dǎo)師和學(xué)生之一
  • 外部中斷- 支持并發(fā)異步多個(gè)中斷的通用框架。配置多個(gè)不同特性的外部中斷,并添加代碼提供中斷后異步處理。
  • REM_SYS, A Programmatic Timed Reminder Alerting - 用于經(jīng)過時(shí)間和實(shí)時(shí)異步定時(shí)警報(bào)的編程框架。定義任意數(shù)量的計(jì)時(shí)器(提醒)警報(bào)(亞秒到小時(shí))并異步處理。

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)