论文格式(样本)

论文格式(样本)

ID:44663741

大小:470.82 KB

页数:15页

时间:2019-10-24

上传者:U-7604
论文格式(样本)_第1页
论文格式(样本)_第2页
论文格式(样本)_第3页
论文格式(样本)_第4页
论文格式(样本)_第5页
资源描述:

《论文格式(样本)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

一个简单的音频处理程序题目简述。1功能介绍本程序是一个简单的音频处理程序,使用MATLAB软件编写完成。主要具有音频录制、播放、播放速率控制、播放音量控制、播放模式选择(渐强、渐弱、倒放、快放、单声道、交换声道、回音、往返播放等,可扩展)、同步绘制咅频数据波形等功能,并通过图形化交互界面(GUI)进行程序使川的交互。交互界面如图2・图1程序的交互界面2功能实现程序由两个部分组成:MATLAB代码(.m文件)和GUI图形(.fig)。程序使丿IJ的流程:获得音频文件一>播放功能选项(可选)->播放音频文件。在笫一步获得音频文件麻,程序在交互界而右侧的绘图控件屮显示相应的音频数据波形,并持续到音频文件被更新。备注:软件版本:MATLABR2011b 2.1获得音频文件有两种方式获得咅频文件:一、现场录制音频数据(形成数据文件voice.mat);二、打开已有音频文件(仅支持.wav文件格式)。点击“音频来源”的下拉菜单,可以选择'录音'或'打开已冇音频文件',默认是'录音音频来源:默认:录音▼默认:录音打开已有音频文件图2.1-1音频来源:录2.1.1录制音频文件音频來源>>默认:录音,设置录音长度(单位:秒),点击“•开始录制”按钮。录音文件的音频数据显示在交互界而右上侧的绘图控件小。此时在指令窗会看到同步的提示信息,其中ans返回的是当前录制文件的数据维度。»homework1PleaseenterasamplingtimeinbelowPleaseStartspeaking・・・EndofRecording.ans=800001图2.1-2录制咅频文件(录制10s文件完成吋)具体代码参见:functionpushbuttonl_Callback(hObjectzeventdata,handles)functionpopupmenu2_Callback(hObject,eventdmtm,handles)2.1.2打开已有文件音频來源>>打开已有音频文件。在弹出的文件查找对话框中找到目标音频文件,并打开。可见当前文件路径显示在界面的右上方“路径:”中,.wav格式的音频文件一般包含左声道和右声道数据,将不同声道数据绘制在不同的图形控件中。此时在指令窗会看到同步的提示信息,具屮sizeFileData返回的是当前录制文件的数据维度。 functionpopupmenu2_Callback(hObjectzeventdata,handies)・wavfilemtheopenwindow2.2音频数据显示主要包括合成音频、左声道和右声道数据的显示。2.2.1合成音频数据通过录音模式获得的音频文件,是通过调用windows录音机完成的,受限于所用电脑的声道,仅获得单声道数据。故此情况下不存在左右声道的区别。•wav格式的音频文件是一种无损格式音频,一般有左右声道,分別保存在文件数据的第1列和第2列。合成音频数据収自左右声道数据之和的二分之一。波形数据显示在交互界面的右侧绘图控件之屮。如图2.1-2和图2.1-3.具体代码参见:functionpushbuttonl_Callback(hObject,eventdata,handles)functionpopupmenu2_Callback(hObject,eventdaZ,handles)2.2.2左声道数据左声道数据収自.wav格式的音频文件的第1列数据。显示在交互界而的右下方的两个绘图控件中左侧这个控件Z屮。具体代码参见:functionpopupmenu2_Callback(hObject,eventdata,handles)2.2.3右声道数据 右声道数据取自wav榕式的音频文件的第2列数据。显示在交互界面的右下方的两个绘图控件中右侧这个控件Z屮。 具体代码参见:functionpopupmenu2_Callback(hObjectzeventdata,handles)2.3播放功能选项在已获得音频文件(详见2.1节)的基础上再进行播放功能选项的选择。播放功能选项包括播放速度控制、播放音量控制和播放模式选择3个功能选项。此部分均可跳过。图2.3-1播放功能选项2.3.1播放速度控制播放速度通过改变播放音频文件时每秒播放音频数据的个数(即频率)进行控制。如选择播放速度为8000Hz即每秒播放8000个音频数据。频率越高,播放速度越快。可选择的播放频率有:8000Hz(默认)、11025Hz>22050Hz、44100Hzo选项播放频率:默认:8000Hz▼[默认:8000Hz1-11025HzJ22050Hz44100Hz图2.3-2播放速度控制具体代码详见:functionpush丄丄bmck(hObject,eventdata,handles)FS_chioceswitch-case结构2.3.2播放音量控制播放音量控制通过改变咅频数据被放大或缩小的倍数分别來控制播放时声咅的增大或减小(即乘以一个系数)。系数人于1,则音频数据被放人;系数小于1,则音频数据被缩小。 通过拖动音屋大小的滚动条来改变播放音屋的犬小,变化范围为・20dB~+20dB,默认为OdB。「量大小:-20dBOdB20dJ图2.3-3播放音蚩控制具体代码详见:functionpushbutton2_Callback(hObjectzeventdata,handles)timesif-else结构2.3.3播放模式选择通过选择下拉菜单小不同的播放方式來进行播放模式选择。可选择的范围:正常播放(默认)、音量渐弱、音量渐强、音频倒放、音频快放(X2倍)、左声道声音播放、右声道声音播放。默认(正常播放)首量渐弱■■■—音量渐强_.・・音频倒放u音频快放/2户―左声道单独右声道单独交换声道増加回音往返放音右声道单独图2.3-4播放模式选择具体代码详见:func_choiceswitch-case结构说明:正常播放(默认):音量渐弱:case2,音量渐强:case3,音频倒放:case4,音频快放(X2倍):左声道声音播放:右声道声咅播放:functionpushbutton2_CAllbAck(hObject,eventdata,handies)otherwise,正常播放原数据。在原数据基础上乘以衰减系数(exp(-t./FS))'o在原数据基础上乘以增强系数(exp(4*t./FS)),0将原数据倒遗sound_.rec(size_voice:-1:1)。case5,改变播放速率为2*FS。case6,取原数据的第1列。case7,取原数据的第2列。交换声道播放:case8,交换原数据的前两列。增加回音播放:case9,在原数据基础上从给处證加一半幅度的原数据。wl=[sound_rec;zeros(size_voice(1)/2Zsize_voice(2))];w2=[zeros(size_voice(1)/2,size_voice(2));sound_rec];sound_rec=times*(wl+w2/2);往返冋音:case10,将原数据以1秒为单位进行分割,然后倒序排列形成新的声音数据。原数据续接新的声音数据形成往返回音数据。 2.4音频播放在己获得音频文件(详见2.1节)、设瓷播放功能选项(详见2.2节)的基础上,再进行音频播放。点击“▲播放/回放”按钮,进行音频播放。在相应的播放结束时,指令窗(commandwindow)中会冇相应的提示,此时可以重新选择咅频文件输入(可选)并设置播放功能选项(可选),进行音频播放的反复操作。具体代码详见:functionpushbutton2_Callback(hObjectzeventdata,handles)func_choiceswitch-case结木勾2.5其他无。3程序总结本程序实现简单的音频处理功能及便捷的图形化交互界面。具有以卜•特点与缺陷:1、程序可扩展性好。其中“播放模式”采用switch-case语句实现,方便功能扩展;2、图形化用户交互界面简洁明了。左侧放置音频播放的各选项控件,从上到下的排布体现操作步骤;右侧显示咅频文件的数据波形。提示信息丰富,方便操作。3、重复地进行音频数据载入时,上-•次的音频数据在未被新数据覆盖之前会持续在绘图控件中显示,容易让人产生错觉。(已改)未尽功能:(1)、播放的数据文件采用先保存,再加载的方式实现数据在不同控件回调函数中的传递,应该可以优化。(2)、声音播放时,实时的显示播放进度。(3)、更为实际的音频处理功能待加强。(4)、将整体程序打包成可执行的.exe文件。4课程总结待补! 附录(部分程序)%Executesonbuttonpressinpushbuttonl.functionpushbuttonl_Callback(hObject,eventdata,handles)%hObjecthandletopushbuttonl(seeGCBO)%eventdatareserved一tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)t_str=get(handles•edit1,!string!);t_record=str2double(t_str);%Recordyourvoicefor1t_record1seconds.recObj=audiorecorder;disp(!PleaseStartspeaking•••')axes(handles•axesl)text(0,0,1A^OoOD...1);recordblocking(recObj,t_record);disp(!EndofRecording.!)text(0,0•5/!!);%Storedataindouble-precisionarray.myRecording=getaudiodata(recObj);size(myRecording)%Plotthewaveform.plot(handles.axesl,myRecording);axes(handles.axes2)zplot(0:9,zeros(1/10))%text(0.2,0・5,^^doIA^IPxoEupA*);axes(handles.axes3),plot(0:9,zeros(1z10))%text(0.2,0.5,1A^doiA^iPOOEiiijA1);%save1myRecording!dataas!voice.mat1savefile=!voice.mat!;save(savefile,!myRecording!)%Executesonbuttonpressinpushbutton2.functionpushbutton2_Callback(hObject,eventdata,handles)%hObjecthandletopushbutton2(seeGCBO)%eventdatareserved一tobedefinedinafutureversionofMATLAB%handlesstructurewithhandlesanduserdata(seeGUIDATA)%loadvoicefileandplayinchoosedmode.loadvoice.matFileSource=get(handlesepopupmenuS,!Valuef);switchFileSourcecase1 sound_rec=myRecording;case2sound_rec=FileData;endsize_voice=size(sound_rec)%FS=8000;FS_chioce=get(handles•popupmenu3,1Value!;switchFS_chioce%samplingrate:8000,11025,22050,and44100persecond.case1FS=8000;case2FS=11025;case3FS=22050;case4FS=44100;endt_play=floor(size_voice(1)/FS)%voiceisenhancedorreducedbythesametimesv_times=get(handles.sliderl,1Value1);ifv_times>=0%times=20*logl0(v_times)+1;times=v_times+1;else%times=20/logl0(abs(v_times));times=1/abs(v_times);end%voice.matisplayedbypopupmenufunc_choice=get(handles.popupmenul,1Value1)t=0:(size_voice-l);switchfunc_choicecase2%voiceisreducedbyfuncdisp(1PlayinginReducedMode...1)fund=(exp(-0.5*t./FS))1; func=repmat(funclz1,size_voice(2));sound_rec=times*sound_rec•*func;plot(handles.axeslzsound_recz1g1);%»i°IEuifsize_voice(2)>1plot(handles-axes2,sound_rec(:,1),1b1);plot(handles-axes3,sound_rec(:,2),1c1);elseaxes(handles.axes2)text(0.2,0.5,1p¥EupAipxoEupA1);axes(handles.axes3)text(0.2,0.5,'pYEupAiPObEupA*);endsound(sound_reczFS)pause(2)disp(fTheEndoftheReducedMode.')case3%voiceisenhancedbyfuncdisp(1PlayinginEnhancedMode...1)fund=(exp(0.5*t./FS))1;func=repmat(funcl,1/size_voice(2));sound_rec=times*sound_rec.*func;plot(handles-axesl,sound_reczfgf);%»i°IEuifsize_voice(2)>1plot(handles.axes2zsound_rec(:,1),1b1);plot(handles.axes3/sound_rec(:z2)z1c1);elseaxes(handles-axes2)text(0.2,0.5,1p¥EupAIPxoEupAf);axes(handles.axes3)text(0.2,0.5,1pYEupAiPOOEupA1);endsound(sound_reczFS)pause(2)disp(1TheEndoftheEnhancedMode.1)case4%voiceisplayedfrombackdisp(fPlayingtheVoiceStartingfromtheBacksound_rec=times*sounci_rec(size_voice:-1:lz:)plot(handles.axesl,sound_reczfgf;%»i°IEuifsize_voice(2)>1plot(handles.axes2zsound_rec(:z1)z1b1);plot(handles-axes3,sound_rec(:,2),1c1);elseaxes(handles•axes2)text(0.2z0.5,1p¥EupAipx6EupAf);%xoEupA%OOEupA%xoEu|jA%OdEupA%xoEupA%OOEupAaxes(handles.axes3)text(0-2,0-5,!p¥EupAiE>6OEupA!); endsound(sound_reczFS)pause(2)disp(fTheEndofVoicePlayedfromtheBack.f)case5%voiceisplayedfasterdisp(1PlayinginFasterMode...1)sound_rec=times*sound_rec;plot(handles.axesl,sound_rec,1g1);%»i°IEuifsize_voice(2)>1plot(handles-axes2,sound_rec(:,1),1b1);%xoEupAplot(handles•axes3zsound_rec(:z2)z1c1);%OdEupAelseaxes(handles.axes2)text(0.2,0.5,'p¥EupAIPx6EupA');axes(handles-axes3)text(0.2,0.5,1p¥EupAIE>OdEupAf);endsound(sound_rec,2*FS)pause(2)disp(fTheEndoftheFasterMode.f)case6%voiceisplayedwiththeleftchannel.disp(1Playingwiththeleftchannelonly...1)sound_recleft=times*sound_rec(:,1);plot(handles.axesl,sound_rec,fg1);%»i°IEuifsize_voice(2)>1plot(handles•axes2zsound_rec(:z1)z1r1);%xoEupAplot(handles.axes3zsound_rec(:,2),1c1);%6dEupAelseaxes(handles.axes2)text(0.2,0.5,,p¥EupAtpx6EupA,);axes(handles.axes3)text(0.2z0.5,1p¥EupAip6bEupAf);endsound(sound_recleft,2*FS)pause(2)disp(*TheEnd.(LeftChannel)*)case7%voiceisplayedwiththerightchannel.disp(1Playingwiththerightchannelonly...1)sound_recright=times*sound_rec(:,2);plot(handles-axesl,sound_rec,1g1);%»i°IEuifsize_voice(2)>1plot(handles.axes2,sound_rec(:,1),1b1);%xoEupAplot(handles.axes3/sound_rec(:z2)z1r1);%6dEupAelseaxes(handles•axes2)text(0.2z0.5,1p¥EupAipx6EupAf);axes(handles.axes3)text(0.2,0.5「,p¥EupAiPObEupA,);end sound(sound_recright,2*FS)pause(2)disp(!TheEnd.(RightChannel)')case8%voicechanelisexchanged•disp(fPlayingwiththeChannelExchanged...1)ifsize_voice(2)>1sound_rec=times*[sound_rec(:f2)fsound_rec(:,1)];plot(handles•axes1,sound_recz1g1);%»i°IEuplot(handles-axes2,sound_rec(:,1),1b1);%xoEupAplot(handles-axes3,sound_rec(:,2),1c1);%OOEupAelsesound_rec=times*sound_rec;plot(handles•axes1,sound_recz1g1);%»i°IEuaxes(handles.axes2)text(0.2,0.5,,p¥EupAtpx6EupA,);axes(handles.axes3)text(0.2z0.5,1p¥EupAip6bEupAf);endsound(sound_rec,FS)pause(2)disp(1TheEndoftheExchangedMode1)case9%voiceismixedwithechodisp(!PlayinginEchoMode...')wl=[sound_rec;zeros(size_voice(1)/2,size_voice(2))];w2=[zeros(size_voice(1)/2Zsize_voice(2));sound_rec];sound_rec=times*(wl+w2/2);plot(handles.axeslzsound_recz1g1);%»i°IEuifsize_voice(2)>1plot(handles-axes2,sound_rec(:,1),1b1);%xoEupAplot(handles-axes3,sound_rec(:,2),1c1);%OOEupAelseaxes(handles.axes2)text(0.2,0.5,1p¥EupAipxoEupA1);axes(handles.axes3)text(0.2,0.5,'pYEupAiPObEupA*);endsound(sound_reczFS)pause(2) disp(fTheEndoftheEchoMode.')case10%voiceisplayedfromthestartandthentheend.forii=l:t_play%sound_recl{ii}%Od2ENuAEFSIajj¥I»^l6Ey^YIA^^0DD-0Asound_rec(ii*(1:FS),:);sbackl{t_play-ii+l}=sound_rec(ii*(1:FS),:);endsbackl=sbackl1;sback=zeros(size_voice);forjj=l:t_play%Eu3EprBd2¥•ApAEy^Ygg=sbackl{jj};k=(1:FS)+FS*(jj-1);sback(k,:)=gg(1:FS,:);endsound_rec=times*[sound_rec;sback];plot(handles-axesl,sound_reczfgf);%»i°IEuifsize_voice(2)>1plot(handles.axes2,sound_rec(:,1),1b1);%x6Eu|iAplot(handles•exes3,sound_rec(:,2),!c1);%6dEupAelseaxes(handles-axes2)text(0.2,0.5,1p¥EupAIPxoEupAf);axes(handles.axes3)text(0.2,0.5,1pYEupAIPOOEupA1);enddisp(fPlayingandPlayBack...f)sound(sound_reczFS)pause(2)disp(!TheEnd.(PlayingandPlayBack)')otherwise%Playbacktherecording•disp(1PlayinginNormalMode...1)sound_rec=times*sound_rec;plot(handles.axesl,sound_rec,1g1);%»i°IEuifsize_voice(2)>1plot(handles-axes2,sound_rec(:,1),1b1);%xoEupAplot(handles•axes3zsound_rec(:z2)z1c1);%OOEu|jAelseaxes(handles.axes2)text(0.2,0.5,'p¥EupAIPx6EupA');axes(handles-axes3)text(0.2,0.5,1pYEupAIPOOEupA1);endsound(sound_rec,FS) pause(2)disp(1TheEndoftheNormalMode.1)end%Executesonselectionchangeinpopupmenu2.functionpopupmenu2_Callback(hObject,eventdatahandles)%hObjecthandletopopupmenu2(seeGCBO)%eventdatareserved一tobedefinedinafutureversionofMATLAB%handlesstrueturewithhandlesanduserdata(seeGUTDATA)%Hints:contents=cellstr(get(hObject,fString1))returnspopupmenu2contentsascellarray%contents{get(hObject,1Value1)}returnsselecteditemfrompopupmenu2%Chooseviocefile:recordingoropena.wavfile.FileSource=get(handles.popupmenu2,!Value1);switchFileSourcecase1disp(1Pleaseenterasamplingtimeinbelow)-j-1)case2disp(fPleaseselecta-wavfileintheopenwindowj-j-f)[FileName,PathName]=uigetfile(f*.wav1,1Selecttheundamaged•wavfile1);set(handles.edit2z1string1,PathName);FileDa=wavread(FileName);size_FileData=size(FileData)%Plotthewaveform•FileData_mix=(FileData(:,1)+FileData(:,2))/2; plot(handles.axeslzplot(handles.axes2,plot(handles.axes3,FileData_mix,1g1);FileData(:,1),'b');FileData(:,2),fcf);%»i°IEu%xoEupA%OOEupA%save1myRecording1dataas1voice.matsavefile=1voice.masave(savefile,1FileData1)end

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