반응형

회의할 때 녹음을 하거나 또는 중요한 순간을 녹음하게 되는 일이 종종 생깁니다.

녹음한 파일은 보통 SD카드에 저장하게 되며 녹음한 파일을 듣기 위한 재생 기능을 함께 사용하는 경우가 많습니다.

특히 전화 통화를 하거나 앱에서 사용자가 어떤 기능을 사용하려 할 때 녹음 기능을 같이 실행시키는 경우가 생길 수 있습니다.

따라서 녹음 기능을 부가 기능으로 생각할 수 있으며 기본적인 녹음 방법은 알아두는 것이 좋습니다.

어떻게 녹음할 수 있는지 알아봅시다.



미디어리코더

마이크로 입력되는 음성을 녹음할 때는 미디어리코더(MediaRecorder) 객체가 사용됩니다.

다음 과정을 거쳐 녹음할 수 있습니다.

  1. 미디어리코더 객체 생성
  2. 오디오 입력 및 출력 형식 설정
  3. 오디오 인코더와 파일 지정
  4. 녹음 시작


녹음하기

소스 코드에서는 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 화면의 설정을 바꾸어 사용할 수 있습니다.




반응형

'안드로이드 개발 > 부스트코스(안드로이드 프로그래밍)' 카테고리의 다른 글

스레드 애니메이션  (0) 2019.04.02
리싸이클러뷰  (0) 2019.03.30
동영상 재생하기  (0) 2019.03.29
음악 재생하기  (0) 2019.03.29
사진 찍어 저장하기  (0) 2019.03.28
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기