DSP

一个关于MediaPlayer的坑

2019-07-13 15:18发布

这几天公司需要开发android 7.1的平台,需要移植一些旧有平台的软件。
其中有一个测试软件中的声音测试,主要逻辑就是用MediaPlayer播放一小段音频以判断声音输出系统是否正常。
公司的测试人员就反映了声音测试在新平台上要么没声音要么只有“噔”一声
给软件加了一些打印,在申请音频焦点的时候记录时间,在音频播放结束回调CompletionListener的时候打印中间花费的时间。
然后发现原长3秒的wav音频test_sound只播了150ms左右。。。。。。 mPlayer.setDataSource( this, Uri.parse("android.resource://" + this.getPackageName() + "/" + R.raw.test_sound));在demo中setDataSource是设的raw下的资源文件
然后我将setDataSource改成给文件的路径(歌曲复制到了内部存储中) mPlayer.setDataSource("/storage/emulated/0/test_sound.wav"); test_sound就能完整的播放出来
接着我换了一个时长9秒的WAV音频test_sound2放到raw下也能播出来。 但是我将test_sound2用格式工厂剪切成只有3秒的时候,就出现了和test_sound同样的情况,只播了150ms左右。。 4秒和5秒都是如此 当我剪切成一个6秒的WAV音频时,终于能完整播放了。
后来我怀疑跟格式有关,便将WAV格式的test_sound转成MP3格式,还是只播了150ms左右。
一个奇怪的现象,以此记录。 往后能出真相 2018029更新-------------------------------------- 在设置提示音中也有这个现象,导致在调节音量时会播放不完整的音频。