千家信息网

如何使用Matlab制作简易版八分音符酱游戏

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"如何使用Matlab制作简易版八分音符酱游戏"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"如何使用Matlab制作简易版八分音符酱游戏"文章
千家信息网最后更新 2026年11月03日如何使用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,clcend

完整代码

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,clcend    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            endend

关于"如何使用Matlab制作简易版八分音符酱游戏"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

代码 八分音符 简易 音符 制作 工具 工具箱 版本 知识 基础 声音 情况 界面 行业 设备 绘图 运行 不同 实用 信号 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技有限公司 中国互联网科技工作委员会毛军 互联网属科技 互联网是不是新科技 中国互联网科技发展 科技互联网公司logo 沃里互联网科技 互联网科技的未来发展 重庆科技学院互联网 丰台科技园 互联网公司 互联网科技热点资讯 中国的互联网科技企业的崛起 移动互联网科技股 互联网科技公司有风险吗 互联网公司黑科技创始人 山东星卡互联网科技有限公司官网 中国互联网公司的科技投入 互联网科技创新方面的资料 互联网的黑科技实验室 伍佰万互联网科技是干嘛的 互联网与科技 九亚互联网科技 掌上梦互联网科技 互联网科技公司有哪些 恒生科技互联网指数分析 哈尔滨秒房互联网科技有限公司 花神(南京)互联网科技有限公司 洛阳昕诺飞互联网科技有限公司 宁波跨境商互联网科技有限公司 西安有哪些互联网高科技企业
0