android - 从原始文件夹加载声音文件

标签 android audio resources soundpool

我在使用 Android 设备播放声音时遇到问题,我尝试使用 MediaPlayer:

final MediaPlayer mp1 = MediaPlayer.create(this, R.raw.beep1);
mp1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) { mp.release(); }
});
btn1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        soundPool.play(sound, 1.0f, 1.0f, 0, 0, 1.0f);
        mp1.start();
    }
});

出现错误的地方:

11-25 00:16:24.803: E/AudioFlinger(134): no more track names available
11-25 00:16:24.803: E/AudioTrack(134): AudioFlinger could not create track, status: -12
11-25 00:16:24.803: E/AudioSink(134): Unable to create audio track
11-25 00:16:24.803: E/MediaPlayer(2538): error (-19, 0)
11-25 00:16:24.813: E/MediaPlayer(2538): Error (-19,0)

我也尝试过使用 SoundPool:

final SoundPool soundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
final int sound = soundPool.load(this, R.raw.beep1, 1);
btn1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        soundPool.play(sound, 1.0f, 1.0f, 0, 0, 1.0f);
        mp1.start();
    }
});

具有相似的输出:

11-25 00:29:12.163: E/AudioFlinger(134): no more track names available
11-25 00:29:12.163: E/AudioTrack(3355): AudioFlinger could not create track, status: -12
11-25 00:29:12.163: E/SoundPool(3355): Error creating AudioTrack

我在指定资源方面做错了什么吗?我没有在任何地方声明它(这段代码是所有与声音相关的代码),因为我没有看到它在任何地方被提及。

文件 beep1.wav 位于 res/raw(我手动创建文件夹并将文件粘贴到那里)。

编辑:完整代码:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn1 = (Button)findViewById(R.id.sound_btn);
        final MediaPlayer mp1 = MediaPlayer.create(this, R.raw.beep1);
        setVolumeControlStream(AudioManager.STREAM_MUSIC);
        mp1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) { 
                mp.release();
            }
        });
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mp1.start();
            }
        });
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

最佳答案

问题是手机上的可用空间(我包含了两个声音文件,其中一个很大(5MB),删除后声音播放正常)。

关于android - 从原始文件夹加载声音文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20183095/

相关文章:

android - Mapbox:机动后隐藏遍历路线

android - 关闭应用程序后永久存储布局更改

audio - 如何从 freeswitch 调用电话并在目的地接听电话后播放文件?

C# - 从资源中读取和显示 HTML

android - RecyclerView避免重新加载项目?

java - 录制音乐应用程序的声音

javascript - 音频不工作

android - 如何轻松地从发布 APK 中添加的库中删除不必要的本地化资源

android - 从 Android 库项目访问资源?

java - @RecentlyNonNull 注释是什么?