- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
振动声波持续的时间决定声音的音长
9-5 延伸應用與練習 接著制訂程式的歌譜表編碼格式,歌譜表陣列格式設計為{ 第1 個音的音高, 第1 個音的音長, 第2 個音的音高, 第2 個音的音長…, 第n 個音的音高, 第n 個音的音長, -1},若有n 個音,則會有2×n+1 筆資料,最後一筆的-1 是歌譜的結束代碼。 音長部分為了方便編碼,以1 拍為基本單位,可以使用小數點,因此若音長資料為0.25,代表的是0.25 拍(四分之一拍),若是三連音,則每個音為0.33 拍。 圖 9-10 為「新不了情」的一小段簡譜,此音樂一小節有4 拍,首先必須會算拍子,以「回憶過去」的四個音為例,其拍子依序為「1 拍、1.5 拍、0.5 拍、1 拍」,故此四個音的音長編碼應為「1、1.5、0.5、1」,實際編碼到歌譜陣列內容應為{5,1, 3+7,1.5, 6,0.5, 6,1},其中+7 代表升高一個八度音,故3+7 為高音的Mi。 9-5 延伸應用與練習 歌譜中「痛苦的」為3 連音占一拍,因此皆為1/3 拍,實際編碼到歌曲陣列內容應為{6,0.33, 7, 0.33, 1+7,0.33}。 歌譜中0 為休止符(蜂鳴器不發聲),故程式中需有休止符的處理。 以「回憶過去痛苦的相思忘不了為何你還來撥動我心跳。愛你怎麼能了,今夜的你應該明了」為例,編碼的結果如下,最後一筆資料 -1 為此首歌的結束代碼。song 陣列中的每一行代表一小節的歌譜,方便萬一唱錯音時,可與歌譜比對除錯。 9-5 延伸應用與練習 歌譜中「痛苦的」為3 連音占一拍,因此皆為1/3 拍,實際編碼到歌曲陣列內容應為{6,0.33, 7, 0.33, 1+7,0.33}。 歌譜中0 為休止符(蜂鳴器不發聲),故程式中需有休止符的處理。 以「回憶過去痛苦的相思忘不了為何你還來撥動我心跳。愛你怎麼能了,今夜的你應該明了」為例,編碼的結果如下,最後一筆資料 -1 為此首歌的結束代碼。song 陣列中的每一行代表一小節的歌譜,方便萬一唱錯音時,可與歌譜比對除錯。 9-5 延伸應用與練習 9-5 延伸應用與練習 9-5 延伸應用與練習 9-5 延伸應用與練習 9-5 延伸應用與練習 音樂盒程式中最精髓的部分是音高表pitch 的設定與歌譜表song 的編碼,完成後,只要在迴圈程式loop() 中使用index 指標,依序讀出音高值存入song_tone,讀出音長值並計算發音時間後存入SoungLeng 變數,然後進行二種音高值的條件判斷即可,分別是結束識別碼、休止符,其餘皆為正常要發音的音調。為了讓各音調間有些斷音,實際延遲的時間比發聲時間多了30%。 9-5 延伸應用與練習 一切準備就緒後,接著就可開始進行編譯程式,以及下載燒錄、測試的工作。燒錄完成後應可正常聽到「新不了情」這首歌的片段,若有不正確的音高或音長,可針對歌譜表song 部分進行修改。 9-5 延伸應用與練習 9-5.2 摩斯電碼 摩斯電碼(morse code)是一種時通時斷的數位訊號代碼,分為短音(滴)與長音(答)二種,透過不同的滴答滴答排列可用來表達不同的字母、數字或標點符號,在早期通訊及無線電界用的很多,此種滴答滴答聲音對喜愛看電影或電視劇的人來說應該不陌生。 請使用本章的蜂鳴器電路,完成一個可透過Serial Monitor 控制,發出指定摩斯電碼的控制,其特性要求如下: 摩斯電碼有短音(滴)與長音(答)兩種狀態,假設短音 的頻率為440Hz,音長為0.1 秒,而長音是三個短音的長度。 (2)同一個字元中,短音與長音的間隔為 1 個短音的長度,字 元與字元間的間隔為3 個短音的長度。 試完成在Serial Monitor 中傳送不同字元,蜂鳴器可對應發出如表 9?4 所示的信號。收到A ~ Z 以外的字元或未收到任何字元時,蜂鳴器不發聲。圖 9?11 為傳送一個字組ABC 的示意圖。 9-5 延伸應用與練習 試完成在Serial Monitor 中傳送不同字元,蜂鳴器可對應發出如表 9?4 所示的信號。收到A ~ Z 以外的字元或未收到任何字元時,蜂鳴器不發聲。圖 9?11 為傳送一個字組ABC 的示意圖。 9-5 延伸應用與練習 觀察表 9?4 的字元與摩斯電碼對照表可發現,每個字元的電碼長度不同,因此本小節的程式應用,主要在解決不同長度編碼、讀值,以及最後發聲的問題。 1. 編 碼 為了方便程式處理,首先宣告摩斯電碼的字元陣列,其中0 代表滴,1 代表答,故字元A 可宣告為01,字元B 可宣告為1000,以此類推。 由於A ~ Z 的字元陣列長度不一, 故需宣告一個字元指標陣列*morse,將這26 個字的字元陣列組合起來,讓程式可以很方便的指到01 的開頭,或是1000 的開頭,宣告的內容如下。(有關指標的基本指令說明參閱第3-
原创力文档


文档评论(0)