4

サウンドを録音して再生するアプリを構築しようとしています。録音部分は完全に機能しますが、サウンドを再生しようとしても何もしません。デバッガーで実行し、オーディオを再生する手順を実行すると、機能します。すべてのブレークポイントを削除してプログラムをデバッグで実行すると、実行されません。

この問題はおそらく、バックグラウンドで実行され、オーディオを実行しようとする前に完了していないことが原因であると考えられますが、完全にはわかりません。

どんな助けでも大歓迎です。

ソースコードの関連部分を次に示します。

サウンドプールの作成

mSoundPool = new SoundPool(16, AudioManager.STREAM_MUSIC, 0);

サウンドプールからの再生

int soundId = mSoundPool.load(mAudioRecorder.stop(), 0);
if(soundId > 0){
    mSoundPool.play(soundId, 0.99f, 0.99f, 0, -1, 1.0f);
}

Audiorecorder.java 出力ファイルは .mp4

mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);


public String stop() throws IOException {
    mRecorder.stop();
    return mPath;
}
4

3 に答える 3

4

SoundPool.load(...)私は昨日同じ問題を抱えていました.RELEASEモードで適切に動作しない理由は、機能が実行されるのを待たなければならないという事実です.

SoundPool.play(...)関数で音楽を再生するアクティビティ/フラグメントを実行する前に、メニューアクティビティでサウンドをロードして解決しました。

DEBUGモードでは、アプリは機能を実行するのに多くの時間を費やしているSoundPool.load(...)ため、機能します。

于 2012-11-29T14:14:59.117 に答える
2

録音した音声を MediaPlayer で再生してみませんか。

mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
        mFileName += "audiorecordtest.MPEG_4";
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);


public String stop() throws IOException {
    mRecorder.stop();
    return mPath;
}

記録されたファイルを再生するには、次のコードを使用します。

mPlayer = new MediaPlayer();
             try {
                mPlayer.setDataSource(mFileName);
            } catch (IllegalArgumentException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IllegalStateException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
              try {
                mPlayer.prepare();
            } catch (IllegalStateException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            mPlayer.start();
于 2011-07-06T18:11:55.317 に答える