1

Droid X2 で MediaRecorder を使用してオーディオを録音しようとしていますが、問題が発生しています。MediaRecorder は問題なく録音を準備して開始しているようですが、録音を停止して生成されたファイルを聴こうとすると、すぐに再生が停止します。標準のメディア プレーヤー アプリでオーディオ ファイルを開こうとしても、すぐに停止します。

記録に使用しているコードは次のとおりです。

mCurrentRecordingFilePath = mContext.getExternalFilesDir(null).getAbsolutePath() + File.separator + fileName;

mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
mRecorder.setOutputFile(mCurrentRecordingFilePath);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
// mRecorder.setAudioEncodingBitRate(16);
// mRecorder.setAudioSamplingRate(44100);

try {
    mRecorder.prepare();
    mIsPrepared = true;
} catch (IOException e) {
    Log.e("Test", "MediaRecorder prepare() failed");
    e.printStackTrace();
}
if (mRecorder != null && mIsPrepared) {
    mRecorder.start();
    mIsRecording = true;
    Log.i("Test", "Started audio capture: " + mCurrentRecordingFilePath);
}

setAudioEncodingBitRate()が失敗する原因となっていたため、この呼び出しをコメント アウトしprepare()、安全のために もコメント アウトしましたsetAudioSamplingRate()。利用可能な出力形式とオーディオ エンコーダーのすべての組み合わせを試しましたが、結果は常に同じです。例外は発生せず、空ではないファイルが作成されますが、正しく再生されません。

診断に役立つかどうかはわかりませんが、記録を停止するために使用するコードは次のとおりです。

if (mRecorder != null && mIsRecording) {
    mRecorder.stop();
    mRecorder.release();
    mRecorder = null;
    mIsPrepared = false;
    mIsRecording = false;
    Log.i("Test", "Stopped audio capture");
}

記録コードは、Galaxy Nexus、Nexus S、EVO 4G、Galaxy SII で正常に動作します。私のオーディオ ファイルが Droid X2 で問題になる理由を教えてください。

4

1 に答える 1

0

ここで答えが見つかりました:MediaPlayerはプログラムデータフォルダからオーディオファイルを再生できませんか?

問題は録音ではなく、MediaPlayerのデータソースを設定する方法でした。ストックメディアプレーヤーアプリがファイルを再生しない理由はわかりませんが...おそらくそれは許可されたものです。ファイルの再生に使用していたコードは次のとおりです。

mPlayer = new MediaPlayer();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setDataSource(fileName);
mPlayer.prepare();
mPlayer.start();

ファイルが外部ファイルディレクトリに保存されている場合に機能するコードは次のとおりです。

mPlayer = new MediaPlayer();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setDataSource((new FileInputStream(fileName)).getFD());
mPlayer.prepare();
mPlayer.start();
于 2012-08-14T19:24:50.410 に答える