arduino制作各種歌曲11_第1頁
arduino制作各種歌曲11_第2頁
arduino制作各種歌曲11_第3頁
arduino制作各種歌曲11_第4頁
arduino制作各種歌曲11_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第頁首先講下簡單的樂理知識,知道音樂是怎么演奏出來的自然就可以通過代碼來進行編排了。

1.演奏單音符

一首樂曲有若干音符組成,一個音符對應(yīng)一個頻率。我們知道到相對應(yīng)的頻率讓arduino輸出到蜂鳴器蜂鳴器就會放出相應(yīng)的聲音,這里有個表供大家參考:

2.音符的演奏時間

我們知道了音符是如何演奏出來的,下一步就是控制音符的演奏時間。每個音符都會播放一定的時間,這樣才能構(gòu)成一首優(yōu)美的曲子,而不是生硬的一個調(diào)的把所有的音符一股腦的都播放出來。如何確定每個音符演奏的單位時間呢?

我們知道,音符節(jié)奏分為一拍、半拍、1/4拍、1/8拍,我們規(guī)定一拍音符的時間為1;半拍為0.5;1/4拍為0.25;1/8拍為0.125……,所以我們可以為每個音符賦予這樣的拍子播放出來,音樂就成了。

好了我們看看如何將簡譜翻譯成對應(yīng)頻率和拍子。

以葫蘆娃為例:

先看下左上角1=D這里,用的是D調(diào),好那我們就看《音符頻率表》中的D行(紅色部分)

,

第一個音符是1但上面有個點,所以對應(yīng)的就是589,時間是一拍=1,

第二個音符6(沒有點)就是495,時間也是一拍=1,

第三個音符5即441,因為有下劃線所以是半拍=0.5,

……以此類推

第四0這里要注意下,這里是沒有聲音,但是要是用頻率0表示還是會有聲音(這個不懂),所以我們用一個很高頻率的聲音,這樣人耳聽不到就達到了沒有聲音的效果,所以頻率為-1。拍子=1拍

第五,再接著看到第一句歌詞葫蘆娃這個娃的音是3—,這表示是兩拍,后面每加一個“-”,表示拍子+1(1+1),本例中最多是加到4.

第六,第二句歌詞葫蘆娃這個娃,3?帶個點,點的意思是去3的拍子的一半,即3?的拍子是1+0.5

第七,大家可能會問那弧線怎么表示,這在音樂中屬于連音,我們要表示的話,可以稍微改下連音后面那個音的頻率,比如減少或增加一些數(shù)值(需自己調(diào)試),這樣表現(xiàn)會更流暢,但操作上更復(fù)雜了,本例沒有做連音的處理,大家有興趣可以自己調(diào)整下。

所以說了一大堆,規(guī)律就是時間上單個音符沒有下劃線,就是一拍(1),有下劃線是半拍(0.5),兩個下劃線是四分之一拍(0.25),有“—”=前面音符的拍子+1;頻率上就是按照音符是否帶點,點在上還是在下到表中查找就可以了。

至此原理清楚,隨便拿個簡譜來我們都可以翻譯成代碼了。

好,下面進入代碼部分,來看下這首《葫蘆娃》的代碼:

01.#defineNOTE_D0-1

02.#defineNOTE_D1294

03.#defineNOTE_D2330

04.#defineNOTE_D3350

05.#defineNOTE_D4393

06.#defineNOTE_D5441

07.#defineNOTE_D6495

08.#defineNOTE_D7556

09.

10.#defineNOTE_DL1147

11.#defineNOTE_DL2165

12.#defineNOTE_DL3175

13.#defineNOTE_DL4196

14.#defineNOTE_DL5221

15.#defineNOTE_DL6248

16.#defineNOTE_DL7278

17.

18.#defineNOTE_DH1589

19.#defineNOTE_DH2661

20.#defineNOTE_DH3700

21.#defineNOTE_DH4786

22.#defineNOTE_DH5882

23.#defineNOTE_DH6990

24.#defineNOTE_DH71112

25.//以上部分是定義是把每個音符和頻率值對應(yīng)起來,其實不用打這么多,但是都打上了,后面可以隨意編寫D調(diào)的各種歌,我這里用NOTE_D+數(shù)字表示音符,NOTE_DH+數(shù)字表示上面有點的那種音符,NOTE_DL+數(shù)字表示下面有點的那種音符。這樣后面寫起來比較好識別。

