中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Matlab制作簡易版八分音符醬游戲

發布時間:2022-02-25 13:58:28 來源:億速云 閱讀:174 作者:iii 欄目:開發技術

這篇文章主要介紹“如何使用Matlab制作簡易版八分音符醬游戲”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“如何使用Matlab制作簡易版八分音符醬游戲”文章能幫助大家解決問題。

效果

如何使用Matlab制作簡易版八分音符醬游戲

如何使用Matlab制作簡易版八分音符醬游戲

游戲方式

給電腦插上耳機后叫喊叭 !

說明

1)使用此代碼應首先安裝:

Audio Toolbox工具箱,博主使用的版本為:

Audio Toolbox 版本 3.0 (R2021a)

2)為保證游戲加載完所有素材后再開始,故設置了加載完成界面后停滯3秒再開始運行游戲

若一進入界面就掛了,應是資源加載太久,請關掉窗口后嘗試重新運行

工具箱主要部分代碼

1)基礎設置

這里懶得改了直接照抄的語音命令識別的截斷數據,大家可以依據自己需要進行更改:

[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

注意:

代碼后必須要進行聲音采集設備的釋放及timer實類的刪除,否則會出現如下提示bug:A given audio device may only be opened once.

即一個設備被開啟兩次

因此需要設置如下回調避免該情況:

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 創建
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 創建(主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 創建(聲波顯示axes創建)
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')


% 繪圖函數句柄
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);

% 基礎屬性
role.y=0;
role.v=0;
role.a=-2;


% 窗口主要回調=============================================================
[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

關于“如何使用Matlab制作簡易版八分音符醬游戲”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

娄底市| 内黄县| 赣州市| 壤塘县| 岐山县| 曲靖市| 红安县| 开封县| 固安县| 庆阳市| 垫江县| 原阳县| 收藏| 江川县| 金乡县| 育儿| 云和县| 都江堰市| 通河县| 宜章县| 吴堡县| 甘泉县| 游戏| 南京市| 桂东县| 鄢陵县| 武汉市| 开封县| 东海县| 正镶白旗| 绥化市| 天台县| 内丘县| 楚雄市| 噶尔县| 新密市| 额尔古纳市| 永靖县| 宁阳县| 崇文区| 许昌市|