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

?

基于語(yǔ)音識(shí)別技術(shù)的鋼琴調(diào)音軟件精度研究

2020-09-17 13:40熊輝嚴(yán)國(guó)權(quán)陳瑜斌
科技智囊 2020年5期
關(guān)鍵詞:語(yǔ)音識(shí)別

熊輝 嚴(yán)國(guó)權(quán) 陳瑜斌

摘 ?要:鋼琴是一種傳統(tǒng)演奏樂(lè)器,距今已有幾百年的發(fā)展和使用歷史。我國(guó)自從改革開放以來(lái),越來(lái)越多的家庭購(gòu)買了鋼琴。但是鋼琴調(diào)音仍然處于人工調(diào)試階段,需要調(diào)音師的經(jīng)驗(yàn)和手藝來(lái)判斷鋼琴音色是否標(biāo)準(zhǔn),調(diào)音效果千差萬(wàn)別。隨著智能手機(jī)以及計(jì)算機(jī)技術(shù)發(fā)展,設(shè)計(jì)應(yīng)用軟件通過(guò)語(yǔ)音識(shí)別技術(shù)對(duì)琴鍵頻率進(jìn)行采集,采用傅里葉變換對(duì)接收到的音頻進(jìn)行分析,得到真實(shí)的音鍵頻率,可以彌補(bǔ)人為因素對(duì)樂(lè)音調(diào)試的誤差;將分析得到的琴鍵頻率與標(biāo)準(zhǔn)樂(lè)音庫(kù)進(jìn)行對(duì)比,將對(duì)比后的樂(lè)音信息通過(guò)可視化界面展示出來(lái),便于人們更加快速準(zhǔn)確地調(diào)音。

關(guān)鍵詞:Visual Studio;鋼琴調(diào)音;語(yǔ)音識(shí)別;傅里葉變換

中圖分類號(hào):TN912.3 ? ? 文獻(xiàn)標(biāo)識(shí)碼:A

Abstract:Piano is a traditional musical instrument,which has a history of development and use for hundreds of years. Since Chinese reform and opening up,more and more families have bought piano. However,the piano tuning is still in the stage of manual debugging,which requires the experience and skills of the tuner to judge whether the piano tone is standard,and the tuning effect is very different. With the development of smart phones and computer technology,the design application software collects the piano key frequency through speech recognition technology,analyzes the received music by using Fourier transform,and gets the sound key frequency approaching to the standard,which can completely make up for the error of human factors in music debugging;compares the piano key frequency obtained by analysis with the standard music library,and then compares it Through the visual interface,the music information is displayed,which is convenient for people to tune more quickly and accurately.

Key words:Visual Studio;Piano tuning;Speech Recognition;Fourier transform

一、項(xiàng)目背景

21世紀(jì),人們更加注重于對(duì)精神的追求,鋼琴的發(fā)展和普及恰好可以為現(xiàn)代人們帶來(lái)精神上的快樂(lè)和滿足[1]。鋼琴的音質(zhì)長(zhǎng)期受到各種外在環(huán)境因素的影響,使得鋼琴發(fā)音不準(zhǔn),嚴(yán)重干擾鋼琴演奏的穩(wěn)定性和演奏效果,因此必須在鋼琴使用前進(jìn)行準(zhǔn)確的調(diào)音。近些年由于演奏鋼琴人數(shù)的增加,傳統(tǒng)的鋼琴調(diào)音過(guò)于復(fù)雜化和機(jī)械化,現(xiàn)有的調(diào)音模式始終滿足不了大眾的調(diào)音需求[2]。因此,需要一款方便、快捷、準(zhǔn)確、實(shí)用的調(diào)音裝置或者軟件工具來(lái)幫助解決調(diào)音的音準(zhǔn)問(wèn)題。

設(shè)計(jì)一種鋼琴調(diào)音軟件,可以實(shí)現(xiàn)智能化精密測(cè)量,高效地協(xié)助調(diào)音師完成鋼琴調(diào)音工作,避免了人為調(diào)音的不足,滿足了實(shí)際工作的要求。調(diào)音軟件也適用于其他樂(lè)器的調(diào)音,使調(diào)音工作不再枯燥煩瑣。

二、技術(shù)方案

(一)音頻識(shí)別技術(shù)構(gòu)建模型

