2

SoundPool クラスを使用して再生速度エフェクトを作成したいと考えています。サウンドを高速または低速で再生します (1x、0.5x、2x など)。しかし、問題は、soundpool が小さなファイルしか処理しないことです。大きなファイルを渡すとき。何も再生されません。音楽のストリーム (大きなオーディオ ファイルの数バイト) を読み込んで、soundpool 経由で再生できるかどうか疑問に思っていました。何か案が。??

これがsoundPoolが曲を再生するための私のコードです

AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = streamVolumeCurrent / streamVolumeMax;  
soundID = soundPool.load(Environment.getExternalStorageDirectory()+"/cm.mp3", 1);
soundPool.play(soundID, volume, volume, 1, 0, 1.0f);

JetPlayer および AudioTrack クラスを見つけましたが、これを処理するための適切なチュートリアルが見つかりません。

4

1 に答える 1

1

ファイルを再生する前に、 SoundPool.setOnLoadCompleteListenerを使用して、ファイルが正常にロードされていることを確認する必要があります。

public void loadSound (String strSound, int stream) {
     boolean loaded = false;
     mSoundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId,
                    int status) {
                loaded = true;
            }
        });
    try {
          stream= mSoundPool.load(aMan.openFd(strSound), 1);
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
   // Is the sound loaded already?
   if (loaded) {
     mSoundPool.play(stream, streamVolume, streamVolume, 1, LOOP_1_TIME, 1f);
    }
}

マンがいる場所

AssetFileDescriptor aMan =  getAssets();
于 2013-02-08T05:42:31.177 に答える