基于matlab的數(shù)字音效處理器_第1頁
基于matlab的數(shù)字音效處理器_第2頁
基于matlab的數(shù)字音效處理器_第3頁
基于matlab的數(shù)字音效處理器_第4頁
基于matlab的數(shù)字音效處理器_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 數(shù)字信號處理課程項目 終期報告題 目: 數(shù)字音效處理器 組 號: 78 組 長: 成 員: 成 員: 成 員: 成 員: 聯(lián)系方式: 二零一三年十月十六日目 錄第一章 緒 論 11.1 項目背景及研究意義 11.2 數(shù)字信號處理概述1第二章 總體方案設(shè)計 32.1 項目需求分析 32.2 開發(fā)平臺及工具選擇32.3 項目功能設(shè)計3第三章 人機交互界面設(shè)計 4第四章 數(shù)字語音信號簡單處理效果設(shè)計 54.1 低音增強 54.2 回聲特效 64.3 添加背景音樂 84.4 回旋效果 94.5 快/慢放特效 11第五章 自適應(yīng)語音分割、倒序 135.1 目標(biāo)實現(xiàn) 135.2 原理簡述 135.3 實

2、現(xiàn)步驟 135.4 應(yīng)用實踐165.5 核心代碼分析 165.5 算法優(yōu)化(快速自適應(yīng)倒序) 18第六章 項目實施過程 19第七章 總結(jié)與展望 207.1 項目總結(jié) 207.2 項目展望 20附錄 21參考文獻 37第1章 緒論1.1 項目背景及研究意義 隨著科技的發(fā)展,數(shù)字信號處理器DSP(Digital Signal Processor)被廣泛的應(yīng)用在各種電子產(chǎn)品中,從便攜的個人數(shù)字助手PDA(Personal Digital Assistant)到家庭影院,電子產(chǎn)品對人們的生活產(chǎn)生著巨大的影響。人們不僅對圖像的質(zhì)量有很高的要求,近年來對聲音質(zhì)量的需求也與日俱增。這種需求已經(jīng)不單局限在聆聽

3、,而上升為一種聽覺享受。在實際生活中,除了符合建筑聲學(xué)標(biāo)準(zhǔn)的錄音室、音樂廳等外,一般的室內(nèi)都很難達到比較完美的音質(zhì)及效果,通常需要使用音效處理器來進行處理、美化,這使得音效器的發(fā)展,得到了更為廣泛的關(guān)注。1.2 項目背景及研究意義數(shù)字信號處理(DigitalSignalProcessing,DSP)是利用專門或通用的數(shù)字信號芯片,以數(shù)字計算的方法對信號進行處理,具有處理速度快、靈活、精確、抗干擾能力強、體積小等優(yōu)點。DSP有硬件、算法和理論等三個基礎(chǔ)支撐著它的發(fā)展和應(yīng)用。硬件是指用VLSI(超大規(guī)模集成電路)實現(xiàn)的通用和專用芯片,目前許多芯片的運算速度已超過每秒幾千萬次,最高達到每秒16億次,

4、價格也大幅度降低。在通信、電視、雷達和各種消費電子產(chǎn)品方面應(yīng)用的軟件和算法非常豐富,例如,信源編碼(壓縮)和解碼、信道編碼和解碼,信號的調(diào)制與解調(diào)、噪聲對消、信號加密與解密,電機的自動控制和各類信號的分析等。知成體系的理論包括離散線性系統(tǒng)理論、離散和快速變換理論、數(shù)字濾波理論、信號檢測理論、量化效應(yīng)和誤差理論、非線性譜估計理論以及小波變換理論等。數(shù)字信號處理的應(yīng)用領(lǐng)域十分廣泛。就所獲取信號的來源而言,有通信信號的處理,雷達信號的處理,遙感信號的處理,控制信號的處理,生物醫(yī)學(xué)信號的處理,地球物理信號的處理,振動信號的處理等。若以所處理信號的特點來講,又可分為語音信號處理,圖像信號處理,一維信號處