將模擬的音頻信號(hào)進(jìn)行采樣得到波形數(shù)據(jù)之后,要輸入到特征提取模塊,提取出合適的聲學(xué)特征參數(shù)供后續(xù)聲學(xué)模型訓(xùn)練使用。好的聲學(xué)特征應(yīng)當(dāng)考慮以下三個(gè)方面的因素:第一,應(yīng)當(dāng)具有比較優(yōu)秀的區(qū)分特性,以使聲學(xué)模型不同的建模單元可以方便準(zhǔn)確地建模;其次,特征提取也可以認(rèn)為是音頻信息的壓縮編碼過(guò)程,既需要將信道、環(huán)境噪音的因素消除,保留與內(nèi)容相關(guān)的信息,又需要在不損失過(guò)多有用信息的情況下使用盡量低的參數(shù)維度,便于高效準(zhǔn)確地進(jìn)行模型的訓(xùn)練;最后,需要考慮魯棒性,即對(duì)環(huán)境噪聲的抗干擾能力[3-4]。

如今主流語(yǔ)音識(shí)別系統(tǒng)都采用隱馬爾科夫模型(HMM)作為聲學(xué)模型,這是因?yàn)镠MM具有很多優(yōu)良特性。HMM的狀態(tài)跳轉(zhuǎn)模型很適合人類語(yǔ)音的短時(shí)平穩(wěn)特性,方便對(duì)不斷產(chǎn)生的觀測(cè)值(語(yǔ)音信號(hào))進(jìn)行統(tǒng)計(jì)建模;與HMM相伴生的動(dòng)態(tài)規(guī)劃算法可以有效地實(shí)現(xiàn)對(duì)可變長(zhǎng)度的時(shí)間序列進(jìn)行分段和分類的功能;HMM的應(yīng)用范圍廣泛,只要選擇不同的生成概率密度,離散分布或者連續(xù)分布,都可以使用HMM進(jìn)行建模。其原理框架如下圖1中所示。

鋼琴鍵頻率是指鋼琴上琴鍵所產(chǎn)生的聲音頻率,以赫茲(Hz)為單位?,F(xiàn)代的鋼琴上共有88至108鍵。88鍵鋼琴的第49鍵,即第5個(gè)A(亦稱A4)一般被用作調(diào)音標(biāo)準(zhǔn)。現(xiàn)行的標(biāo)準(zhǔn)是440Hz,亦稱A440。鋼琴的琴鍵號(hào)和頻率對(duì)應(yīng)關(guān)系如下表1。本項(xiàng)目對(duì)音頻信號(hào)建模,標(biāo)準(zhǔn)頻率模型即為該表。

(二) FFT(Fast Fourier Transform)算法原理

FFT是一種基于離散傅里葉變換(DFT)的高效傅里葉算法,被人們廣泛稱為快速傅里葉變換[5-6]。該方法主要基于Fourier的傅里葉函數(shù)變換,在時(shí)域上的任何傅里葉函數(shù)都必須是完全可以整數(shù)表示的,它可以構(gòu)成由一個(gè)正交余弦陣列函數(shù)所組合構(gòu)成的無(wú)窮數(shù)量級(jí)數(shù)。Fourier函數(shù)定義為:時(shí)域上的一個(gè)信號(hào)x(t)會(huì)對(duì)應(yīng)于頻域f上的另外一個(gè)信號(hào) X(f)。即X(f)=dt。

通過(guò)Fourier變換后,可以得出信號(hào)的離散頻譜,從而精確地求出信號(hào)的離散頻率。實(shí)際應(yīng)用時(shí),計(jì)算得到離散信號(hào)周期x(t)的離散采樣值,即x(nt),t代表離散采樣信號(hào)的周期。通過(guò)計(jì)算離散采樣的值x(nt),可以精確地計(jì)算出離散信號(hào)周期x(t)的離散頻譜。

麥克風(fēng)記錄聲音時(shí),只能獲取不同時(shí)刻的電壓變化值,這是多種聲音頻率的總和。利用傅里葉變換將多個(gè)不同頻率的音頻分別提取出來(lái),將語(yǔ)音信號(hào)轉(zhuǎn)化為電腦可識(shí)別的數(shù)字信號(hào),其中傅里葉變換還可將混合的復(fù)雜音波分別提取出單一的音頻信號(hào)。本項(xiàng)目通過(guò)快速傅里葉變換的算法獲取采樣音頻的能量值。