26.#defineWHOLE1

27.#defineHALF0.5

28.#defineQUARTER0.25

29.#defineEIGHTH0.25

30.#defineSIXTEENTH0.625

31.//這部分是用英文對應(yīng)了拍子,這樣后面也比較好看

32.inttune[]=

33.{

34.

NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_D0,

35.

NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_DH1,NOTE_D6,NOTE_D0,NOTE_D6,

36.

NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,NOTE_D0,NOTE_D6,

37.

NOTE_DH1,NOTE_D6,NOTE_D5,NOTE_DH1,NOTE_D6,NOTE_D0,

38.

39.

NOTE_D1,NOTE_D1,NOTE_D3,

40.

NOTE_D1,NOTE_D1,NOTE_D3,NOTE_D0,

41.

NOTE_D6,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,

42.

NOTE_D5,NOTE_D1,NOTE_D3,NOTE_D0,

43.

NOTE_DH1,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D6,

44.

NOTE_D5,NOTE_D1,NOTE_D2,NOTE_D0,

45.

NOTE_D7,NOTE_D7,NOTE_D5,NOTE_D3,

46.

NOTE_D5,

47.

NOTE_DH1,NOTE_D0,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D5,NOTE_D6,NOTE_D6,

48.

NOTE_D0,NOTE_D5,NOTE_D1,NOTE_D3,NOTE_D0,

49.

NOTE_DH1,NOTE_D0,NOTE_D6,NOTE_D6,NOTE_D5,NOTE_D5,NOTE_D6,NOTE_D6,

50.

NOTE_D0,NOTE_D5,NOTE_D1,NOTE_D2,NOTE_D0,

51.

NOTE_D3,NOTE_D3,NOTE_D1,NOTE_DL6,

52.

NOTE_D1,

53.

NOTE_D3,NOTE_D5,NOTE_D6,NOTE_D6,

54.

NOTE_D3,NOTE_D5,NOTE_D6,NOTE_D6,

55.

NOTE_DH1,NOTE_D0,NOTE_D7,NOTE_D5,

56.

NOTE_D6,

57.};//這部分就是整首曲子的音符部分,用了一個序列定義為tune,整數(shù)

58.

59.floatduration[]=

60.{

61.

1,1,0.5,0.5,1,

62.

0.5,0.5,0.5,0.5,1,0.5,0.5,

63.

0.5,1,0.5,1,0.5,0.5,

64.

0.5,0.5,0.5,0.5,1,1,

65.

66.

1,1,1+1,

67.

0.5,1,1+0.5,1,

68.

1,1,0.5,0.5,1,

69.

0.5,1,1+0.5,1,

70.

0.5,0.5,0.5,0.5,1+1,

71.

0.5,1,1+0.5,1,

72.

1+1,0.5,0.5,1,

73.

1+1+1+1,

74.

0.5,0.5,0.5+0.25,0.25,0.5+0.25,0.25,0.5+0.25,0.25,

75.

0.5,1,0.5,1,1,

76.

0.5,0.5,0.5+0.25,0.25,0.5+0.25,0.25,0.5+0.25,0.25,

77.

0.5,1,0.5,1,1,

78.

1+1,0.5,0.5,1,

79.

1+1+1+1,

80.

0.5,1,0.5,1+1,

81.

0.5,1,0.5,1+1,

82.

1+1,0.5,0.5,1,

83.

1+1+1+1

84.};//這部分是整首曲子的接拍部分,也定義個序列duration,浮點(數(shù)組的個數(shù)和前面音符的個數(shù)是一樣的,一一對應(yīng)么)

85.intlength;//這里定義一個變量,后面用來表示共有多少個音符

86.inttonePin=5;//蜂鳴器的pin

87.

88.voidsetup()

89.{

90.

pinMode(tonePin,OUTPUT);//設(shè)置蜂鳴器的pin為輸出模式

91.

length=sizeof(tune)/sizeof(tune[0]);//這里用了一個sizeof函數(shù),可以查出tone序列里有多少個音符

92.}

93.

94.voidloop()

95.{

96.

for(intx=0;x<length;x++)//循環(huán)音符的次數(shù)

97.

{

98.

tone(tonePin,tune[x]);//此函數(shù)依次播放

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論