千家信息网

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

发表于:2024-09-30 作者:千家信息网编辑
千家信息网最后更新 2024年09月30日,这篇文章主要介绍"如何使用Matlab制作简易版八分音符酱游戏"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"如何使用Matlab制作简易版八分音符酱游戏"文章
千家信息网最后更新 2024年09月30日如何使用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安全错误 数据库的锁怎样保障安全 没有电脑怎么学习网络技术 服务器轴流风机怎么样 网络安全公益大讲堂观后感 胶州市网络安全哪个部门管 合肥秋枫网络技术有限公司 身份证号码户籍归属地数据库 戴尔r730服务器怎么拆机 华为云服务器有哪些优势 网络安全橱窗展示设计效果图 我的世界服务器城市建设 2018网络安全法知识竞赛 农民互联网金融科技 主机与域名服务器的关系 顶层控制软件开发 美服务器打野叫什么 关于网络技术那些资金用途 软件开发神话的主要精神 高科技网络技术代理价钱 收费的视频软件开发 易保网络技术有限公司面试题 护苗网络安全特手抄报 爱站显示的服务器地址是真实的吗 服务器维护异常如何处理 美国东风导弹数据库 服务器带多宽合适 宿舍路由器远端服务器无响应 oppo软件开发工程师 web服务器安全配置规范 网络安全需要严格审查吗 福州墨者互联网科技有限公司
0