5、理和多維信號處理等。無論哪方面的應(yīng)用,首先須經(jīng)過信息的獲取或數(shù)據(jù)的采集過程得到所需的原始信號,如果原始信號是連續(xù)信號,還須經(jīng)過抽樣過程使之成為離散信號,再經(jīng)過模數(shù)轉(zhuǎn)換得到能為數(shù)字計算機或處理器所接受的二進制數(shù)字信號。如果所收集到的數(shù)據(jù)已是離散數(shù)據(jù),則只須經(jīng)過模數(shù)轉(zhuǎn)換即可得到二進制數(shù)碼。數(shù)字信號處理器的功能是將從原始信號抽樣轉(zhuǎn)換得來的數(shù)字信號按照一定的要求,例如濾波的要求,加以適當(dāng)?shù)奶幚?,即得到所需的?shù)字輸出信號。經(jīng)過數(shù)模轉(zhuǎn)換先將數(shù)字輸出信號轉(zhuǎn)換為離散信號,再經(jīng)過保持電路將離散信號連接起來成為模擬輸出信號,這樣的處理系統(tǒng)適用于各種數(shù)字信號處理的應(yīng)用,只不過專用處理器或所用軟件有所不同而已。語音信

6、號處理是信號處理中的重要分支之一。它包括的主要方面有:語音的識別,語言的理解,語音的合成,語音的增強,語音的數(shù)據(jù)壓縮等。各種應(yīng)用均有其特殊問題。語音識別是將待識別的語音信號的特征參數(shù)即時地提取出來,與已知的語音樣本進行匹配,從而判定出待識別語音信號的音素屬性。關(guān)于語音識別方法,有統(tǒng)計模式語音識別,結(jié)構(gòu)和語句模式語音識別,利用這些方法可以得到共振峰頻率、音調(diào)、嗓音、噪聲等重要參數(shù),語音理解是人和計算機用自然語言對話的理論和技術(shù)基礎(chǔ)。語音合成的主要目的是使計算機能夠講話。為此,首先需要研究清楚在發(fā)音時語音特征參數(shù)隨時間的變化規(guī)律,然后利用適當(dāng)?shù)姆椒M發(fā)音的過程,合成為語言。其他有關(guān)語言處理問題也

7、各有其特點。語音信號處理是發(fā)展智能計算機和智能機器人的基礎(chǔ),是制造聲碼器的依據(jù)。語音信號處理是迅速發(fā)展中的一項信號處理技術(shù)。第2章 總體方案設(shè)計2.1 項目需求分析該項目題目是數(shù)字音效處理器。要實現(xiàn)音效處理,大致可以分成三部分,即語音采集、語音處理、語音輸出。首先要有待處理的語音信號。這個語音信號我們可以現(xiàn)場錄制,也可以打開已經(jīng)錄制好語音文件;然后是語音處理,這部分由matlab程序?qū)崿F(xiàn);最后是語音輸出,由計算機輸出。2.2 開發(fā)平臺Matlab 20082.3 項目功能設(shè)計第3章 人機交互界面設(shè)計如上圖,是我們最終的人機交互界面。主要分成兩個部分,語音采集部分以及特效播放部分。左邊是語音輸入

8、部分,包含兩種方式:現(xiàn)場錄音和打開文件。左下方還有一個播放錄音或文件的按鈕,方便用戶在語音輸入結(jié)束后,試聽輸入的信號。右邊是播放特效部分,包括低音增強等六種特效,下方還有個另存為按鈕以及效果選擇下拉菜單,方便用戶保存處理后的信號。人機交互界面總體構(gòu)圖簡潔,色彩柔和,布局合理,使用方便,在極大程度上方便了用戶的使用,減少了學(xué)習(xí)使用的時間與成本。第4章 數(shù)字語音信號幾種簡單處理效果設(shè)計4.1 低音增強(1) 原理簡述低音增強特效,顧名思義就是講聲音信號的低音部分加強,是處理后的聲音信號較原聲音信號低頻部分幅值增大。(2) 實現(xiàn)步驟首先使用低通濾波器將聲音信號的高頻部分濾去,得到只包含低頻部分的聲音