三、程序的實(shí)現(xiàn)

本項(xiàng)目運(yùn)行環(huán)境為微軟公司的Visual Studio 2017(VS),采用C語(yǔ)言和Windows編程來(lái)實(shí)現(xiàn)鋼琴調(diào)音的基本功能。首先建立一個(gè)控制臺(tái)項(xiàng)目文件,新建項(xiàng)目完成后,將后綴名稱.cpp改為.c。為了更加方便地調(diào)試程序,手動(dòng)添加一個(gè)FFT算法.c文件。完成總體框搭建以后,只需向項(xiàng)目文件中添加代碼即可,采用多文件聯(lián)合編程的思想,可以更加快速有效地實(shí)現(xiàn)程序的功能。

(一)整體思路

軟件的工作流程如下圖2所示。

頻率識(shí)別需要對(duì)外部聲音進(jìn)行采集,添加導(dǎo)入winmm.lib庫(kù),可以進(jìn)行Windows多媒體編程。因?yàn)檫€需調(diào)用接口函數(shù)和添加mmsystem.h頭文件來(lái)實(shí)現(xiàn)聲音的輸入輸出。mmsystem.h中包含了多媒體的大多數(shù)接口,可以簡(jiǎn)化程序。主程序包含了1個(gè)main函數(shù)和5個(gè)可調(diào)用函數(shù),將鋼琴音鍵和對(duì)應(yīng)頻率值設(shè)為全局變量,定義為結(jié)構(gòu)體數(shù)組。鋼琴各按鍵頻率,為測(cè)試方便,本項(xiàng)目定義了70個(gè)(可以在堆??臻g中開辟88個(gè)。)

struct MusicNote

{

char noteName[10];

double frequence;

}

note[VOLUMESIZE]={{“1”,27.5},{“2”, 29.1},{“3”, 30.8},{“4”, 32.7},{“5”, 34.6},{“6”, 36.7 7”, 38.8},{“8”, 41.2},{“9”, 43.6},{“10”,46.2},{“11”,48.9},{“12”, 51.9},{“13”, 55.0},{“14”, 58.2},{“15”, 61.7},{“16”, 65.4}, {“17”, 69.2}, {“18”, 73.4}, { “19”, 77.7}, {“20”, 82.4}, {“21”, 87.3},{“22”, 92.4}, {“23”, 97.9}, {“24”, 103.8},{“25”, 110.0},{“26”,116.5},{“27”,123.4},{“28”,130.8},{“29”,138.5},{“30”,146.8},{“31”,155.5},{“32”,164.8},{“33”,174.6},{“34”,184.9},{“35”,195.9},{“36”,207.6},{“37”,220.0},{“38”,233.0},{“39”,246.9},{“40”,261.6},{“41”,277.1},{“42”,293.6},{“43”,311.1},{“44”,329.6},{“45”, 349.2},{“46”, 369.9},{“47”, 391.9}, {“48”, 415.3}, {“49”, 440.0},{“50”,466.1},{“51”,493.8},{“52”,523.2},{“53”,554.3},{“54”,587.3},{“55”,622.2}, {“56”,659.2},{“57”,698.4},{“58”,739.9},{“59”,783.9},{“60”,830.6},{“61”,880.0},{“62”,932.3},{“63”,987.7},{“64”,1046.5},{“65”,1108.7},{“66”,1174.6},{“67”,1244.5},{“68”,1318.5},{“69”,1396.9}, {“70”, 1479.9}};

(二)設(shè)計(jì)過(guò)程

1.調(diào)用Record()函數(shù),實(shí)現(xiàn)PCM(脈沖編碼調(diào)制)聲音采集,將生成的錄音文件保存于D盤的根目錄下。保存的文件采用二進(jìn)制進(jìn)行存儲(chǔ),讀取函數(shù)時(shí)也要進(jìn)行相應(yīng)的二進(jìn)制讀取。定義音頻流格式的數(shù)據(jù)結(jié)構(gòu)WAVEFORMATEX waveform和輸入設(shè)備HWAVEIN hWaveIn,輸入設(shè)備的初始值為0。采集音頻時(shí),需要包含數(shù)據(jù)緩存結(jié)構(gòu)體LPWAVEHDR pWaveHdr以及采集時(shí)的數(shù)據(jù)緩存PBYTE pBuffer,數(shù)據(jù)緩存的類型為PBYTE,數(shù)據(jù)定義格式均為Windows核心編程內(nèi)容。

