国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種基于Arduino平臺(tái)的數(shù)字音符實(shí)時(shí)顯示設(shè)計(jì)分析

2018-11-22 00:46呂博
微型電腦應(yīng)用 2018年11期
關(guān)鍵詞:樂(lè)音開(kāi)發(fā)板基波

呂博

(寶雞文理學(xué)院 音樂(lè)學(xué)院,寶雞 721013)

0 引言

隨著現(xiàn)代科技的進(jìn)步,人們的學(xué)習(xí)和工作變得更加智能化,現(xiàn)代信息技術(shù)逐漸代替了人們基本的人工勞動(dòng),很多行業(yè)也開(kāi)始借助計(jì)算機(jī)來(lái)進(jìn)行工作[1]。本文分析的數(shù)字音符主要是利用單片機(jī)技術(shù),讓高低音調(diào)音頻可以在顯示屏上以音樂(lè)簡(jiǎn)譜的方式展示出來(lái),這樣可以更好人工代替“翻譯”,從而幫助音樂(lè)愛(ài)好者學(xué)習(xí),有助于地方音樂(lè)的數(shù)字化記錄。本文將用到具有Arduino的設(shè)備作為開(kāi)發(fā)板,以及LCD顯示器、音頻傳感器等[2-3]。Arduino就像C語(yǔ)言、java所處的Processing/Wiring開(kāi)發(fā)環(huán)境。

1 數(shù)字音符實(shí)現(xiàn)的原理

Arduino是建立在Simple I/O平臺(tái)上開(kāi)放原始代碼,它的功能比較豐富,使用比較方面,價(jià)格低廉,所以在電子系統(tǒng)、互動(dòng)功能開(kāi)發(fā)方面使用比較廣泛。該開(kāi)發(fā)并平臺(tái)是以ArduinoUNO為控制核心平臺(tái),它具有以數(shù)組形式的節(jié)拍數(shù)據(jù)、樂(lè)曲音高等數(shù)據(jù),可以與外圍設(shè)備接口連接實(shí)現(xiàn)通信,從而實(shí)現(xiàn)音樂(lè)播放[4-5]。音符簡(jiǎn)譜顯示包括字母簡(jiǎn)譜、數(shù)字簡(jiǎn)譜兩種,而本文主要分析的是數(shù)字簡(jiǎn)譜,每種頻率都有自己對(duì)應(yīng)音符。

在聲學(xué)中,“樂(lè)音”是指發(fā)音物體表現(xiàn)有規(guī)律的震動(dòng)產(chǎn)生的固定音頻,如小提琴、鋼琴、西府曲子伴奏樂(lè)器二胡、三弦等樂(lè)器發(fā)出的樂(lè)音。從聲學(xué)原理中分析樂(lè)音的主要特征包括:音色、響度、音調(diào),而音調(diào)是不同的樂(lè)音基波頻率決定,通常使用音符進(jìn)行表示,比如:494 Hz這個(gè)基波頻率就自己對(duì)應(yīng)的音符[6-7]。利用快速傅里葉對(duì)任意一個(gè)樂(lè)音信號(hào)進(jìn)行變換,可以得到每個(gè)頻率變換后基波頻率對(duì)應(yīng)的幅值大小。通過(guò)該功能可以先提取基波頻率在完成之后的系列換算,從而實(shí)現(xiàn)音符的轉(zhuǎn)變并顯示。數(shù)字音符硬件實(shí)時(shí)顯示連接圖,如圖1所示。

2 Arduino平臺(tái)數(shù)字音符顯示設(shè)計(jì)實(shí)現(xiàn)

2.1 信號(hào)的輸入和采集

本文主要利用奈奎斯特采樣定理進(jìn)行信號(hào)的采集和輸入,該定理就是如果在有限的頻帶寬度下,從抽樣信號(hào)中完全恢復(fù)原來(lái)的信號(hào),這時(shí)的抽樣頻率需要大于2倍最高信號(hào)頻率。也就說(shuō)在采集信號(hào)的時(shí)候需要選擇大于最高頻率的2倍頻率,這樣才不會(huì)出現(xiàn)信號(hào)重疊情況。本次研究主要以2 000 Hz以下的中低音頻信號(hào)進(jìn)行分析,其中采樣的頻率是5 120 Hz(每個(gè)195 μs進(jìn)行一次采樣)[8-9]。這里使用音頻傳感器將檢測(cè)的聲音變成輸入的音頻信號(hào)到Arduino接口ADC(A0)處,在將每個(gè)250 ms采集一次信息輸入系統(tǒng)中,每次采樣的點(diǎn)數(shù)是256點(diǎn),這里使用fs、f0、n作為采樣的頻率、頻率分辨率、采樣點(diǎn)數(shù)等,而f0=fs/n,之后將音頻信號(hào)256點(diǎn)進(jìn)行FFT轉(zhuǎn)變,得到頻率分辨率是20 Hz。

