蜂鸣器制作“ 孤勇者 ”音乐
生活随笔
收集整理的這篇文章主要介紹了
蜂鸣器制作“ 孤勇者 ”音乐
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 一、蜂鳴器
- 1. 簡介
- 2. 無源蜂鳴器工作原理
- 3. 仿真電路
- 二、孤勇者樂譜
- 三、程序設計
- 總結
前言
本節為利用蜂鳴器通過調制不同音頻,制作出“孤勇者”音樂。
一、蜂鳴器
1. 簡介
蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,廣泛應用于計算機、打印機、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器等電子產品中作發聲器件。蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。
下圖是蜂鳴器的電路圖(蜂鳴器也是有正負極之分的)
蜂鳴器按驅動方式可分為有源蜂鳴器(內含驅動線路)和無源蜂鳴器(外部驅動)。這里的“源”指的是激勵源。
無源蜂鳴器內部沒有激勵源,只有給它一定頻率的方波信號,才能讓蜂鳴器的振動裝置起振,從而實現發聲,同時,輸入的方波頻率不同,發出的聲音也不同(所以無源蜂鳴器可以模擬曲調實現音樂效果)。
有源蜂鳴器則不需要外部的激勵源,只需要接入直流電源,即可自動發出聲音(聲音頻率相對固定)。
2. 無源蜂鳴器工作原理
無源蜂鳴器需要1.5~2.5kHz(與蜂鳴器種類有關)的音頻信號,這個音頻信號即一個高低變化頻率為1.5-2.5kHz的方波。實際上頻率小于1.5kHz也是有聲音的,只是不那么準了,可能是嘟嘟聲。
3. 仿真電路
二、孤勇者樂譜
三、程序設計
#include <REG52.H> #include <INTRINS.H> sbit speaker=P2^5; unsigned char timer0h,timer0l,time=1; // 孤勇者,3分30秒,原唱4分16秒 code unsigned char gyz[]={ 122,27,121,26,122,27,121,26,122,27,121,26,120, // 音高(低音0,中音1,高音2),音長(節拍),音調(do,le,mi,fa,so,la,si) 143,140,110,111,112,111,143,130,111,112,111,112,113,36,111,36,111,36,111,122,121,47,140, //都,是勇敢的,你額頭的傷口你的不同你犯的錯 143,140,111,112,111,143,140,111,112,111,112,113,36,111,36,111,36,111,123,122,47,140, //都,不必隱藏,你破舊的玩偶你的面具你的自我 16,111,136,116,116,115,126,116,115,116,115,116,115,143,140,16,111,136,116,116,115,116,115,137,117,117,116,127,126,143, //他們說要帶著光馴服每一頭怪獸,他們說要縫好你的傷沒有人愛小丑 120,113,115,113,132,113,132,113,132,113,115,113,115,113,132,113,132,113,142,120,111,112,123,26,121,123,132,113,112,121,46,140, //為何孤獨不可光榮,人只有不完美值得歌頌,誰說污泥滿身的不算英雄 116,117,211,212,117,211,221,211,117,211,212,117,211,221,211,212,213,212,213,212,223,213,212,223,225,223, //愛你孤身走暗巷,愛你不跪的模樣,愛你對峙過絕望,不肯哭一場, 116,117,211,212,117,211,221,211,117,211,212,117,211,221,211,212,213,212,213,212,223,213,212,223,225,223,225, //愛你破爛的衣裳卻敢堵命運的槍,愛你和我那么像缺口都一樣 233,215,233,215,213,215,216,213,225,225,233,215,233,215, //去嗎,配嗎,這襤褸的披風,戰嗎,戰啊, 213,215,216,213,225,215,215,213,222,222,211,223,232,222,221,146,140,215,215,213,222,222,211,233,222,222,221,146,140,140, //以最卑微的夢,致那黑夜中的嗚咽與怒吼(hou),誰說站在光里的才算英雄 116,115,136,115,116,115,116,115,126,116,115,116,115,116,115,143,140,116,115,136,115,116,115,116,115,137,117,117,116,117,116,143,140, //他們說要戒了你的狂就像擦掉了污垢(gou),他們說要拾臺階而上而代價是低頭 113,115,113,132,113,132,113,132,113,115,113,115,113,132,113,132,113,142,120,111,112,123,126,221,223,232,213,212,231,166,120, //那就讓我不可乘風,你一樣驕傲著那種孤勇,誰說對弈平凡的不算英雄116,117,211,212,117,211,221,211,117,211,212,117,211,221,211,212,213,212,213,212,223,213,212,223,225,223, //愛你孤身走暗巷,愛你不跪的模樣,愛你對峙過絕望,不肯哭一場, 116,117,211,212,117,211,221,211,117,211,212,117,211,221,211,212,213,212,213,212,223,213,212,223,225,223,225, //愛你破爛的衣裳卻敢堵命運的槍,愛你和我那么像缺口都一樣 233,215,233,215,213,215,216,213,225,225,233,215,233,215, //去嗎,配嗎,這襤褸的披風,戰嗎,戰啊, 213,215,216,213,225,215,215,213,222,222,211,223,232,222,221,146,140,215,215,213,222,222,211,233,222,222,221,146,140,140, //以最卑微的夢,致那黑夜中的嗚咽與怒吼(hou),誰說站在光里的才算英雄26,121,123,147,127,117,127,186,120,26,121,123,147,127,117,127,186,120, //你的斑駁與眾不同,你的沉默震耳欲聾116,117,211,212,117,211,221,211,117,211,212,117,211,221,211,212,213,212,213,212,223,213,212,223,225,223, //愛你孤身走暗巷,愛你不跪的模樣,愛你對峙過絕望,不肯哭一場, 116,117,211,212,117,211,221,211,117,211,212,117,211,221,211,212,213,212,213,212,223,213,212,223,225,223,225, //愛你來自于蠻荒,一生不借誰的光,你將造你的城邦,在廢墟之上 233,215,233,215,213,215,216,213,225,225,233,215,233,215, //去嗎,去啊,以最卑微的夢,戰嗎,戰啊, 213,215,216,213,225,215,215,213,222,222,211,223,232,222,221,146,140,215,215,213,222,222,211,233,222,222,221,146,140,140, //以最孤高的夢,致那黑夜中的嗚咽與怒吼(hou),誰說站在光里的才算英雄 0 };// 定時時間越短,那么聲音頻率越高, code unsigned char FREQH[]={ 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC, 0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF, } ; code unsigned char FREQL[]={ 0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6, 0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B, 0x8F,0xEE,0x44,0x6B,0xB4,0xF4,0x2D, 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16, };//做成對應的頻率表,其實前幾個很少遇得到,那么這里再縮減的話, //就除以10,就可以用char類型而不用int類型了,后邊計算計時時間的時候再乘10補回 unsigned int code FreTab[28] = { 3517,3134,2792,2633,2351,2094,1865, 1758,1566,1395,1319,1175,1046,932 , 880 ,785 ,699 ,660 ,587 ,523 ,466 , 440 ,392 ,349 ,329 ,293 ,261 ,233 , };void t0int() interrupt 1 {speaker=!speaker;TH0=timer0h;TL0=timer0l; }// 節奏的快慢,這里是半個節拍的時間 void delay(unsigned char t) {unsigned long t2;for(;t>0;t--){for(t2=0;t2<5000;t2++){;}}TR0=0;// 停止發音 如果屏蔽掉,會出現連音的不正常現象 } /**/ void song() {unsigned char k=0;unsigned long i=0; // 由于歌詞長度問題,需要設置大一點的范圍,否則還沒唱完一遍又重新開始了// 這里這樣做就只唱一遍,尋到最后的0值時就停止了while(time) {if(gyz[i]%10==0) // 音調為0值時停頓處理{TR0=0; // 停止發音}else{k=gyz[i]%10+7*(gyz[i]/100+1)-1;timer0h=FREQH[k]; // 這里將K值改成定值,發現實際上并不是按照do,le,mi,fa,so,la,si這樣發音timer0l=FREQL[k];//如果用頻率表輸出的話,就屏蔽上兩句,開啟下兩句//timer0h=(65535-FreTab[k])/256;//timer0l=(65535-FreTab[k])%256;TR0=1; // 啟動T0輸出方波去發音}time=gyz[i]/10%10;i=i+1;delay(time);} } void main(void) {TMOD=1; // 設置定時器0為16位計數模式 EA=1;ET0=1; // 開定時器0中斷while(1){song();} }總結
若想制作自己心儀的音樂,可根據對應的音頻在此程序上進行修改即可。
總結
以上是生活随笔為你收集整理的蜂鸣器制作“ 孤勇者 ”音乐的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言 第六章 指针 重点 典型题
- 下一篇: MapBoxSDK导入高版本unity2