WAVEFORMATEX waveform; ? ? ? ?//采集音頻格式,結(jié)構(gòu)體

HWAVEIN hWaveIn = 0; ? ? ? ? ?//輸入設(shè)備

LPWAVEHDR pWaveHdr = NULL; ? ?//采集音頻時(shí),包含數(shù)據(jù)緩存結(jié)構(gòu)體

PBYTE pBuffer = NULL; ? ? ? ? ?//采集音頻時(shí)的數(shù)據(jù)緩存

MMRESULT error = 0; ? ? ? ? ? //枚舉型數(shù)據(jù)變量

double i = 4000000000; ? ? //循環(huán)變量,用于錄音需要的一段時(shí)間

FILE *fp = NULL;

得到能量的返回值:

*(data + i) = pr[i];

4.調(diào)用getFrequence()函數(shù),計(jì)算出音頻的頻率值。

設(shè)置能量的頻率、坐標(biāo)和能量最大值:

double locate = 0;

int i;

double frequence;

double max;

max = *data;

求出能量最大值對(duì)應(yīng)的橫坐標(biāo):

for (i = 0; i < (DATASIZE / 2); i++)

{if (*(data + i) > max)

{max = *(data + i);

locate = i;}}

計(jì)算出其頻率值:

frequence = locate * (8000.0 / DATASIZE);

5.調(diào)用showVolume()函數(shù)。根據(jù)頻率,在音高頻率對(duì)照表中,查看對(duì)應(yīng)的音符并顯示結(jié)果。

函數(shù)開始時(shí)打印出標(biāo)準(zhǔn)鋼琴70個(gè)鍵的參照表:

printf(“%s:%fHz\n”, note[i].noteName, note[i].frequence);

輸出當(dāng)前音鍵的頻率值:

printf(“當(dāng)前頻率值:%f\n”, fre);

輸入的音律太高或音律太低,提示出現(xiàn)錯(cuò)誤,并重新進(jìn)行下一輪的聲音讀取操作:

if (fre <= note[0].frequence)

{Low = note[0].frequence - fre;

printf(“音律太低,請(qǐng)重新錄入\n”);}

else if(fre >= note[69].frequence)

{Heigh = fre - note[69].frequence;

printf(“音律太高,請(qǐng)重新錄入\n”);}

如果頻率在相應(yīng)合理的范圍,顯示出對(duì)應(yīng)高出或低于標(biāo)準(zhǔn)頻率的頻率值,誤差在5Hz以內(nèi)時(shí),提示調(diào)音較為合理:

if (note[choose].frequence < fre)

