1

我正在尝试完成这本书关于 android 编程的工作,其中一个示例是如何使用 SoundPool 播放声音。

但是它总是在 LogCat 中给我同样的错误:

AudioFlinger could not create track, status -12.

我用谷歌搜索了这个错误,对其他人来说似乎是因为试图播放太多声音。但是我的第一次尝试播放声音时失败了。使用 MediaPlayer 时出现同样的错误。有什么我没有在 AVD 中正确设置的吗?音频播放支持已开启。

我也将它加载到我的手机上,它工作正常。它只在模拟器中失败。显然这是由于模拟器中的一个错误,如果启用快照,声音将不会播放。

创建了一个新的 AVD,它可以工作,但是声音很不稳定。这是正常的吗?

public class SoundPoolTest extends Activity implements OnTouchListener {
    SoundPool soundPool;
    int explosionId = -1;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView textView = new TextView(this);
        textView.setOnTouchListener(this);
        setContentView(textView);
        setVolumeControlStream(AudioManager.STREAM_MUSIC);
        soundPool = new SoundPool(20, AudioManager.STREAM_MUSIC, 0);
        try {
            AssetManager assetManager = getAssets();
            AssetFileDescriptor descriptor = assetManager
                    .openFd("explosion.ogg");
            explosionId = soundPool.load(descriptor, 1);
        } catch (IOException e) {
            textView.setText("Couldn't load sound effect from asset, "
                    + e.getMessage());
        }
    }
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            if (explosionId != -1) {
                soundPool.play(explosionId, 1, 1, 0, 0, 1);
            }
        }
        return true;
    }
}
4

1 回答 1

1

很抱歉看到这个问题这么久没有答案。我已经在 Windows 和 Linux 上遇到这个错误好几个月了,甚至在虚拟机中也是如此。只需在没有快照的情况下启动,现在它并没有慢很多。我通常每隔几天启动一个模拟器,但每隔几分钟启动一个应用程序。有一种方法可以使用 Virtual box 运行 Android VM 并在此处通过 ADB 连接它:http: //dev.blogs.nuxeo.com/2011/10/speeding-up-the-android-emulator.html 因此,速度是好多了,因为它是 x86 虚拟化的,而不是 x86 上的 ARM。

于 2012-07-24T20:37:38.890 回答