【发布时间】:2014-05-27 18:21:34
【问题描述】:
我正在制作一个简单的测试应用程序,它有四个按钮,开始录制、停止录制、播放和停止。
问题是我听不到任何录音,我什至不确定录音是否正在保存。
这是我的活动代码
public class MainActivity extends Activity {
private MediaPlayer mediaPlayer;
private MediaRecorder recorder;
private String OUTPUT_FILE;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
OUTPUT_FILE = Environment.getExternalStorageDirectory()+"/audiorecorder.3gpp";
}
public void buttonTapped (View view){
switch(view.getId()){
case R.id.btn_start_recording:
try{
beginRecording();
} catch (Exception e){
e.printStackTrace();
}
case R.id.btn_stop_recording:
try{
stopRecording();
} catch (Exception e){
e.printStackTrace();
}
case R.id.btn_play:
try{
playRecording();
} catch (Exception e){
e.printStackTrace();
}
case R.id.btn_stop:
try{
stopPlayback();
} catch (Exception e){
e.printStackTrace();
}
}
}
private void stopPlayback() {
if(mediaPlayer != null)
mediaPlayer.stop();
}
private void playRecording() throws Exception{
ditchMediaPlayer();
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(OUTPUT_FILE);
mediaPlayer.prepare();
mediaPlayer.start();
}
private void ditchMediaPlayer() {
if(mediaPlayer != null){
try{
mediaPlayer.release();
}catch(Exception e){
e.printStackTrace();
}
}
}
private void stopRecording() {
if(recorder != null)
recorder.stop();
}
private void beginRecording() throws Exception {
ditchMediaRecorder();
File outFile = new File(OUTPUT_FILE);
if(outFile.exists())
outFile.delete();
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
recorder.setAudioEncoder(MediaRecorder.getAudioSourceMax());
recorder.setAudioEncodingBitRate(16);
recorder.setAudioSamplingRate(44100);
recorder.setOutputFile(OUTPUT_FILE);
recorder.prepare();
recorder.start();
}
private void ditchMediaRecorder() {
//if we have the recorder, release it
if(recorder != null)
recorder.release();
}
}
我遇到的错误类型
04-13 15:07:56.618: W/System.err(2542): java.io.IOException: Prepare failed.: status=0x1
04-13 15:07:56.618: W/System.err(2542): at android.media.MediaPlayer.prepare(Native Method)
04-13 15:07:56.618: W/System.err(2542): at com.appulse.audiomate.MainActivity.playRecording(MainActivity.java:70)
04-13 15:07:56.628: W/System.err(2542): at com.appulse.audiomate.MainActivity.buttonTapped(MainActivity.java:46)
04-13 15:07:56.628: W/System.err(2542): at java.lang.reflect.Method.invokeNative(Native Method)
04-13 15:07:56.628: W/System.err(2542): at java.lang.reflect.Method.invoke(Method.java:515)
04-13 15:07:56.628: W/System.err(2542): at android.view.View$1.onClick(View.java:3818)
04-13 15:07:56.628: W/System.err(2542): at android.view.View.performClick(View.java:4438)
04-13 15:07:56.628: W/System.err(2542): at android.view.View$PerformClick.run(View.java:18422)
04-13 15:07:56.628: W/System.err(2542): at android.os.Handler.handleCallback(Handler.java:733)
04-13 15:07:56.628: W/System.err(2542): at android.os.Handler.dispatchMessage(Handler.java:95)
04-13 15:07:56.628: W/System.err(2542): at android.os.Looper.loop(Looper.java:136)
04-13 15:07:56.628: W/System.err(2542): at android.app.ActivityThread.main(ActivityThread.java:5017)
04-13 15:07:56.628: W/System.err(2542): at java.lang.reflect.Method.invokeNative(Native Method)
04-13 15:07:56.628: W/System.err(2542): at java.lang.reflect.Method.invoke(Method.java:515)
04-13 15:07:56.628: W/System.err(2542): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-13 15:07:56.628: W/System.err(2542): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-13 15:07:56.628: W/System.err(2542): at dalvik.system.NativeStart.main(Native Method)
04-13 15:07:56.628: E/MediaPlayer(2542): stop called in state 0
04-13 15:07:56.628: E/MediaPlayer(2542): error (-38, 0)
04-13 15:07:56.628: E/MediaPlayer(2542): Error (-38,0)
【问题讨论】:
标签: android audio android-mediaplayer audio-recording android-audiorecord