我对SoundPool有一个问题,因为它拒绝处理我的.ogg文件。我得到了这个错误:
AudioFlinger could not create track, status: -12
Error creating AudioTrack我找到了一个关于这个的线程,(可能的) 回答是:
确保使用具有恒定比特率的.ogg媒体文件!
是这种情况吗?如果是-使用哪个应用程序(奥多特不支持.ogg自定义导出设置)。如果没有-还有什么问题吗?
顺便提一句--在我使用MediaPlayer之前,我想播放几个类似的声音。
发布于 2012-03-15 16:37:58
专业编辑:找到一个方法来弥补你的一天!向下滚动!!
我和你在同一条船上。在阅读之前,我必须让你知道我没有给出一个能解决这个问题的答案。
我已经看到了许多关于SoundPool的堆栈溢出主题,但是我还没有看到与SoundPool相关的大量SoundPool问题--这涉及到一本安卓书中的Java代码:
AudioTrack: AudioFlinger无法创建跟踪,状态-12. SoundPool:创建AudioTrack时出错。
下面是从Android 4游戏开发源代码开始的代码片段(见下文)。您可以在那里获得explosion.ogg文件(在主干中,查找第4章- Android的/asset文件夹)。您必须单击右侧的“查看原始文件”才能获得该文件。
我所做的就是将源代码直接复制到Eclipse中,并将从主干提供的explosion.ogg文件添加到我的项目中。我执行了Android仿真器,尝试播放该文件,我可以告诉您,我仍然得到上面引用的相同的Logcat错误。
一个人在Youtube上提供了一段视频,说SoundPool正常工作。视频链接如下所示。我做了视频告诉我的代码,我抓取了我从上面提供的第二个链接获得的相同的explosion.ogg文件。我仍然会发现这些错误:
03-13 05:17:10.143: E/AudioTrack(3370):AudioFlinger无法创建轨道,状态:-12 03-13 05:17:10.143: E/SoundPool(3370):创建AudioTrack错误
我知道SoundPool从Android1.0开始就存在于API 1级,即使我有证据证明SoundPool可以工作(视频链接,第二条),也不应该有任何理由让SoundPool不能工作。
这些都是我的发现,可能对他人有帮助,也可能没有好处。总之,你不是一个人在这里。
来源:
编辑:我能播放来自SoundPool的声音。
这是我的密码:
package nttu.edu.test;
import nttu.edu.R;
import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class SoundPoolTest extends Activity implements OnClickListener {
SoundPool soundPool = null;
int explosionId = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView v = new TextView(this);
v.setOnClickListener(this);
setContentView(v);
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
v.setText("Click anywhere to play the sound.");
}
protected void onResume() {
super.onResume();
if (soundPool == null) {
soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
explosionId = soundPool.load(this, R.raw.explosion, 1);
}
}
protected void onPause() {
super.onPause();
if (soundPool != null) {
soundPool.release();
soundPool = null;
}
}
public void onClick(View v) {
if (explosionId != 0)
soundPool.play(explosionId, 1, 1, 0, 0, 1);
}
}我做的是重构我的代码。我从Youtube视频链接中的一条评论中学到了这个技巧,在这个链接中,评论的作者以"ErichLancaster“的名字命名。所有的功劳都归他。我希望这能帮到你。
我还将Android仿真器分辨率设置为QVGA,不管是否重要。
发布于 2012-07-16 02:53:45
对于我来说,状态-12是由于在实例化SoundPool时指定了太多的通道而导致的。因此,它可能只是内存不足,试图保持太多的频道在周围。
发布于 2012-04-06 15:07:27
最近我遇到了这个错误。我的一次碰撞实际上是在一个循环中多次发生,所以它实际上会叠加声音,直到它们退出,这会导致错误,但它会继续播放。我修正了这一点,当它发生时,将弹跳记录为1。
// bouncecount=
// 0=no bounce
// 1=set when bounce occurs and plays the sound
// 21=reset由于游戏运行速度约为60 bit,这只允许每秒3次声音的一个实例,并且可以通过更改20轻松地调整。这不仅减少了游戏中的抖动,而且一点也不明显。
if(bouncecount==1){
sounds.play(sbump,1,1, 0, 0, 1);bouncecount++;}
else{if(bouncecount<20&&bouncecount!=0){bouncecount++;}
else{bouncecount=0;}}希望这能帮上忙。
https://stackoverflow.com/questions/9599059
复制相似问题