{printf(“當(dāng)前頻率高于標(biāo)準(zhǔn)頻率,高了%fHz\n”, fre - note[choose].frequence);

while ( fre - note[choose].frequence

{printf(“誤差在0至5Hz之間,調(diào)音基本完成\n”);

break;}}

else

{printf(“當(dāng)前頻率低于標(biāo)準(zhǔn)頻率,低了%fHz\n”, note[choose].frequence - fre);

while(note[choose].frequence-fre < Wucha)

{printf(“誤差在0至5Hz之間,調(diào)音基本完成\n”);

break;}}

(三)測(cè)試案例

1.當(dāng)在一個(gè)相對(duì)安靜的環(huán)境下時(shí),接收到的聲音頻率為0,低于鋼琴所發(fā)出的最低頻率,則會(huì)出現(xiàn)相應(yīng)提示如下,測(cè)試結(jié)果達(dá)到預(yù)期目標(biāo)。

2.當(dāng)在一個(gè)相對(duì)頻率較高的環(huán)境下時(shí),接收到的頻率遠(yuǎn)高于對(duì)照表中的數(shù)據(jù),則會(huì)出現(xiàn)相應(yīng)提示如下,測(cè)試結(jié)果達(dá)到預(yù)期目標(biāo)。

3.測(cè)試任意鋼琴的頻率按鍵。

(1)選擇52號(hào)琴鍵為低音鍵(一組7個(gè)音鍵中Do鍵),對(duì)應(yīng)的標(biāo)準(zhǔn)頻率為523.2Hz,測(cè)試結(jié)果如下:

與標(biāo)準(zhǔn)頻率相差僅為0.23Hz,達(dá)到了預(yù)期調(diào)音目標(biāo)。

(2)選擇63號(hào)高音鍵Xi,對(duì)應(yīng)標(biāo)準(zhǔn)頻率為987.7Hz,測(cè)試結(jié)果如下:

與標(biāo)準(zhǔn)頻率僅相差0.58Hz,達(dá)到了預(yù)期效果。

(四)誤差分析

選取部分鋼琴琴鍵,測(cè)出調(diào)音后的頻率,與標(biāo)準(zhǔn)音頻值做比對(duì),檢驗(yàn)軟件準(zhǔn)確度。測(cè)量結(jié)果如表2所示。52、54、56、57、59、61、63鍵號(hào)分別對(duì)應(yīng)鋼琴鍵號(hào)中的C5、D5、E5、F5、G5、A5、B5。

從表2數(shù)據(jù)可以看出,測(cè)得誤差與標(biāo)準(zhǔn)值基本控制在1Hz左右,誤差百分比在0%~0.5%之間,測(cè)量精度相對(duì)較高,完全可以擔(dān)任調(diào)音工作。

調(diào)音中的誤差主要來(lái)源于以下幾個(gè)方面:

1.系統(tǒng)聲卡將聲音文件轉(zhuǎn)化為二進(jìn)制文件進(jìn)行保存時(shí),聲音信號(hào)轉(zhuǎn)化為數(shù)字信號(hào),會(huì)出現(xiàn)失真和數(shù)據(jù)丟失的情況;將二進(jìn)制文件轉(zhuǎn)化為音頻文件時(shí)又會(huì)出現(xiàn)音質(zhì)損失。

2.不存在絕對(duì)安靜的環(huán)境,環(huán)境因素會(huì)對(duì)頻率檢測(cè)出現(xiàn)影響,有一些雜音會(huì)通過(guò)麥克風(fēng)進(jìn)入聲卡,導(dǎo)致有時(shí)測(cè)量相對(duì)誤差較大。

四、總結(jié)

本項(xiàng)目通過(guò)Visual Studio平臺(tái)進(jìn)行了整體項(xiàng)目搭建,對(duì)每一個(gè)重要功能函數(shù)進(jìn)行了詳細(xì)分析和開發(fā)應(yīng)用,根據(jù)程序測(cè)試案例進(jìn)行分析數(shù)據(jù),最后對(duì)比分析出結(jié)果。通過(guò)快速離散傅里葉變換計(jì)算得出的頻率值與鋼琴調(diào)音時(shí)彈奏出的頻率值基本吻合,該軟件可以初步滿足對(duì)鋼琴調(diào)音的需求。

參考文獻(xiàn):

[1]林琳娜.淺談鋼琴中的“律”及“調(diào)試”[J].科技信息,2011(20):259.

[2]崔笑.鋼琴調(diào)音儀的研究及實(shí)現(xiàn)[D].成都:電子科技大學(xué),2014.

[3]柯鑫.基于Web客戶端和語(yǔ)音識(shí)別的智能家居交互系統(tǒng)設(shè)計(jì)[D].武漢:華中科技大學(xué),2019.

[4]林圣曄.語(yǔ)音識(shí)別技術(shù)[J].數(shù)碼設(shè)計(jì)(下),2019(04):182-183.

[5]徐健,李曉慧.一種基于FFT的高分辨率音頻頻率測(cè)量方法[J].電子質(zhì)量,2020(02):11-14.

[6]張嘉.基于ARM的鋼琴調(diào)校裝置的研發(fā)[D].哈爾濱:哈爾濱理工大學(xué),2013.

猜你喜歡
語(yǔ)音識(shí)別
通話中的語(yǔ)音識(shí)別技術(shù)
面向移動(dòng)終端的語(yǔ)音簽到系統(tǒng)
農(nóng)業(yè)物聯(lián)網(wǎng)平臺(tái)手機(jī)秘書功能分析與實(shí)現(xiàn)
基于Android手機(jī)語(yǔ)音和Arduino控制板的機(jī)器人控制系統(tǒng)