9、信號,將該信號乘以一個系數(shù)后增大,然后與原聲音信號疊加,這樣得到的新的聲音信號頻譜分布不發(fā)生改變,但是低頻部分的幅值明顯增大。實現(xiàn)流程圖如下:(3) 效果實現(xiàn)語音播放后明顯感覺到聲音變得渾厚有力,有力量感。下圖是與聲音信號的頻域幅度圖與低音增強后的頻域幅度譜,從圖中可以明顯看到,低音增強后的信號在低頻部分的幅度得到明顯加強。(4) 應(yīng)用實踐 低音增強效果可以用在家庭音響上,可以提升聲音的力量感,震撼感。我們現(xiàn)在家庭娛樂中常使用的“低音炮”用的就是低音增強的原理。(5) 核心代碼分析x,fs,nbits=wavread('1112'); %讀聲音文件 fp1=1000;fs1=2

10、200; %設(shè)定低通濾波器通帶截止頻率和阻帶截止頻率wp1=2*fp1/Fs; ws1=2*fs1/Fs;rp=1;as=100;N1,wp1=ellipord(wp1,ws1,rp,as); %計算橢圓低通模擬濾波器的階數(shù)和通帶邊界頻率B,A=ellip(N1,rp,as,wp1); %計算低通濾波器模擬濾波器系統(tǒng)函數(shù)系數(shù)x1=filter(B,A,x); %低通濾波,得到含有低頻部分的信號y=x+x1*2 %語音信號疊加,得到低音增強后的信號 4.2 回聲特效(1) 原理簡述 回聲是我們在日常生活中常會遇到一種聲音信號,回聲就是原聲經(jīng)過物體反射回來后與原聲疊加后形成的效應(yīng)。當(dāng)回聲的距離小于

11、一定距離時,回聲不能被人耳感知,變現(xiàn)為原聲的加強;當(dāng)回聲距離大于一定距離時,回聲能被人耳感知,能夠感覺到在原聲停止后一段時間后,再次聽到此聲音,并且響度相對減小。簡單來說,就是延遲、衰減、疊加。(2) 實現(xiàn)步驟回聲是原聲延遲衰減后與原聲疊加。聲音信號在matlab中以矩陣的形式存儲。一般是N行2列的矩陣(這里指雙聲道聲音),N是聲音的點數(shù)長度。為了做到延遲效應(yīng),我們在原矩陣x的前面加上(接上)一段m行2列的為零矩陣,得到矩陣x1,這樣如果將矩陣x,x1從同一起點觀看,那么矩陣x1相當(dāng)于時間x延時了一段時間。延時的時間與添加的零矩陣的長度以及采樣頻率有關(guān)。那么只要將x與x1相疊加,就可以得到回聲

