Android Studio 开发实践——简易版音游APP(一)

FREE  ——简易版音游APP

一、APP介绍

通过识别本地曲库,对音频文件进行识别提取出时间点,来产生滑块进行动态点击的畅玩过程,享受音乐的律动美感。界面主要仿照节奏大师等音游app,整体风格呈黑金色。(注:此app开发为课程作业,部分图片来自网图非原创,未曾商用)

二、APP特点

1.多种模式选择

常规设置:模式可选择双轨道或者四轨道;滑块数量可以选滑块较少或滑块较多;滑块速度可以选择慢速、中速、快速。

高级设置(开发人员选项):通过调整样本窗口大小、样本窗口数量、阈值权重等参数来调整滑块的数量。

2.支持本地所有MP3、WAV格式的音频

         不同于曲库人为摆放滑块的位置,本app滑块位置是根据音频自动生成的,暂时配置有MP3、WAV格式音频文件的识别加载,能够较大程度地支持本地音频文件。

3.兼容不同分辨率的设备

         通过android开发特有的dp单位适应不同分辨率手机的开发环境,通过ppi屏幕分辨率密度进行px与dp单位之间的转换,本APP能够适应ldpi、mdpi、hdpi、xhdpi、xxhdpi等不同分辨率密度,适配更多机型。

三、项目难点

1.滑块的滑动

         通过比较Transaction、ObjectAnimator、ValueAnimator等动画效果,发现transaction只是表面移动,实际布局位置未改变,无法识别移动的位置,而且有的无法设置动画延迟时间,所以最后采用ObjectAnimatior为滑块滑动的主要部分。把滑块设为单独的EachButton、LandEachButton类,来动态设置它的动画起止位置,延迟时间等。这里动画延迟是结合音频节奏点的时间,延迟到那个节奏点的时候滑块动画才开始。

         滑块的滑动主要用到的文件有Classes.EachButton、Classes.LandEachButton。

2.点击效果

         这里点击时生成的best、good、miss字样主要是通过自定义Toast的setView方法实现,通过得到点击时该轨道列离得最近的滑块的位置与按钮位置之差d,得出best、good、miss指标的不同d的范围来得出点击评价,这里miss字样是在eachButton内部的onAnimationEnd()方法内部进行判别的。

         点击效果主要用到的文件有toast.xml、toast_land.xml。

3.节奏点的识别

         节奏点的识别主要用到音频采样傅里叶变换(FFT的知识,音频采样得到时域信号,这个信号可以看成是多个正弦波叠加的结果,通过傅里叶变换得到一段信号(一个样本窗口)里的关键频率,实现时域映射到频域,并与周围几个样本窗口的关键频率求均值加权得到阈值,大于阈值的信号点就可以看做节奏的起点,然后这个信号点的位置比例乘以总时间即为节奏点的时间,依此设置滑块延时。

         实验过程中先是找到了一个wav格式文件画出波形图的样例,自己解读实现了一下,然后找到了mp3转化为wav格式的方法,然后放到android里面发现低于26的API不支持javax.sound等的包,于是又学习了mp3文件的格式,进行帧读取,后来发现大部分mp3文件是压缩过的,后来就仿照wav文件处理的代码自己实现了一个mp3文件的识别(有些数据流结构对不上mp3的标准帧格式,所以只是大致识别)。

         节奏点识别主要用到的文件有WavHandle.WaveFileReader、Mp3Handle.Mp3FileReader、Classes.FFT 、Classes.HandleData。

4.兼容其他设备

         由于activity中滑块位置的设置和获取是以px为单位的,所以需要转化为dp单位来兼容不同分辨率。通过得到设备的宽度getWindowManager().getDefaultDisplay().getWidth();对应不同的1dp=npx转换,其中对应关系(width,n)(240,0.75)(320,1.0)(480,1.5)(720,2.0)(1080,3.0)

5.其他

         申请读取内存的服务的实现。

通过MediaStore.Audio.Media.EXTERNAL_CONTENT_URI读取本地曲库,通过MediaStore.Audio.Media.DISPLAY_NAME等得到歌曲信息,通过RecycleView呈现歌单。其中用到的文件有Classes.Music、Classes.MusicAdapter。

         通过广播、BaseActivity、ActivityCollector实现强行下线,避免重复打开活动。其中用到的文件有Classes.ActivityCollector、Classes.BaseActivity。

         强制横屏的实现,通过layout_weight设置均分宽度居中。

四、APP界面

(注:此app开发为课程作业,图片来自网图非原创,未曾商用)

1.Logo

2.首页(MainActivity)

3.歌单页面(MusicViewActivity)

4.基础模式选择(OriginChoiceActivity)

5.高级设置(ChoiceActivity)

6.双轨道模式界面(GameActivity)

7.四轨道模型界面(FourGameActivity)

8.分数结果界面(ResultActivity)

六、改进空间

(时间限制,部分功能未曾实现)

1.暂停功能

2.连击效果

3.歌曲搜索功能

4.排行榜

5.人工控制节奏点

--------------------------------------------------------------------------------------------------------------------------------------------------------

源码CSDN链接:Free简易版音游app_音游-Android其他资源-CSDN下载

源码Github链接:GitHub - lyrh-git/Free: 一个自动识别音乐节奏点的仿节奏大师音游

百度网盘链接:https://pan.baidu.com/s/1abPcXap4oCmGhjC5nwypVA?pwd=zs23 
提取码:zs23

(CSDN的资源不知道为啥C币自己涨了,就很迷惑,我也看不到我的收益,不知道怎么搞的,刚上传到github上了,一个粗糙的简易app,见笑见笑)

  • 46
    点赞
  • 417
    收藏
    觉得还不错? 一键收藏
  • 26
    评论
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值