1. 程式人生 > >AudioManager 錄音 然後儲存在本地及播放

AudioManager 錄音 然後儲存在本地及播放

呼叫系統的AudioManager 錄音 然後儲存在本地,點選播放錄音
一個類搞定所有

需要許可權:

package com.example.savesound;

import java.io.IOException;

import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
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.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends Activity {
private static final String LOG_TAG = “MainActivity”;
private static String mFileName = null;

private RecordButton mRecordButton = null;
private MediaRecorder mRecorder = null;

private PlayButton mPlayButton = null;
private MediaPlayer mPlayer = null;

private void onRecord(boolean start) {
	if (start) {
		startRecording();
	} else {
		stopRecording();
	}
}

private void onPlay(boolean start) {
	if (start) {
		startPlaying();
	} else {
		stopPlaying();
	}
}


private static final int a = 0;

private void startPlaying() {
	mPlayer = new MediaPlayer();
	try {
		mPlayer.setDataSource(mFileName);
		mPlayer.prepare();
		AudioManager audioManager = (AudioManager) this.getSystemService(this.AUDIO_SERVICE);
		audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 10, 0);
		mPlayer.start();
	} catch (IOException e) {
		Log.e(LOG_TAG, "prepare() failed");
	}
}

private void stopPlaying() {
	mPlayer.release();
	mPlayer = null;
}

private void startRecording() {
	mRecorder = new MediaRecorder();
	mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
	mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
	mRecorder.setOutputFile(mFileName);
	mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

	try {
		mRecorder.prepare();
	} catch (IOException e) {
		Log.e(LOG_TAG, "prepare() failed");
	}

	mRecorder.start();
}

private void stopRecording() {
	mRecorder.stop();
	mRecorder.release();
	mRecorder = null;
}

class RecordButton extends Button {
	boolean mStartRecording = true;

	OnClickListener clicker = new OnClickListener() {
		public void onClick(View v) {
			onRecord(mStartRecording);
			if (mStartRecording) {
				setText("停止記錄");
			} else {
				setText("開始記錄");
			}
			mStartRecording = !mStartRecording;
		}
	};

	public RecordButton(Context ctx) {
		super(ctx);
		setText("開始記錄");
		setOnClickListener(clicker);
	}
}

class PlayButton extends Button {
	boolean mStartPlaying = true;

	OnClickListener clicker = new OnClickListener() {
		public void onClick(View v) {
			onPlay(mStartPlaying);
			if (mStartPlaying) {
				setText("停止播放");
			} else {
				setText("開始播放");
			}
			mStartPlaying = !mStartPlaying;
		}
	};

	public PlayButton(Context ctx) {
		super(ctx);
		setText("開始播放");
		setOnClickListener(clicker);
	}
}

public MainActivity() {
	mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
	mFileName += "/audiorecordtest.amr";
}

@Override
public void onCreate(Bundle icicle) {
	super.onCreate(icicle);

	LinearLayout ll = new LinearLayout(this);
	mRecordButton = new RecordButton(this);
	ll.addView(mRecordButton, new LinearLayout.LayoutParams(
			ViewGroup.LayoutParams.WRAP_CONTENT,
			ViewGroup.LayoutParams.WRAP_CONTENT, 0));
	mPlayButton = new PlayButton(this);
	ll.addView(mPlayButton, new LinearLayout.LayoutParams(
			ViewGroup.LayoutParams.WRAP_CONTENT,
			ViewGroup.LayoutParams.WRAP_CONTENT, 0));
	setContentView(ll);
}

@Override
public void onPause() {
	super.onPause();
	if (mRecorder != null) {
		mRecorder.release();
		mRecorder = null;
	}

	if (mPlayer != null) {
		mPlayer.release();
		mPlayer = null;
	}
}

}