djc*_*535 5 android media-player amr mediarecorder
我正在编写一个应用程序,使用MediaRecorder以AMR格式记录来自麦克风的语音,然后使用MediaPlayer播放数据.
这无论如何都是目标.
我相信我的MediaRecorder方面正在工作,我正在以正确的数据速率在正确的位置生成数据文件.以下是我启动和停止MediaRecorder的方法
public void OnStartRecord(View v )
{
System.out.println( "StartRecord");
try {
audioFile = File.createTempFile("amrtmp", ".amr", getApplicationContext().getFilesDir());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println( "Recording to " + audioFile.getAbsolutePath());
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setAudioEncodingBitRate(4750);
mRecorder.setAudioSamplingRate(8000);
mRecorder.setOutputFile(audioFile.getAbsolutePath());
try {
mRecorder.prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
mRecorder.start();
}
public void OnStopRecord(View v )
{
System.out.println( "StopRecord");
mRecorder.stop();
mRecorder.release();
}
Run Code Online (Sandbox Code Playgroud)
这就像一个魅力.典型的输出是类似的
StartRecord
Recording to /data/data/com.test.playback/files/amrtmp-235967797.amr
Run Code Online (Sandbox Code Playgroud)
当我开始,然后停止录制我可以看到文件已经创建,并且其中有一定数量的数据与设置正确对应.
旁注:我发现扬声器发出奇怪的嗡嗡声.知道那是什么吗?
当我尝试播放文件但是我没有遇到麻烦.我尝试过以下方法:
public void OnPlay(View v )
{
MediaPlayer mPlayer = new MediaPlayer();
mPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
FileInputStream FIS = null;
try {
FIS = new FileInputStream(audioFile.getAbsolutePath());
mPlayer.setDataSource(FIS.getFD());
mPlayer.prepare();
}
catch( Exception e )
{
e.printStackTrace();
}
mPlayer.start();
}
Run Code Online (Sandbox Code Playgroud)
这导致MediaPlayer的以下输出完全没有播放:
start()mURI为null
我也尝试了相同的代码,但设置mPlayer的数据源的方式不同:
mPlayer.setDataSource(audioFile.getAbsolutePath());
Run Code Online (Sandbox Code Playgroud)
当使用java.io.IOException状态0x1调用prepare时,这会失败.
我不得不想象我还需要使用MediaPlayer来正确设置它.有什么建议?