2012-08-14 77 views
1

我试图在Droid X2上使用MediaRecorder录制音频,而且我遇到了问题。 MediaRecorder似乎准备并开始录制就好了,但是当我停止录制并尝试收听制作的文件时,立即停止播放。即使我尝试打开标准媒体播放器应用程序中的音频文件,它也会立即停止播放。MediaRecorder录制糟糕的音频文件Droid X2

这里是我用来记录代码:我注释掉setAudioEncodingBitRate()调用,因为它是造成prepare()失败,而只是为了安全起见,我还评论了setAudioSamplingRate()

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); 
} 

。我已经尝试了可用的输出格式和音频编码器的每种组合,并且结果始终相同。我没有得到任何例外,并且创建了一个非空的文件,但它不能正常播放。

不知道这是否会帮助诊断,但这里是我用来停止记录代码:

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上不好?

+0

如果指定'OutputFormat.THREE_GPP'什么,'AudioEncoder.AMR_NB',一个频道,8000Hz?这仍然失败吗?你可以在你提到的任何其他手机上播放结果文件(由Droid X2录制)吗? – Michael 2012-08-14 18:07:46

+0

我能够使用'OutputFormat.THREE_GPP'和'AudioEncoder.AMR_NB'在我的Mac上播放该文件。我还发现,如果将路径设置为SD卡根目录而不是外部文件目录,则可以在X2上播放该文件。我真的想避免写在文件目录之外,因为我想在卸载应用程序时删除音频文件。 – BigFwoosh 2012-08-14 18:28:16

+0

在这里找到答案:http://stackoverflow.com/questions/3773262/mediaplayer-cant-play-audio-files-from-program-data-folder 问题不是录音,这是我的方式设置MediaPlayer的数据源。虽然我不知道为什么股票媒体播放器应用程序不会播放该文件...也许这是一个许可的事情。谢谢您的帮助! – BigFwoosh 2012-08-14 19:21:46

回答

0

在这里找到了答案:MediaPlayer cant play audio files from program data folder?

问题不在于记录,这是我设置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();