12、效果。這里要注意,由于矩陣相加時要滿足矩陣形式相同,所以還要在原來的x后面也接上一段m行2列的為零矩陣,同時為了回聲效果的逼真性,還要給x1倍乘一個小于1的系數(shù)。實現(xiàn)流程圖如下:矩陣運算流程如下:(3) 效果實現(xiàn)輸出的聲音人耳聽起來有明顯的回聲效果。下圖是原聲、延遲的聲音以及疊加后聲音信號的時域圖。(4) 應(yīng)用實踐 利用數(shù)字信號處理得到的回聲可以在需要的情況下模擬回聲效果,以適應(yīng)需求。(5) 核心代碼分析 x,fs,nbits=wavread('1112',1156384); %讀取文件x1=zeros(4000,2);x; %前“添”零,聲音延時x2=x;zeros(4000

13、,2); %后“添”零,使原聲音長度與延時后相等y1=x1*0.8+x2; %回聲衰減并與原聲疊加4.3 添加背景音樂(1) 原理簡述 原理較為簡單,即兩個矩陣的相加。(2) 實現(xiàn)步驟 首先將兩個需要疊加的矩陣處理使得形式一致(行列數(shù)相等),然后疊加即可。(3)效果實現(xiàn) 可是實現(xiàn)為一段人說話聲,唱歌聲,朗誦聲添加背景音樂,其本質(zhì)是語音序列的疊加,所以可實現(xiàn)兩段語音序列的疊加。(4)應(yīng)用實踐 為一段人說話聲,唱歌聲,朗誦聲添加背景音樂等,其本質(zhì)是語音序列的疊加,所以可實現(xiàn)兩段語音序列的疊加。(5)核心代碼分析較為簡單,此處省略。4.4 回旋特效(1)原理簡述 回旋特效是我們根據(jù)效果來命名的,是將

14、聲音的左右聲道分時播放,也就是說,在第一段時間內(nèi),左聲道有聲音,下一段時間內(nèi),右聲道有聲音,依次交替。(2)實現(xiàn)步驟對聲音信號矩陣按行進行遍歷,設(shè)定點數(shù)長度,依次交替分別使左、右聲道的某段信號的值在該取樣點段內(nèi)置零。或者利用矩陣運算的方法實現(xiàn)。實現(xiàn)步驟如下:(3) 效果實現(xiàn)播放處理后的語音,耳機(非立體聲耳機)的左右耳機輪流有聲音,即當(dāng)左邊耳機有聲音時,右邊耳機沒有,反之亦然。這樣就會產(chǎn)生聲源在不斷回轉(zhuǎn),聲音有種回旋的效果。下面是原聲以及處理后的左右聲道的時域圖:矩陣運算流程如下:(4) 應(yīng)用實踐 在某些音樂作品中可以產(chǎn)生聲源回旋變換的特效,增強音樂的豐富性。(5)核心代碼分析y=zeros(

15、400000,2);%定義一個矩陣x,fs,nbits=wavread('1112',400000); %讀聲音文件for i=1:400000 y(i,:)=x(i,:); %新建信號序列,用于運算end x1=reshape(y,40000,20); %將信號分成了10段20列for i=1:2:10 x1(:,i)=0; %110列,將單數(shù)列置零,即實現(xiàn)左聲道的回旋endfor i=12:2:20x1(:,i)=0; %1120列,將雙數(shù)列置零,即實現(xiàn)右聲道的回旋endx5=reshape(x1,400000,2); %重排序列,變成N行2列的序列sound(x5*2,f

16、s); %單聲道播放后,聲音幅度有減小,這里做補償4.5 快/慢放特效(1)原理簡述 快慢放的原理就是在單位長的時間內(nèi)播放比原聲包含更多或更少的信息的語音序列。以2倍速率快放為例,就是將原來2倍單位時間內(nèi)的語音序列在單位時間內(nèi)播放完,這里的原理用的是在播放時增大采樣間隔,那么在單位時間內(nèi)采集到的點實際包含了從2長度序列采集到的信號(實際上這里就是一個語音序列的有損壓縮),雖然這樣做有信息丟失,但只要滿足奈奎斯特采樣定律,語音信號就不會出現(xiàn)失真,所以在一定條件下是可行的。(2)實現(xiàn)步驟 在播放語音序列時,更改采樣頻率即可。但是在作圖必須對語音信號一步步處理。(3) 效果實現(xiàn)以快放為例,快放時,如

