一些.wav文件我无法使用soundpool。我听不到任何声音。有些文件播放得很好。为什么呢?
代码
AudioManager mgr = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
int streamVolume = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
soundPool.play(soundPoolMap.get(sound), streamVolume, streamVolume, 1, 0, 1f);
答案 0 :(得分:2)
我在soundpool和文件格式方面遇到了很多问题。 Read my original question,它可能会对您有所帮助。
基本上,我改为使用MediaPlayer,没有更多问题。
答案 1 :(得分:1)
我使用运行 Jellybean 4.1.2 的 LG Optimus F3 使用.WAV资源文件的结果是其MediaPlayer库无法解码:
在任何一种情况下,logcat中的症状是:
V/SoundPool﹕ load: fd=49, offset=123932, length=536, priority=1
V/SoundPool﹕ create sampleID=3, fd=50, offset=536, length=123932
V/SoundPool﹕ doLoad: loading sample sampleID=3
V/SoundPool﹕ Start decode
V/MediaPlayer﹕ decode(50, 123932, 536)
V/SoundPool﹕ close(50)
E/SoundPool﹕ Unable to load sample: (null)
上述错误导致SoundPool稍后尝试使用这些" null"而不是生成致命异常。声音,这反过来可能导致手机锁定和/或丢失帧。 降低比特率并使用Audacity"添加沉默"延长声音文件时间的效果解决了这个问题。
与上述症状相反,成功的SoundPool加载在logcat中如下所示:
V/SoundPool﹕ load: fd=55, offset=765700, length=3534, priority=1
V/SoundPool﹕ create sampleID=7, fd=56, offset=3534, length=765700
V/SoundPool﹕ doLoad: loading sample sampleID=7
V/SoundPool﹕ Start decode
V/MediaPlayer﹕ decode(56, 765700, 3534)
V/SoundPool﹕ close(56)
V/SoundPool﹕ pointer = 0x5f464000, size = 6976, sampleRate = 8000, numChannels = 2
如果您正在加载多个声音(这是SoundPool的目的),请记下您的sampleID
值,因为它们告诉哪个声音文件无法加载,第一个声音文件加载为sampleID=1
,依此类推。这有助于我区分"坏"来自"好" .WAV文件。
请注意,我有 不 在运行Android Kitkat的LG和三星的其他几个平台上出现此问题,这会成功加载更高比特率和短声音文件。