您好,登錄后才能下訂單哦!
這篇文章主要介紹“如何使用Matlab制作簡易版八分音符醬游戲”的相關(guān)知識,小編通過實(shí)際案例向大家展示操作過程,操作方法簡單快捷,實(shí)用性強(qiáng),希望這篇“如何使用Matlab制作簡易版八分音符醬游戲”文章能幫助大家解決問題。
給電腦插上耳機(jī)后叫喊叭 !
1)使用此代碼應(yīng)首先安裝:
Audio Toolbox工具箱,博主使用的版本為:
Audio Toolbox 版本 3.0 (R2021a)
2)為保證游戲加載完所有素材后再開始,故設(shè)置了加載完成界面后停滯3秒再開始運(yùn)行游戲
若一進(jìn)入界面就掛了,應(yīng)是資源加載太久,請關(guān)掉窗口后嘗試重新運(yùn)行
1)基礎(chǔ)設(shè)置
這里懶得改了直接照抄的語音命令識別的截斷數(shù)據(jù),大家可以依據(jù)自己需要進(jìn)行更改:
[audio_t,fs] = audioread('stop_command.flac'); classificationRate = 20; adr=audioDeviceReader('SampleRate',fs,'SamplesPerFrame',floor(fs/classificationRate)); audioBuffer=dsp.AsyncBuffer(fs);
聲音信號繪圖:
if ishandle(fig) audio_t=adr(); write(audioBuffer,audio_t); audio_y=read(audioBuffer,fs,fs-adr.SamplesPerFrame); audio_x=(0:(length(audio_y)-1))./(length(audio_y)-1); audioHdl.XData=audio_x; audioHdl.YData=audio_y; end
注意:
代碼后必須要進(jìn)行聲音采集設(shè)備的釋放及timer實(shí)類的刪除,否則會出現(xiàn)如下提示bug:A given audio device may only be opened once.
即一個設(shè)備被開啟兩次
因此需要設(shè)置如下回調(diào)避免該情況:
set(gcf,'tag','co','CloseRequestFcn',@clo); function clo(~,~) stop(game) delete(game) release(adr) delete(findobj('tag','co')); clf,close,clc end
function audioGame %@author:slandarer %使用工具箱情況: %Audio Toolbox 版本 3.0 (R2021a) % figure 創(chuàng)建 fig=figure('Units','normalized','Position',[0.2 0.2 0.6 0.5]); fig.NumberTitle='off'; fig.MenuBar='none'; fig.Resize='off'; fig.Name='audio Game by slandarer'; % axes_1 創(chuàng)建(主axes) ax_1=axes(fig); ax_1.Position=[0 0 1 1]; ax_1.XTick=[]; ax_1.YTick=[]; ax_1.ZTick=[]; ax_1.XLim=[0 600]; ax_1.YLim=[0 200]; hold(ax_1,'on') % axes_2 創(chuàng)建(聲波顯示axes創(chuàng)建) ax_2=axes(fig); ax_2.Position=[0.7 0.8 0.3 0.2]; ax_2.XTick=[]; ax_2.YTick=[]; ax_2.ZTick=[]; ax_2.XLim=[0 1]; ax_2.YLim=[-1 1]; ax_2.Box='on'; ax_2.LineWidth=2; ax_2.Color=[250,250,247]./255; hold(ax_2,'on') % 繪圖函數(shù)句柄 groundHdl=fill(ax_1,[0,600,600,0],[0,0,65,65],[0,64,115]./255); holeHdl_1=fill(ax_1,[0,50,50,0]+500,[0,0,65,65],[1 1 1],'EdgeColor',[1 1 1]); holeHdl_2=fill(ax_1,[0,50,50,0]+800,[0,0,65,65],[1 1 1],'EdgeColor',[1 1 1]); holeHdl_3=fill(ax_1,[0,50,50,0]+1100,[0,0,65,65],[1 1 1],'EdgeColor',[1 1 1]); audioHdl=plot(ax_2,[0,1],[0,0],'Color',[0,64,115]./255); roleHdl_a=scatter(ax_1,100,95,300,'filled','CData',[0,64,115]./255); roleHdl_b=fill(ax_1,[-5 0 5]+100,[90,65,90],[0,64,115]./255); % 基礎(chǔ)屬性 role.y=0; role.v=0; role.a=-2; % 窗口主要回調(diào)============================================================= [audio_t,fs] = audioread('stop_command.flac'); classificationRate = 20; adr=audioDeviceReader('SampleRate',fs,'SamplesPerFrame',floor(fs/classificationRate)); audioBuffer=dsp.AsyncBuffer(fs); pause(3) fps=20; game=timer('ExecutionMode','FixedRate','Period',1/fps,'TimerFcn',@audioMainGame); start(game) set(gcf,'tag','co','CloseRequestFcn',@clo); function clo(~,~) stop(game) delete(game) release(adr) delete(findobj('tag','co')); clf,close,clc end function audioMainGame(~,~) holeHdl_1.XData=holeHdl_1.XData-5; holeHdl_2.XData=holeHdl_2.XData-5; holeHdl_3.XData=holeHdl_3.XData-5; if holeHdl_1.XData(1)<-50,holeHdl_1.XData=holeHdl_1.XData+900;end if holeHdl_2.XData(1)<-50,holeHdl_2.XData=holeHdl_2.XData+900;end if holeHdl_3.XData(1)<-50,holeHdl_3.XData=holeHdl_3.XData+900;end if ishandle(fig) audio_t=adr(); write(audioBuffer,audio_t); audio_y=read(audioBuffer,fs,fs-adr.SamplesPerFrame); audio_x=(0:(length(audio_y)-1))./(length(audio_y)-1); audioHdl.XData=audio_x; audioHdl.YData=audio_y; if any(audio_y>0.2)&&role.y>-1&&role.y<1 role.v=20; end role.v=role.v+role.a; role.v(role.v<-5)=-5; role.y=role.y+role.v; flag1=holeHdl_1.XData(1)<=95&holeHdl_1.XData(2)>=105; flag2=holeHdl_2.XData(1)<=95&holeHdl_2.XData(2)>=105; flag3=holeHdl_3.XData(1)<=95&holeHdl_3.XData(2)>=105; if (~flag1)&&(~flag2)&&(~flag3) role.y(role.y<0)=0; roleHdl_a.YData=95+role.y; roleHdl_b.YData=[90,65,90]+role.y; else if role.y<=-1 stop(game) for i=1:10 roleHdl_a.YData=(95+role.y)-i*(65+role.y)/10; roleHdl_b.YData=[90,65,90]+role.y-i*(65+role.y)/10; pause(0.1) end else roleHdl_a.YData=95+role.y; roleHdl_b.YData=[90,65,90]+role.y; end end end end end
關(guān)于“如何使用Matlab制作簡易版八分音符醬游戲”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點(diǎn)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。