17、果快放倍數(shù)為2,那么原本10s長的信號,可以在5s內(nèi)播放完,并且語音的音調(diào)會變高,關(guān)于這一點將在后面解釋原因。下面是2倍快放時的語音的時域圖(2倍壓縮圖):從下面的圖中可以看出快放的信號實質(zhì)上就是原信號的壓縮。下面是語音信號壓縮的矩陣運算過程:(4) 應(yīng)用實踐 快放的這種原理可以用來在保證采樣頻率的前提下壓縮語音信號。(5) 核心代碼分析第一種方式(展示原理,繪制圖像時使用)x,fs,nbits=wavread('1112',400000); %讀取聲音文件x1=x' %轉(zhuǎn)置x2=reshape(x1,4,200000); %重排成2行,400000列x3=x2'

18、; %轉(zhuǎn)置x4=x3(:,1,2); %取新序列的1、2行第二種方式(實際程序中使用)Sound(x,2*fs); %改變采樣頻率,播放速度加快一倍第5章 自適應(yīng)語音分割、倒序5.1 目標(biāo)實現(xiàn)這里以一段包含“12345”5個單音節(jié)詞的人說話聲為例說明。我們要做到的倒序,就是將這段語音序列分割之后,進行重新排列,也就是倒序排列,然后倒序輸出,這里的倒序輸出指的是我們聽的將是“54321”這樣一段人的說話聲。所謂的“自適應(yīng)”,就是指在語音分割時的自適應(yīng),例如在分割時不能在“1”語音段中間將企分開,這樣會破壞“1”的音,那么倒序之后我們聽到的就不是“1”了,而會變成奇怪的東西。5.2 原理簡述原理流

19、程圖如下:5.3 實現(xiàn)步驟(1)首先我們讀入一段語音文件或者現(xiàn)場錄制一段聲音,如錄制一段包含“12345”的人說話聲。時域圖如下:我們可以看到有5段比較突出的地方,這就是“12345”這5個數(shù)字的聲音的時域圖,其他的較低的較平穩(wěn)的部分是沒有說話時的時間段,理論上應(yīng)該是為0的,但是由于人的呼吸聲、話筒噪音、環(huán)境中的其他聲音使得這些本該為0的區(qū)域不為0。(2)為了去除空白區(qū)域的噪音,考慮到噪音與語音相比幅值較小,因此可以采用閾值法去除空白處噪音,得到下面的效果。(3) 得到上面的濾除噪音制后的信號后,我們開始語音分割,為了實現(xiàn)語音分割,我們需要知道分割點,我們稱之為關(guān)鍵點。從上圖來看,每一小段聲音

20、信號的首尾點都是關(guān)鍵點。下面我們利用這些點的獨有特征來找到它們。這些點有共同的特征,它們都是跳變點。但是,我們知道每一小段語音信號中都會有很多點的值是零,那么就可能出現(xiàn)會有很多點滿足關(guān)鍵點條件,因此,在尋找關(guān)鍵點之前我們要將沒一小段為零的點變成不為零。(4) 為了找到關(guān)鍵點,我們要將每一小段信號中為零的點變?yōu)椴粸榱?,這里采用左右掃秒判別法:即對于序列中每一個點,如果該點是零且又在某小段序列內(nèi),則將該點變?yōu)椴粸榱?。判斷某點是零且又在某小段序列內(nèi)的方法:遍歷所有的點(整段序列首尾部分點除外),當(dāng)遍歷到某為點時,對該點左右各掃描m點,若在左右m點中都有任一不為零的點,則將該點值置為某正數(shù)a。這樣經(jīng)過

21、一次遍歷,就將所有小段內(nèi)部為零的點均置為不為零,這樣,滿足關(guān)鍵點的位置只有每小段的首尾點。那么根據(jù)跳變特性,就可以順利將這些關(guān)鍵點依次找出。(5) 找到關(guān)鍵點后,依據(jù)這些關(guān)鍵點進行語音分割。分割如下:(6)分割完后,就可以進行倒序重排了。到得到的效果如下:(7) 算法優(yōu)化(快速自適應(yīng)倒序)根據(jù)實際測試,上述程序算法處理一段10s、采樣頻率44100Hz的聲音倒序耗時約12.2s。從這個角度來看,上述算法是極不實用的,因此,下面給出一種改進的快速自適應(yīng)倒序算法。該算法的核心是數(shù)據(jù)壓縮。度原來的序列每個十個點抽取一個點形成一個新的序列,然后進行上述的關(guān)鍵點尋找步驟,由于數(shù)據(jù)壓縮了十倍,因此在每小段

