录音和播放,但声音不会来?

时间:2011-11-01 12:21:23

标签: android recording

package com.Project_recording;

import java.io.File;
import java.io.IOException;

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class Project_recordingActivity extends Activity {
    private static final String APP_TAG = "com.hascode.android.soundrecorder";

    private MediaRecorder recorder = new MediaRecorder();
    private MediaPlayer player = new MediaPlayer();

    private Button btRecord;
    private Button btPlay;
    private TextView resultView;

    private boolean recording = false;
    private boolean playing = false;
    private File outfile = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        resultView = (TextView) findViewById(R.id.output);

        try {
            // the soundfile
            File storageDir = new File(Environment
                    .getExternalStorageDirectory(), "com.hascode.recorder");
            storageDir.mkdir();
            Log.d(APP_TAG, "Storage directory set to " + storageDir);
            outfile = File.createTempFile("hascode", ".3gp", storageDir);

            // init recorder
            recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
            recorder.setOutputFile(outfile.getAbsolutePath());

            // init player
            player.setDataSource(outfile.getAbsolutePath());
        } catch (IOException e) {
            Log.w(APP_TAG, "File not accessible ", e);
        } catch (IllegalArgumentException e) {
            Log.w(APP_TAG, "Illegal argument ", e);
        } catch (IllegalStateException e) {
            Log.w(APP_TAG, "Illegal state, call reset/restore", e);
        }

        btRecord = (Button) findViewById(R.id.btRecord);
        btRecord.setOnClickListener(handleRecordClick);

        btPlay = (Button) findViewById(R.id.btPlay);
        btPlay.setOnClickListener(handlePlayClick);

    }

    private final OnClickListener handleRecordClick = new OnClickListener() {
        @Override
        public void onClick(View view) {
            if (!recording) {
                startRecord();
            } else {
                stopRecord();
            }
        }
    };

    private final OnClickListener handlePlayClick = new OnClickListener() {
        @Override
        public void onClick(View view) {
            if (!playing) {
                startPlay();
            } else {
                stopPlay();
            }
        }
    };

    private void startRecord() {
        Log.d(APP_TAG, "start recording..");
        printResult("start recording..");
        try {
            recorder.prepare();
            recorder.start();
            recording = true;
        } catch (IllegalStateException e) {
            Log
                    .w(APP_TAG,
                            "Invalid recorder state .. reset/release should have been called");
        } catch (IOException e) {
            Log.w(APP_TAG, "Could not write to sd card");
        }
    }

    private void stopRecord() {
        Log.d(APP_TAG, "stop recording..");
        printResult("stop recording..");
        recorder.stop();
        recorder.reset();
        recorder.release();
        recording = false;
    }

    private void startPlay() {
        Log.d(APP_TAG, "starting playback..");
        printResult("start playing..");
        try {
            playing = true;
            player.prepare();
            player.start();
        } catch (IllegalStateException e) {
            Log.w(APP_TAG, "illegal state .. player should be reset");
        } catch (IOException e) {
            Log.w(APP_TAG, "Could not write to sd card");
        }
    }

    private void stopPlay() {
        Log.d(APP_TAG, "stopping playback..");
        printResult("stop playing..");
        player.stop();
        player.reset();
        player.release();
        playing = false;
    }

    private void printResult(String result) {
        resultView.setText(result);
    }
}

当我按下录制按钮时,Is开始录制。当我按下播放按钮时,它开始播放。当我再次按下播放按钮时,我停止播放。我面临的重要问题是听不到声音......?请帮我一个忙。我是android的新手..

1 个答案:

答案 0 :(得分:0)

为什么要在录制后立即重置录制器对象。