Android에서 MediaStore를 활용한 오디오 녹음 기능 구현하기
Android 애플리케이션에서 MediaStore
를 활용하여 오디오 녹음 기능을 구현하는 방법에 대해 알아보겠습니다. 이 포스팅에서는 MediaRecorder
를 사용해 오디오를 녹음하고, MediaStore
를 통해 녹음 파일을 저장하는 방법을 단계별로 설명합니다.
1. 기본 설정과 권한
먼저, Android 앱에서 오디오 녹음과 파일 저장을 위한 기본적인 권한 설정이 필요합니다. AndroidManifest.xml
에 다음 권한을 추가해야 합니다:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2. MediaRecorder 설정
오디오 녹음을 위해 MediaRecorder
클래스를 사용합니다. MediaRecorder
는 오디오 소스, 출력 형식, 오디오 인코더 등을 설정할 수 있으며, 파일 저장 경로도 지정합니다.
3. MediaStore를 이용한 파일 저장
Android 10(API 레벨 29) 이상에서는 MediaStore
API를 사용하여 파일을 공용 디렉토리에 저장합니다. 이를 통해 사용자의 미디어 라이브러리에 접근하고, 새로운 미디어 파일을 추가할 수 있습니다.
4. MainActivity 클래스
다음은 MainActivity
클래스의 코드입니다. 이 클래스는 UI 초기화, 녹음 시작 및 중지 버튼의 이벤트 처리, 녹음 파일 생성, MediaRecorder
설정 등의 기능을 포함합니다.
package com.example.recordexample;
// 필요한 임포트들...
public class MainActivity extends AppCompatActivity {
private MediaRecorder mediaRecorder;
private boolean isRecording = false;
private Uri fileUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initializeRecordingButtons();
}
private void initializeRecordingButtons() {
// 버튼 초기화 및 이벤트 리스너 설정
// ...
}
private void startRecording() {
// 녹음 시작
// ...
}
private void setupMediaRecorder() throws IOException {
// MediaRecorder 설정
// ...
}
private Uri createFileUri() throws IOException {
// MediaStore를 통해 파일 URI 생성
// ...
}
private String createFileName() {
// 파일 이름 생성
// ...
}
private void stopRecording() {
// 녹음 중지
// ...
}
}
5. 주요코드 설명
안드로이드 앱에서 오디오 녹음을 구현하는 데 중요한 세 가지 메소드는 startRecording
, setupMediaRecorder
, 그리고 createFileUri
입니다. 이들 메소드는 녹음을 시작하고, 미디어 레코더를 설정하며, 저장할 파일의 URI를 생성하는 데 필요합니다. 아래에서 각 메소드의 역할과 작동 방식에 대해 자세히 설명하겠습니다.
startRecording
startRecording
메소드는 실제로 녹음을 시작하는 기능을 합니다. 이 메소드는 녹음을 위한 파일 URI를 생성하고, MediaRecorder
를 초기화한 다음, 녹음을 준비하고 시작합니다.
private void startRecording() {
try {
fileUri = createFileUri(); // 녹음 파일 URI 생성
setupMediaRecorder(); // MediaRecorder 설정
mediaRecorder.prepare(); // 녹음을 준비합니다.
mediaRecorder.start(); // 녹음을 시작합니다.
isRecording = true; // 현재 녹음 중임을 나타내는 플래그를 true로 설정합니다.
} catch (IOException e) {
e.printStackTrace(); // IOException 발생 시 예외 출력
}
}
createFileUri
: 녹음 파일을 저장할 위치의 URI를 생성합니다.setupMediaRecorder
: 녹음에 필요한MediaRecorder
의 구성을 설정합니다.mediaRecorder.prepare()
와mediaRecorder.start()
: 녹음을 위한 준비를 하고 실제로 녹음을 시작합니다.
setupMediaRecorder
setupMediaRecorder
메소드는 MediaRecorder
객체의 다양한 설정을 구성합니다. 이 설정에는 오디오 소스, 출력 형식, 오디오 인코더, 출력 파일 경로 등이 포함됩니다.
private void setupMediaRecorder() throws IOException {
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 마이크를 오디오 소스로 설정
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); // 출력 형식 설정
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 오디오 인코더 설정
mediaRecorder.setOutputFile(getFileDescriptor(fileUri)); // 파일 디스크립터를 이용해 출력 파일 설정
}
MediaRecorder.AudioSource.MIC
: 마이크를 오디오 입력 소스로 사용합니다.MediaRecorder.OutputFormat.THREE_GPP
및MediaRecorder.AudioEncoder.AMR_NB
: 파일 형식과 인코더를 설정합니다.mediaRecorder.setOutputFile
: 녹음 데이터를 저장할 파일 위치를 지정합니다.
createFileUri
createFileUri
메소드는 MediaStore
를 사용하여 녹음 파일을 위한 콘텐츠 URI를 생성합니다. 이 URI는 녹음 파일이 실제로 저장될 경로를 나타냅니다.
private Uri createFileUri() throws IOException {
ContentValues values = new ContentValues();
values.put(MediaStore.MediaColumns.DISPLAY_NAME, createFileName()); // 파일 이름 설정
values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/3gpp"); // MIME 타입 설정
values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_MUSIC + "/RecordExample"); // 저장 경로 설정
Uri uri = getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values);
if (uri == null) {
throw new IOException("Failed to create new MediaStore record.");
}
return uri;
}
ContentValues
객체를 사용하여 파일에 대한 메타데이터를 설정합니다.getContentResolver().insert()
: 설정된 메타데이터를 바탕으로MediaStore
에 파일 정보를 추가하고, 해당 파일에 대한 URI를 반환합니다.
이 세 메소드는 안드로이드에서 오디오 녹음 기능을 구현하는 데 핵심적인 역할을 합니다. startRecording
은 실제
녹음을 시작하는 데 사용되며, setupMediaRecorder
는 녹음을 위한 필요한 설정을 제공하고, createFileUri
는 녹음 파일을 저장할 위치를 정의합니다.
6. 전체코드
전체 코드는 아래 github 를 참고합니다.
https://github.com/makepluscode/android-mic-recoder-example.git
테스트 화면 (갤럭시 S10 5G Android 12)
위 코드를 실제 하드웨어에서 실행 합니다.
이 포스팅에서 설명한 것 처럼 MediaRecorder
와 MediaStore
를 사용하면, 안드로이드 앱에서 사용자가 쉽게 오디오를 녹음하고 저장할 수 있습니다. 다만, 실제 앱에 이 코드를 통합하기 전에 사용자의 동의를 얻는 권한 요청 처리, 오류 처리, 사용자 인터페이스 개선 등을 고려해야 합니다.
'프로그래밍 > Android' 카테고리의 다른 글
안드로이드 Camera2 간단한 카메라 애플리케이션 만들기 (0) | 2023.12.16 |
---|---|
안드로이드 PCM data 녹음하고 재생하기 (0) | 2023.12.10 |
AndroidManifest와 build.gradle 의 API 버전 정보 (0) | 2023.12.02 |
안드로이드 앱 개발을 쉽게 시작해보기 2 (0) | 2023.10.07 |
안드로이드 앱 개발을 쉽게 시작해보기 1 (0) | 2023.10.07 |
안드로이드 adb device unauthorized 에러 (0) | 2022.10.18 |
[Android] 우분투 20.04 ppa 로 안드로이드 스튜디오 설치 (0) | 2021.12.18 |
[Android] 안드로이드 QR 스캐너 어플리케이션 예제 (0) | 2021.12.06 |