22、語音序列為零點置為不為零的過程中所需要左右掃描的數(shù)目就降低了十倍。因此,從理論上來講,該快速算法比原來的算法的處理速度提高約10倍。實際測試中用該算法處理相同的語音段,耗時約0.9s.5.4 應(yīng)用實踐此項技術(shù)中的語音自適應(yīng)分割是關(guān)鍵步驟,完成了這一步之后,可以進行語音提取,語音識別,語音重構(gòu)等等。5.5 代碼分析w,fs,nbits=wavread('123451'); %讀聲音文件 N=length(w); %N是文件的長度,即點數(shù)即wavread中的第二個變量x=zeros(N,1); %定義單列矩陣x=w(:,1); %提取單聲道元素,用于后面的運算y=zeros(N,1

23、); %定義單列矩陣y=w(:,1); %找到關(guān)鍵點后,利用關(guān)鍵點對原矩陣運算L=N; %閾值消除噪音 for i=1:N-1 %遍歷 if abs(x(i)<0.075; %設(shè)定閾值為0.075 x(i)=0;endend%=定義標(biāo)志量,用于插值運算 flag1=0; flag2=0; flag3=0;%=將各小段內(nèi)的為零的置為非零for i=8000:N-8000 for m=1:1000 if (x(i)=0)&(x(i-m)=0) flag1=1; end if (x(i)=0)&(x(i+m)=0) flag2=1; end flag3=flag1+flag2;

24、 if (flag3=2) x(i)=0.03; end flag1=0; flag2=0; flag3=0; endend%=尋找關(guān)鍵點c=1;num=zeros(100,1);%定義一個矩陣for i=1000:N-1000 if (x(i)=0)&(x(i+1)=0)|(x(i)=0)&(x(i+1)=0) num(c)=i; c=c+1; else endend%=轉(zhuǎn)換關(guān)鍵點,精確定位dot=zeros(100,1); len=length(num);dot(1)=0; %dot是存儲精確定位點的數(shù)組dot(2)=num(1); b=3;for i=3:len if(n

25、um(i)-num(i-1)>3000) dot(b)=num(i); b=b+1; end end dot(b)=length(x); %=對語音序列逆序操作 new=; %存放逆序后的矩陣for i=1:b-1 singlelen=dot(b-i+1)-dot(b-i); temp=zeros(singlelen,1); %temp臨時矩陣,存放片段序列 for h=1: singlelen temp(h)=y(h+dot(b-i); end new=new;temp; %片段拼接 temp=;end%=對拼接做平滑處理 for i=2:b-1new(dot(i)=(new(dot(

26、i)-3)+new(dot(i)-2)+new(dot(i)-1)+new(dot(i)+1)+new(dot(i)+2)+new(dot(i)+3)*1/6;end第6章 項目實施過程時 間人 員事 件備 注第一周項目小組項目研討及調(diào)研第二周項目小組系統(tǒng)設(shè)計與實施第三周項目小組程序編寫與調(diào)試第四周項目小組、測試員程序測試與完善邀請測試員參與測試第五周項目小組項目報告撰寫第六周項目小組項目回顧、總結(jié)與提高第七周項目小組答辯準(zhǔn)備第7章 總結(jié)與展望7.1 項目總結(jié)此次項目的順利圓滿完成,離不開項目小組各位成員的團結(jié)協(xié)作與刻苦攻關(guān),也離不開老師們的幫助與指導(dǎo)。在這七周的時間里,我們從一開始的查找資料

27、,到項目的設(shè)計,再到實施、調(diào)試、改進,每一個階段,都包含了我們每個人的辛勞與汗水。在項目實施的過程中,我們每個人的能力都得到了極大的鍛煉,不學(xué)到了許多與數(shù)字信號處理相關(guān)的知識,更是一種學(xué)習(xí)能力的提升,同時也是自學(xué)能力的培養(yǎng)。通過這次的項目的,我們數(shù)字信號處理有了更深刻的理解,對在矩陣運算的層面上的數(shù)字信號處理有了一定的認識與掌握。為將來更深入的學(xué)習(xí)數(shù)字信號處理打了的基礎(chǔ)。7.2 項目展望此次數(shù)字信號處理的對項目雖然已經(jīng)完成,但是我們所完成的項目畢竟是很小的成果,將來還有很多東西要學(xué)習(xí)。我們在將來的學(xué)習(xí)與工作中要把我們完成的這些效果的原理運用于實踐。例如我們的“自適應(yīng)語音分割、倒序”效果,在自適

28、應(yīng)語音分割技術(shù)的基礎(chǔ)上,我們可以做語音提取、語音識別、語音控制等。學(xué)習(xí)的過程永遠不是一蹴而就的,我們要牢牢把握現(xiàn)在,放眼未來,打好基礎(chǔ),才能在未來的道路上走的更遠。附錄源程序:function varargout = MagicVoice(varargin)% MAGICVOICE M-file for MagicVoice.fig% MAGICVOICE, by itself, creates a new MAGICVOICE or raises the existing% singleton*.% H = MAGICVOICE returns the handle to a new MAG

29、ICVOICE or the handle to% the existing singleton*.% MAGICVOICE('CALLBACK',hObject,eventData,handles,.) calls the local% function named CALLBACK in MAGICVOICE.M with the given input arguments.% MAGICVOICE('Property','Value',.) creates a new MAGICVOICE or raises the% existing s

30、ingleton*. Starting from the left, property value pairs are% applied to the GUI before MagicVoice_OpeningFcn gets called. An% unrecognized property name or invalid value makes property application% stop. All inputs are passed to MagicVoice_OpeningFcn via varargin.% *See GUI Options on GUIDE's To

31、ols menu. Choose "GUI allows only one% instance to run (singleton)".% See also: GUIDE, GUIDATA, GUIHANDLES % Edit the above text to modify the response to help MagicVoice % Last Modified by GUIDE v2.5 11-Jan-2013 06:56:54 % Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State

32、 = struct('gui_Name', mfilename, . 'gui_Singleton', gui_Singleton, . 'gui_OpeningFcn', MagicVoice_OpeningFcn, . 'gui_OutputFcn', MagicVoice_OutputFcn, . 'gui_LayoutFcn', , . 'gui_Callback', );if nargin && ischar(varargin1) gui_State.gui_Callbac

33、k = str2func(varargin1);end if nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);end% End initialization code - DO NOT EDIT % - Executes just before MagicVoice is made visible.function MagicVoice_OpeningFcn(hObject, eventdata, handles, varargin)% T

34、his function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% varargin command line arguments to MagicVoice (see VARARGIN) % Choose default command line output f

35、or MagicVoicehandles.output = hObject; % Update handles structureguidata(hObject, handles); % UIWAIT makes MagicVoice wait for user response (see UIRESUME)% uiwait(handles.figure1); % - Outputs from this function are returned to the command line.function varargout = MagicVoice_OutputFcn(hObject, eve

36、ntdata, handles) % varargout cell array for returning output args (see VARARGOUT);% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structurevarargout

37、1 = handles.output; % - Executes on button press in startrecord.function startrecord_Callback(hObject, eventdata, handles)% hObject handle to startrecord (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)set(hObjec

38、t,'string','錄音中');pause(0.1);Fs=str2double(get(handles.frequency,'String');t=str2double(get(handles.recordtime,'String');ai=analoginput('winsound',0);%初始化錄音麥克chan =addchannel(ai,1 2);%1表示單聲道,待我改了這句之后,錄音就可以用回聲效果了set(ai,'SampleRate',Fs); duration=t; %錄音時

39、間set(ai,'SamplesPerTrigger',duration*Fs);start(ai); y=0;time=0;y,time=getdata(ai);%讀出相應(yīng)的數(shù)據(jù)handles.y=y;handles.Fs=Fs;guidata(hObject,handles);set(hObject,'string','完畢');set(handles.play,'Enable','on');set(handles.bfluyinwenjian,'Enable','on'); s

40、et(handles.lowStrong,'Enable','on'); set(handles.huisheng,'Enable','on'); %set(handles.yuchuli,'Enable','on');%set(handles.yuchuliqd,'Enable','on');%set(handles.fuliyebianhuan,'Enable','on');%set(handles.baocun,'Enab

41、le','on'); %set(handles.biansheng,'Enable','on');% - Executes on button press in dakaiqueding. % - Executes on button press in openfile.function openfile_Callback(hObject, eventdata, handles)% hObject handle to openfile (see GCBO)% eventdata reserved - to be defined in a

42、future version of MATLAB% handles structure with handles and user data (see GUIDATA)filename pathname=uigetfile('*.wav','ALL FILES(*.*)','選擇聲音文件');if isequal(filename pathname,0,0) return;endstr=pathname filename;%選擇的聲音文件路徑和文件名temp Fs=wavread(str); % temp表示聲音數(shù)據(jù) Fs表示頻率handles.

43、y=temp;handles.Fs=Fs;handles.xuanze=2;guidata(hObject,handles);%set(handles.yuchuli,'Enable','on');%set(handles.yuchuliqd,'Enable','on');%set(handles.fuliyebianhuan,'Enable','on');%set(handles.baocun,'Enable','on'); %set(handles.bianshe

44、ng,'Enable','on'); set(handles.play,'Enable','on'); set(handles.bfluyinwenjian,'Enable','on'); set(handles.lowStrong,'Enable','on'); set(handles.huisheng,'Enable','on'); function recordtime_Callback(hObject, eventdata, h

45、andles)% hObject handle to recordtime (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of recordtime as text% str2double(get(hObject,'String') retur

46、ns contents of recordtime as a double % - Executes during object creation, after setting all properties.function recordtime_CreateFcn(hObject, eventdata, handles)% hObject handle to recordtime (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not c

47、reated until after all CreateFcns called % Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor') set(hObject,'BackgroundColor','white')

48、;end % - Executes on button press in play.function play_Callback(hObject, eventdata, handles)% hObject handle to play (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)if get(hObject,'Enable') set(handles.r

49、ecord,'Value',0); set(handles.recordtime,'Enable','off'); set(handles.startrecord,'Enable','off'); set(handles.openfile,'Enable','off'); set(handles.open,'Value',0); %set(handles.bofangpinlv,'Enable','on'); %set(handles.

50、bofangqueding,'Enable','on'); set(handles.frequency,'Enable','off'); playspeed=str2double(get(handles.speed,'String'); handles.Fs=playspeed * handles.Fs ; wavplay(handles.y,handles.Fs); elseend; function frequency_Callback(hObject, eventdata, handles)% hObject

51、 handle to frequency (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA) % Hints: get(hObject,'String') returns contents of frequency as text% str2double(get(hObject,'String') returns contents of fre

52、quency as a double % - Executes during object creation, after setting all properties.function frequency_CreateFcn(hObject, eventdata, handles)% hObject handle to frequency (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after al

53、l CreateFcns called % Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor') set(hObject,'BackgroundColor','white');end % - Executes on button press in open.function open_Callback(hObject, eventdata, handles)% hObject handle to open (see GCBO)% eventdata reserved - to be defined in a future ve

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論