圖1 硬件實(shí)時(shí)連接的數(shù)字音符示意圖

2.2 提取基波頻率

FFT提取基波頻率時(shí),需要CIA楊頻率大于基波頻率,這樣才能保證基波頻率采集的完整性。將采取數(shù)據(jù)進(jìn)行FFT轉(zhuǎn)變之后,確定轉(zhuǎn)變之后的幅值最大點(diǎn)以及其對(duì)應(yīng)的序號(hào),給其賦值num變量,之后在將num變量與頻率分辨率20 Hz相乘,即可得到基波頻率,這里使用的公式是fn=num×f0,其中f0=20 Hz,fn是基波頻率)。

2.3 數(shù)字音符的顯示

本次研究主要顯示十六分音符、四分音符、八分音符等。這里假設(shè)十六分音符有250 ms的時(shí)長(zhǎng),而四份音符時(shí)長(zhǎng)是1 s,八分音符的是500 ms,之后分析每個(gè)音符之間存在的時(shí)值關(guān)系。

在實(shí)際中獲得樂(lè)器聲音頻率無(wú)法得到準(zhǔn)確的理論值,需要對(duì)這些頻率規(guī)定一定的區(qū)間范圍。本次研究是選擇相鄰音符之間的平均值作為分界,比如:3、4、5音符對(duì)應(yīng)的音符頻率是658 Hz、697 Hz、783 Hz等,根據(jù)上述分析本次研究使用的頻率分辨率是20 Hz,所以這里選擇的頻率是680~740 Hz(&num≤37,num≥34),而選擇的音符可以用“4”表示。為了方便編程,這里使用數(shù)字1~7、11~17、111~117來(lái)表示音符“1”~“7”、“1”~“7”、“1”~“7”,這里使用數(shù)字“8”表示休止符“0”。

根據(jù)預(yù)先規(guī)定好的音符范圍提取基波頻率,將這些轉(zhuǎn)換成對(duì)應(yīng)的數(shù)字,之后根據(jù)每16個(gè)數(shù)字構(gòu)成一組數(shù)據(jù),根據(jù)先后順序添加一個(gè)整形數(shù)組大小是16的m[]。之后將m[]中元素相同或是相鄰的參數(shù)進(jìn)行合并,將合并得到的元素與10相乘,在進(jìn)行以此循環(huán)合并。在合并后這些元素還是不能整除10,就需要在顯示音符后面增加一個(gè)“=”;如果能被10整除但是不能被100整除,需要在音符下面添加一個(gè)“-”。在計(jì)算下一組數(shù)據(jù)時(shí),需要清空m[]數(shù)據(jù),在重新建立下一組數(shù)據(jù)。因?yàn)樘崛∶總€(gè)基波頻率是時(shí)間是相隔0.25 s,提取每組數(shù)據(jù),以及LCD上的音符顯示時(shí)間都是4 s(16×0.25 s)。

2.5 主要程序編輯

關(guān)于音符實(shí)時(shí)顯示程序的編輯如下:

For(int i=0;i<512;i+=2){//輸入256個(gè)點(diǎn)

delayMicroseconds(195);//每個(gè)195 μs進(jìn)行時(shí)間采樣

Wile(!(ADCSRA & 0×10));//進(jìn)行數(shù)據(jù)采樣

ADCSRA=0xf5;

Byte m=ADCL;

byte j=ADCH;

int k=(j<<8)|m;

k-=0×0200;

K<<=6;

FFT_input[i]=k;//轉(zhuǎn)變成了整型數(shù)據(jù)16位的

FFT_input[i]=k;//把收集到的數(shù)據(jù)輸入數(shù)組實(shí)部中

FFT_input[i+1]=0;//將虛部數(shù)據(jù)清空

}

FFT_window();FFT_reoder(); //對(duì)FFT_input[]中的數(shù)據(jù)進(jìn)行調(diào)整方便采取FFT轉(zhuǎn)變

FFT_run(); //將該部分的數(shù)據(jù)進(jìn)行FFT轉(zhuǎn)變

FFT_mag_lin(); //將轉(zhuǎn)變FFT后的每個(gè)頻率幅值按照順序保存在該部分中

