1

特定のイベントが発生したときに再生される効果音をロードしようとしています。

どういうわけか音は聞こえますが、ファイル全体が再生されず、途中でブレーキがかかります。

私のサウンドコード:

public class SoundManager {

    private Context context;
    private int nudgeSound = R.raw.nudge;


    public SoundManager(Context context)
    {
        this.context = context;
    }

    public void playNudgeSound()
    {           
        final MediaPlayer mediaPlayer = MediaPlayer.create(context, nudgeSound);

          mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

              @Override
              public void onCompletion(MediaPlayer mp) {
                  mediaPlayer.reset();
              }

          });   
          mediaPlayer.start();

    }
}

私の初期化:

    SoundManager soundManager = new SoundManager(this);
    soundManager.playNudgeSound();
4

2 に答える 2

3

数日間疑問に思い、多くの不満を感じた後、私の問題はMediaPlayer.create()がファイルをメモリにロードする時間があまりないことであることがわかりました... create()と開始が原因で発生しました()はほぼ同時に呼び出されました。

アプリケーションのロード中にすべてのサウンドファイルをロードし、必要なときにstart()を呼び出すことをお勧めします。ある種のSoundManagerクラスを構築します。

みんな、ありがとう !それが誰かを助けることを願っています!

于 2012-08-26T20:51:46.880 に答える
2

代わりにSoundPoolを使用することを検討したことがありますか?!私のアプリケーションでは、これは正常に機能します。

AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION);

SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_NOTIFICATION, 0);
int sound = soundPool.load(context, R.raw.beep, 1);
soundPool.play(sound, maxVolume, maxVolume, 1, 0, 1f);
于 2012-08-26T20:29:13.607 に答える