25

私は自分のアプリでSoundpoolを使用していますが、これまでのところうまく機能していますが、10秒のwavファイルがあります。残念ながら、soundpoolは最初の5秒しか再生しません。トラック全体を再生するサウンドプールを作成するにはどうすればよいですか?私はwavを--oggとmp3に変換しましたが、それでも同じ問題です。最初の5秒間だけ再生されます。どんな助けでも大歓迎です。

//set up audio player
mSoundPool = new SoundPool(20, AudioManager.STREAM_MUSIC, 0);
//load fx
mSoundPoolMap.put(RAW_1_1, mSoundPool.load(this, R.raw.loop1, 1));
//playing soundpool
case R.id.button1:          
mSoundPool.stop(mStream1);
mStream1= mSoundPool.play(mSoundPoolMap.get(RAW_1_1), streamVolume, streamVolume, 1, LOOP_1_TIME, 1f);

UPD Last:たぶん誰かがここでそれを見つけて読むでしょう。サウンドプールは5秒以上再生できないようです。これは彼の最大値です。より長いサウンドにはMediaPlayerを使用します。私のように多くの時間を費やさないことを願っています)

4

5 に答える 5

15

つまり、SoundPoolで1Mの制限に達したと思います。

SoundPoolは、バッファサイズを1Mとしてハードコーディングします。ロードされたすべてのファイルについて、pcm形式で保存します。

したがって、oggやwavは気にしません。

于 2012-11-23T15:46:06.740 に答える
12

短い効果音を再生するように設計されたSoundPool。音楽 (大きなオーディオ ファイル) を再生するには、 MediaPlayerを使用する必要があります

// R.raw.audio_file - res/raw/audio_file.mp3

mediaPlayer = MediaPlayer.create(this, R.raw.audio_file);
mediaPlayer.start();
于 2014-10-08T09:56:03.677 に答える
3

この活動は私のために働いています

public class MainActivity extends Activity {

    private Integer soundID;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
        // Load the sound
        AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
        float actualVolume = (float) audioManager
            .getStreamVolume(AudioManager.STREAM_MUSIC);
        float maxVolume = (float) audioManager
            .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        final float volume = actualVolume / maxVolume;

        SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);

        soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
          @Override
          public void onLoadComplete(SoundPool soundPool, int sampleId,
              int status) {
                      @Override
      public void onLoadComplete(SoundPool soundPool, int sampleId,
          int status) {
          soundPool.play(soundID, volume, volume, 1, 0, 1f);
          try {
            Thread.sleep(5000); // play twice
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
          soundPool.play(soundID, volume, volume, 1, 0, 1f);
      }
    });
          }
        });
        soundID = soundPool.load(this, R.raw.sound2, 1);
      //load fx
      //playing soundpool

    }
}

非同期のサウンドをロードし、オーディオ キャッシュをチェックする必要があります。オーバーフローする可能性があります。

この記事を読む http://www.google.by/url?http://www.vogella.com/articles/AndroidMedia/article.html

とても用心深い

于 2012-11-14T12:11:37.070 に答える