SoundPool:创建AudioTrack时出错

Pri*_*alj 18 android audacity bitrate soundpool

我在使用SoundPool时遇到问题,因为它拒绝使用我的.ogg文件.我收到此错误:

AudioFlinger无法创建曲目,状态:-12
创建AudioTrack时出错

我找到了一个关于这个问题的线索,(可能的)答案是:

  • 确保使用具有恒定比特率的.ogg媒体文件!

是这样的吗?(有人请确认或取消)
如果是 - 使用哪个应用程序(Audacity不支持.ogg自定义导出设置).
如果不是 - 还有什么可能是错的?

作为旁注 - 在我使用MediaPlayer之前,但现在我想播放一些并行的声音.

tom*_*101 16

主要编辑:找到一个固定你的日子的方法!滚动下面!!

我和你在同一条船上.在阅读之前,我必须告诉您,我未能提供可以解决此问题的答案.

我已经看过很多关于SoundPool的Stack Overflow主题,但是我没有看到很多与Android书中的Java代码相关的SoundPool问题:

AudioTrack:AudioFlinger无法创建曲目,状态为-12.
SoundPool:创建AudioTrack时出错.

这是从这里提供的Beginning Android 4游戏开发源代码剪下的代码(见下文).你在那里得到了explosion.ogg文件(在trunk中,找到第4章的/ asset文件夹--Android Basics).您必须单击右侧的"查看原始文件"才能获取该文件.

我所做的只是将源代码直接复制到Eclipse中,并将trunk提供的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时出错

我知道自从Android 1.0以来,SoundPool在API级别1存在.即使我有SoundPool工作的证据(视频链接,第二个),SoundPool也不应该有任何失败的原因.

这些是我的发现,可能会或可能不会以一种好的方式帮助其他人.简而言之,你并不孤单.

资源:

  1. http://code.google.com/p/beginning-android-games/source/browse/trunk/ch04-android-basics/src/com/badlogic/androidgames/SoundPoolTest.java
  2. http://www.youtube.com/watch?v=ioGWpu8Ud7A

编辑:我能够从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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我做的是重构我的代码.我从Youtube视频链接中的一条评论中了解到了这一提示,其中评论的作者名为"ErichLancaster".所有的积分都归他所有.我希望这能帮到你.

我还将Android模拟器分辨率大小设置为QVGA,如果它真的重要或不重要.