Android 对播放的声音池调用仅在错误日志中产生结果
当我将SoundPool实例移动到单独的线程和类时,遇到了一个问题 没有声音播放,尽管所有流和状态标志都成功 我在错误日志中得到以下输出:Android 对播放的声音池调用仅在错误日志中产生结果,android,soundpool,Android,Soundpool,当我将SoundPool实例移动到单独的线程和类时,遇到了一个问题 没有声音播放,尽管所有流和状态标志都成功 我在错误日志中得到以下输出: D/chris﹕ before play E/AudioPolicyManagerBase﹕ getOutput() IOProfile is null. E/AudioPolicyManagerBase﹕ getOutput() IOProfile is null. E/AudioPolicyManagerBase﹕ getOutput() IOProfi
D/chris﹕ before play
E/AudioPolicyManagerBase﹕ getOutput() IOProfile is null.
E/AudioPolicyManagerBase﹕ getOutput() IOProfile is null.
E/AudioPolicyManagerBase﹕ getOutput() IOProfile is null.
D/libc﹕ pt_debug : pthread_create->start_routine=0x402c8509, tls=0x55c6ff00, arg=0x512c4370
D/libc﹕ pt_debug : __thread_entry->func=0x402c8509 , tls=0x55c6ff00, arg=0x512c4370
D/chris﹕ after play
有人知道这些错误表明了什么吗
public class SoundPoolFactory extends Thread {
public SoundPool soundPool;
public HashMap<String, AssetFileDescriptor> soundLoadList = new HashMap<String, AssetFileDescriptor>();
public void run()
{
Looper.prepare();
looper = Looper.myLooper();
soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0);
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
soundLoaded.release();
}
});
Iterator iterator = soundLoadList.entrySet().iterator();
while (iterator.hasNext())
{
Map.Entry entry = (Map.Entry)iterator.next();
loadSound((AssetFileDescriptor)entry.getValue(), (String)entry.getKey());
}
Looper.loop();
}
public void loadSound(AssetFileDescriptor assetFile, String soundIndex)
{
try {
soundIndexes.put(soundIndex, soundPool.load(assetFile, 1));
} catch (Exception e)
{
StringWriter writer = new StringWriter();
PrintWriter printWriter = new PrintWriter( writer );
e.printStackTrace(printWriter);
printWriter.flush();
Log.e("chris", writer.toString());
}
}
public SoundPool getSoundPoolInstance()
{
try {
Log.d("chris", "before play");
soundPool.play(1, 1.0f, 1.0f,1,0,1.0f);
Log.d("chris", "after play");
return soundPool;
}
catch (Exception e)
{
StringWriter writer = new StringWriter();
PrintWriter printWriter = new PrintWriter( writer );
e.printStackTrace(printWriter);
printWriter.flush();
Log.e("chris", writer.toString());
}
return null;
}
}
公共类SoundPoolFactory扩展线程{
公共声池声池;
public HashMap soundLoadList=new HashMap();
公开募捐
{
Looper.prepare();
looper=looper.myLooper();
soundPool=新的soundPool(3,AudioManager.STREAM_MUSIC,0);
soundPool.setOnLoadCompleteListener(新的soundPool.OnLoadCompleteListener(){
@凌驾
public void onLoadComplete(声音池声音池,int-sampleId,int-status){
soundLoaded.release();
}
});
迭代器迭代器=soundLoadList.entrySet().Iterator();
while(iterator.hasNext())
{
Map.Entry=(Map.Entry)迭代器.next();
loadSound((AssetFileDescriptor)entry.getValue(),(String)entry.getKey());
}
loop.loop();
}
公共void loadSound(AssetFileDescriptor assetFile,String soundIndex)
{
试一试{
soundIndex.put(soundIndex,soundPool.load(assetFile,1));
}捕获(例外e)
{
StringWriter编写器=新的StringWriter();
PrintWriter PrintWriter=新的PrintWriter(writer);
e、 printStackTrace(printWriter);
printWriter.flush();
Log.e(“chris”,writer.toString());
}
}
公共声音池getSoundPoolStance()
{
试一试{
日志d(“克里斯”,“赛前”);
声音池。播放(1,1.0f,1.0f,1,0,1.0f);
日志d(“克里斯”,“赛后”);
返回声池;
}
捕获(例外e)
{
StringWriter编写器=新的StringWriter();
PrintWriter PrintWriter=新的PrintWriter(writer);
e、 printStackTrace(printWriter);
printWriter.flush();
Log.e(“chris”,writer.toString());
}
返回null;
}
}
这个问题运气好吗?我在日志中看到了同样的错误。我真的记不起来了。我猜我已经解决了。请看这里: