使用 SoundPool 播放声音

Posted

技术标签:

【中文标题】使用 SoundPool 播放声音【英文标题】:Play sound with SoundPool 【发布时间】:2011-06-18 14:36:14 【问题描述】:

我需要在我的应用程序中播放一个简短的声音。我编写了以下代码,但我的三星手机没有声音并且出现奇怪的振动。但与此同时,这段代码在我的安卓模拟器上运行良好。我的代码是:

package com.samplers;

import android.app.Activity;
import android.media.SoundPool;
import android.media.AudioManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class FixVibroActivity extends Activity 
    /** Called when the activity is first created. */

    private Button white;
    private SoundPool spool;
    private int soundID;

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
        spool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
        soundID = spool.load(this, R.raw.error, 1);

        white = (Button)findViewById(R.id.whiteBtn);
        white.setOnClickListener(new View.OnClickListener() 
            public void onClick(View v) 
                Sound();
            
        );
    

    public void Sound()
        AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
        float volume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        spool.play(soundID, volume, volume, 1, 0, 1f);
    ;

请帮我解决这个问题!先感谢您! :)

【问题讨论】:

你能检查一下 logcat 是否打印出任何有趣的错误吗? 【参考方案1】:

您的音量控制或声音文件播放正确可能存在问题:如果您将Sound() 函数更改为此,它会做什么?如果您的手机没有正确处理R.raw.error 文件格式,但模拟器却正确处理,那就很奇怪了。

public void Sound()
        AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
        float volume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
        android.util.Log.v("SOUND","["+volume+"]["+spool.play(soundID, volume, volume, 1, 0, 1f)+"]");
    ;

【讨论】:

感谢您的重播!问题已经解决了! :) 我将文件格式从 *.ogg 更改为 *.wav 和宾果游戏!!!! :) 感谢帮助! :) 啊,手机不支持ogg,但模拟器支持。很高兴知道。以为可能是文件格式。 手机支持这种格式。这个文件是用 MediaPlayer 播放的,但只播放了一次,之后就没有声音了。无论如何对我来说是个好消息:) 再次感谢! :) 啊,我的错误:SoundPool/Audiotrack 需要 PCM 数据,这是 wav 给你的。 MediaPlayer 对 ogg 进行解码,但 SoundPool 没有。 我明白了,现在一切都清楚了!!!我将把这些信息考虑到我未来的工作中。谢谢。 :)

以上是关于使用 SoundPool 播放声音的主要内容,如果未能解决你的问题,请参考以下文章

使用 SoundPool 播放声音

如何使用 SoundPool 播放随机声音?

Android SoundPool 不播放声音

为啥我的 SoundPool 声音第一次在 Android 上没有播放?

Android 编程 - 如何从广播接收器播放 SoundPool 声音?

如何在特定时间段内使用 SoundPool 同时播放声音