for(byte i=3,max=0,num=3;i<128;i++){

/*為了減少直流信號(hào)的影響,將最大值點(diǎn)的頻率序號(hào)提取出來(lái),i是從3開(kāi)始不是由0開(kāi)始/

if(FFT_mag_lin_out[i]>max)max=FFT_mag_lin_out[i],num=i;

If(i==127){ //把num變成自己對(duì)應(yīng)的頻率數(shù)字

If(2

else if(2

//其他部分相似的程度結(jié)構(gòu)在這里不予多說(shuō)

……

else if(num>94){m[1]=117;1=1+1;}

}

for( byte i=0;i<16;i++){

//將兩個(gè)相同或是相鄰的元素合并,在之后與10相乘

for(byte i=0;i<16;i++){

if(m[i]==m[i+2] & m[i+1]==0){m[i]=0;m[i+1]=10*m[i+2];

}

for(byte i=0;i<16;i++){

if(m[i]==m[i+1]){m[i]=0;m[i+1]=10*m[i+1];

}})}}

3 Arduino平臺(tái)數(shù)字音符顯示效果

之后將這些代碼編入Arduino IDE計(jì)算機(jī)程序中,與USB接口進(jìn)行連接,將Arduino開(kāi)發(fā)板連接到計(jì)算機(jī)上。編譯完這些程序之后,將其下載到開(kāi)發(fā)板上,之后將信號(hào)發(fā)生器形成的單一正弦頻率信號(hào)寫(xiě)入到Arduino開(kāi)發(fā)板上,這時(shí)LCD屏幕會(huì)根據(jù)接受到的信號(hào)顯示相應(yīng)的音符。這里將箏弦單一頻率信號(hào)進(jìn)行轉(zhuǎn)變,可以使音頻傳感器可以輸入的信號(hào),因?yàn)闀?huì)受到噪聲等因素的影響,還有Arduino自身運(yùn)行的速度限制,而LCD屏幕顯示的音符和實(shí)際音符是存在誤差的,誤差程度和出現(xiàn)位置沒(méi)有確定性。其事物測(cè)試連接,如圖2所示。

圖2 數(shù)字音符實(shí)物實(shí)時(shí)顯示圖

這里長(zhǎng)按“2”、“4”、“2”、“4”等音符相對(duì)應(yīng)的電子琴按鍵,進(jìn)行相應(yīng)的測(cè)試,得到的結(jié)果5安全與要求符合,如圖3、圖4所示。

4 總結(jié)

根據(jù)上述分析,本次研究在國(guó)內(nèi)關(guān)于音符的實(shí)時(shí)顯示也得到的突破了,目前關(guān)于該內(nèi)容的研究還是比較少,而市場(chǎng)上關(guān)于這種產(chǎn)品的銷(xiāo)售還是比較少。在后期的設(shè)計(jì)中可以選擇更好的語(yǔ)音處理設(shè)備,將Arduino 開(kāi)發(fā)板換成DSP開(kāi)發(fā)平臺(tái),并對(duì)程序算法進(jìn)行相應(yīng)的完善,實(shí)現(xiàn)在屏幕上可以有重音記號(hào)、連音線(xiàn)等功能,同時(shí)可以是這樣的產(chǎn)品大量生產(chǎn),向音樂(lè)結(jié)推廣,給音樂(lè)愛(ài)好者提供更好的設(shè)備。

猜你喜歡
樂(lè)音開(kāi)發(fā)板基波
基于SWT的電力系統(tǒng)基波檢測(cè)
如何區(qū)分樂(lè)音和噪聲
基于STM32H7的FDCAN通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)?
作文成功之路·作文交響樂(lè)——學(xué)生展現(xiàn)心靈樂(lè)音的舞臺(tái)
淺析單片機(jī)開(kāi)發(fā)板的設(shè)計(jì)與制作
用心聆聽(tīng)學(xué)會(huì)區(qū)分
最近電平逼近調(diào)制的基波諧波特性解析計(jì)算
ARM宣布mbed Enabled Freescale FRDM—K64F開(kāi)發(fā)板通過(guò)微軟認(rèn)證
基于小波包變換的樂(lè)音時(shí)—頻綜合分析程序的開(kāi)發(fā)
基于p-q變換的改進(jìn)ip-iq基波正序有功和無(wú)功電流檢測(cè)算法
涿鹿县| 贵德县| 漯河市| 喜德县| 紫阳县| 怀化市| 临汾市| 梅州市| 赤城县| 驻马店市| 武强县| 苍溪县| 辽宁省| 公安县| 安西县| 孙吴县| 东阿县| 岑溪市| 潢川县| 吉隆县| 泸水县| 芒康县| 射洪县| 禹城市| 三门县| 克拉玛依市| 双辽市| 高清| 同仁县| 扶绥县| 洪洞县| 长垣县| 甘肃省| 宿松县| 德令哈市| 同心县| 土默特左旗| 东安县| 舞阳县| 隆安县| 汉中市|