我在Android Market上有一个应用程序,并且一直在使用SoundPool类来获得音效.我注意到,在Android API的所有部分中,这似乎给我带来了最多的问题.例如:
HTC Desire在播放WAV文件时遇到问题(这会导致它随机锁定).使用.ogg文件修复此问题
在Droid上,如果超过init设置调用中的通道数:
mSoundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 0);
手机会锁定.如果你能想象调试的难度那么大!在我不拥有的手机上.它需要我的客户提供很多无私的帮助.将'4'改为'16'消除了这个问题.我毫不怀疑,如果同时播放16种声音,它仍然会崩溃.值得庆幸的是,这种可能性很低.
我现在已将声音管理器更改为使用MediaPlayer.这似乎现在很好.我只是想知道是否有其他开发人员遇到这些问题?
AudioFlinger似乎在任何给定时间都可以播放高达 1 Mb 的音频。如果超过此限制,则会发生堆错误。这个猜测是基于我在AudioFlinger源代码中找到的一些代码:
AudioFlinger::Client::Client(const sp<AudioFlinger>& audioFlinger, pid_t pid)
: RefBase(),
mAudioFlinger(audioFlinger),
mMemoryDealer(new MemoryDealer(1024*1024)),
mPid(pid)
{
// 1 MB of address space is good for 32 tracks, 8 buffers each, 4 KB/buffer
}
Run Code Online (Sandbox Code Playgroud)
和这个:
size_t size = sizeof(audio_track_cblk_t);
size_t bufferSize = frameCount*channelCount*sizeof(int16_t);
if (sharedBuffer == 0) {
size += bufferSize;
}
mCblkMemory = client->heap()->allocate(size);
if (mCblkMemory != 0) {
...
} else {
LOGE("not enough memory for AudioTrack size=%u", size);
client->heap()->dump("AudioTrack");
}
Run Code Online (Sandbox Code Playgroud)
还有其他人更了解情况吗?
| 归档时间: |
|
| 查看次数: |
7340 次 |
| 最近记录: |