1.1 MediaPlayer 객체 생성
- MediaPlayer player = new MediaPlayer ();
1.2 데이터 소스 (URL || 단말sd카드 || 프로젝트 파일에 포함(res,assets)) 지정
- player.setDataSource(filename);
1.3 준비
- player.prepare();
1.4 시작
- player.start();
2. 오디오 재생중지 주요순서
2.1 재생 중지
- player.stop();
2.2 재생에 사용됐던 메모리 해제
- player.release();
- player = null;
3. 오디오 녹음 주요순서
3.1 MediaRecorder 객체 생성
- MediaRecorder recorder = new MediaRecorder();
3.2 오디오 입력 및 출력 형식 설정
- recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
- recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
3.3 오디오 인코더와 파일 지정
- recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
3.4 녹음준비,시작
- recorder.prepare();
- recorder.start();
3.5 메니페스트에 권한 설정
<uses-permission android:name="android.permission.RECORD_AUDIO" />
4. 오디오 녹음중지 주요순서
4.1 녹음 중지
- recorder.stop();
4.2 녹음에 사용됐던 메모리 해제
- recorder.release();
- recorder = null;
5. 예제
android version = jelly bean
import java.io.File;
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.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {
// URL 오디오 파일 위치
// 웹 상에 있는 오디오 파일을 재생할때는 permission.WRITE_EXTERNAL_STORAGE 를 추가해야한다.
public static final String Audio_Url = "http://sites.google.com/site/ubiaccessmobile/dample_audio.amr";
// 녹음된 오디오 저장할 위치
// 내장 메모리를 사용하려면 permission.WRITE_EXTERNAL_STORAGE 를 추가해야한다.
// Environment.getExternalStorageDirectory()로 각기 다른 핸드폰의 내장메모리의 디렉토리를 알수있다.
final private static File RECORDED_FILE = Environment.getExternalStorageDirectory();
String filename;
// MediaPlayer 클래스에 재생에 관련된 메서드와 멤버변수가 저장어되있다.
MediaPlayer player;
// MediaRecorder 클래스에 녹음에 관련된 메서드와 멤버 변수가 저장되어있다.
MediaRecorder recorder;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button recordBtn = (Button) findViewById(R.id.recordBtn);
Button recordStopBtn = (Button) findViewById(R.id.recordStopBtn);
Button playBtn = (Button) findViewById(R.id.playBtn);
Button playStopBtn = (Button) findViewById(R.id.playStopBtn);
// 저장할 파일 위치를 String 으로 처리했다.
// RECORDED_FILE.getAbsolutePath() == /mnt/sdcard 뒤에 저장할 파일엔 '/' 가 필요하다.
filename =RECORDED_FILE.getAbsolutePath()+"/test.mp4";;
// 녹음 시작 버튼
recordBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (recorder != null) {
recorder.stop();
recorder.release();
recorder = null;
}
// 실험 결과 왠만하면 아래 recorder 객체의 속성을 지정하는 순서는 이대로 하는게 좋다 위치를 바꿨을때 에러가 났었음
// 녹음 시작을 위해 MediaRecorder 객체 recorder를 생성한다.
recorder = new MediaRecorder();
// 오디오 입력 형식 설정
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
// 음향을 저장할 방식을 설정
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
// 오디오 인코더 설정
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
// 저장될 파일 지정
recorder.setOutputFile(filename);
try {
Toast.makeText(getApplicationContext(), "녹음이 시작되었습니다.", Toast.LENGTH_LONG).show();
// 녹음 준비,시작
recorder.prepare();
recorder.start();
} catch (Exception ex) {
Log.e("SampleAudioRecorder", "Exception : ", ex);
}
}
});
// 녹음 중지 버튼
recordStopBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (recorder == null)
return;
// 녹음을 중지
recorder.stop();
// 오디오 녹음에 필요한 메모리를 해제한다
recorder.release();
recorder = null;
Toast.makeText(getApplicationContext(), "녹음이 중지되었습니다.", Toast.LENGTH_LONG).show();
}
});
// 오디오 플레이 버튼
playBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (player != null) {
player.stop();
player.release();
player = null;
}
Toast.makeText(getApplicationContext(), "녹음된 파일을 재생합니다.", Toast.LENGTH_LONG).show();
try {
// 오디오를 플레이 하기위해 MediaPlayer 객체 player를 생성한다.
player = new MediaPlayer ();
// 재생할 오디오 파일 저장위치를 설정
player.setDataSource(filename);
// 웹상에 있는 오디오 파일을 재생할때
// player.setDataSource(Audio_Url);
// 오디오 재생준비,시작
player.prepare();
player.start();
} catch (Exception e) {
Log.e("SampleAudioRecorder", "Audio play failed.", e);
}
}
});
// 오디오 재생 중지 버튼
playStopBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if (player == null)
return;
Toast.makeText(getApplicationContext(), "재생이 중지되었습니다.", Toast.LENGTH_LONG).show();
// 오디오 재생 중지
player.stop();
// 오디오 재생에 필요한 메모리들을 해제한다
player.release();
player = null;
}
});
}
protected void onPause() {
if (recorder != null) {
recorder.release();
recorder = null;
}
if (player != null) {
player.release();
player = null;
}
super.onPause();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
댓글 없음:
댓글 쓰기