미디어리코더
마이크로 입력되는 음성을 녹음할 때는 미디어리코더(MediaRecorder) 객체가 사용됩니다.
다음 과정을 거쳐 녹음할 수 있습니다.
- 미디어리코더 객체 생성
- 오디오 입력 및 출력 형식 설정
- 오디오 인코더와 파일 지정
- 녹음 시작
녹음하기
소스 코드에서는 MediaRecorder 객체를 만들고 몇 가지 설정을 진행한 후 start 메소드를 이용해 녹음을 시작합니다.
if (recorder == null) {
recorder = new MediaRecorder();
}
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
recorder.setOutputFile(RECORDED_FILE);
try {
recorder.prepare();
recorder.start();
} catch (Exception ex) {
Log.e("SampleAudioRecorder", "Exception : ", ex);
}
setAudioSource() 메소드는 오디오 입력을 설정할 때 사용되는데 여기에서는 마이크를 이용해 입력을 받으므로 MediaRecorder.AudioSource.MIC 상수로 설정합니다.
setOutputFormat() 메소드를 이용해 설정되는 미디어 포맷은 MediaRecoder.OutputFormat.MPEG_4 상수를 이용하여 MPEG4 포맷으로 지정합니다.
setAudioEncoder() 메소드는 인코더를 설정하는 데 사용되며, 디폴트 인코더를 사용하도록 지정합니다.
setOutputFile() 메소드는 결과물 파일을 설정하는데 사용되며 미리 정의한 RECORDED_FILE 상수를 이용해 지정되었습니다.
녹음을 위해 필요한 정보를 모두 설정하고 나면 두 개의 메소드, prepare()와 start()를 이용해 녹음을 시작합니다.
녹음한 파일의 저장
녹음을 끝내면 SD 카드에 저장할 수도 있고 단말의 저장소에 저장할 수도 있습니다.
내용 제공자를 이용해 저장하면 음성 파일을 저장할 때 사용하는 기본적인 사항들을 같이 설정할 수 있습니다.
ContentValues values = new ContentValues(10);
values.put(MediaStore.MediaColumns.TITLE, "Recorded");
values.put(MediaStore.Audio.Media.ALBUM, "Audio Album");
values.put(MediaStore.Audio.Media.ARTIST, "Mike");
values.put(MediaStore.Audio.Media.DISPLAY_NAME, "Recorded Audio");
values.put(MediaStore.Audio.Media.IS_RINGTONE, 1);
values.put(MediaStore.Audio.Media.IS_MUSIC, 1);
values.put(MediaStore.MediaColumns.DATE_ADDED, System.currentTimeMillis()/1000);
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp4");
values.put(MediaStore.Audio.Media.DATA, RECORDED_FILE);
Uri audioUri = getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values);
내용 제공자에 새로운 값을 추가하기 위해 ContentValues 객체에 필요한 정보를 put() 메소드로 넣은 후 insert() 메소드를 이용해 이 객체를 추가합니다.
이때 설정하는 정보들 중에서 MediaStore.MediaColumns.MIME_TYPE은 미디어 파일의 포맷을 의미합니다.
여기에서는 "audio/mp4"로 지정합니다.
MediaStore.MediaColumns.DATA의 경우에는 저장된 녹음 파일을 의미하며, 녹음 파일의 이름을 지정하면 됩니다.
미디어 앨범에서 음성 파일에 대한 내용 제공자의 URI는 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI이므로 ContentValues 객체를 추가할 때 이 URI를 사용합니다.
녹음하려면 RECORD_AUDIO 권한이 필요합니다.
또한 SD 카드에 접근하기 위한 두 가지 권한도 필요합니다.
AndroidManifest.xml 파일을 열고 다음과 같이 권한을 추가합니다.
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
에뮬레이터에서 녹음하고 싶다면 에뮬레이터의 Extended Controls 화면의 설정을 바꾸어 사용할 수 있습니다.
최근댓글