오디오 녹음과 재생
[MediaRecorder 클래스를 사용해서 오디오를 녹음하기]
[MediaPlayer 클래스를 사용해서 오디도를 재생하기]
+ [SD카드에 파일을 저장하는 방법]
+ [하드웨어의 존재 여부 검사하는 방법]
○ 오디오 재생
1. 안드로이드에서 오디오 재생은 MediaPlayer 또는 AudioTrack 클래스를 사용.
AudioTrack 클래스는 스트리밍 오디오 버퍼를 사용, 풍부한 오디오 제어를 제공.
MediaPlayer 클래스는 단순한 오디오와 비디오 재생을 구현
2. MediaPlayer 클래스의 주요 메서드
- create() : 새로운 인스턴스 생성하기 위해 호출, 재생될 오이도의 Uri인자를 받음.
- setDataSource() : 재생될 오디오의 소스를 설정
- prepare() : 재생 시작 준비
- start() : 재생 시작
- pause() : 일지 중지 <-> resume()
- stop() : 중지
- setVolume() : 좌우 채널의 재생 볼륨 값을 지정하는 두 개의 부동 소수점 인자를 받음.
- resume() : 일시 중지된 재생 세션을 다시 시작
- reset() : 미디어 재생 인스턴스를 재설정하여 초기화되지 않은 상태로 되돌림.
- release() : 재생 인스턴스가 더 이상 필요 없을 때 호출됨. 이 메서드는 재생 인스턴스가 점유한 모든 리소스를 해제시킴.
3. MediaPlayer를 구현하는 일반적인 방법:
MedaiPlayer medaiplayer = new MedaiPlayer();
medaiplayer.setDataSource("~");
medaiplayer.prepare();
medaiplayer.start();
○ MediaRecorder 클래스를 사용해서 오디오를 녹음하기
1. MediaRecorder 주요 메서드
- setAudioSource() : 녹음될 오디오의 입력 소스를 지정함(일반적으로 장치 마이크의 MediaRecorder.AudioSource.MIC가 될 것)
- setVideoSource() : 녹화될 비디오의 입력 소스를 지정함(예: 장치 카메라인 MediaRecorder.VideoSource.CAMERA)
- setOutputFormat() : 녹음된 오디오나 비디오가 저장되는 포맷을 지정함(예 : MediaRecorder.OutputFormat.AAC_ADTS)
- setAudioEncoder() : 녹음된 오디오에 사용되는 오디오 인코더를 지정
- setOutputFile() : 녹음된 오디오나 비디오가 지정되는 파일의 경로를 구성
- prepare() : 녹음을 시작하기 위해 MediaRecorder 인스턴스를 준비
- start() : 녹음 시작
- stop() : 녹음 중지
- reset() : 레코더를 재설정.
- release() : MediaRecorder 인스턴스가 더 이상 필요 없을 때 호출해야 함.(이 메서드는 그 인스턴스가 점유한 모든 리소스를 해제시킴)
※ 오디오를 녹음하려면 애플리케이션의 매니페스트 파일에 퍼미션을 추가해야 함(android.permission.RECORD_AUDIO)
○ 마이크 확인
1. 마이크가 없는 장치에서 오디오를 녹음하려고 하면 안드로이드 시스템이 예외를 발생시킴.
따라서, 사전에 확인하는 것이 중요.
2. 특정 기능 패키지가 설치 되어 있는 지 시스템에게 확인 요청함.
(PackageManager 클래스의 객체 생성 후 hasSystemFeature()메서드를 호출 -> 해당 기능을 나타내는 상수를 메서드 인자로 전달)
예: PackageManager.FEATURE_MICROPHONE
○ 안드로이드에서 SD카드의 경로 확인
1. Environment 클래스의 getExternalStorageDirectory() 메서드르르 호출하여 얻을 수 있음
(사용 예 : Environment.getExternalStorageDirectory().getAbsolutePath())
※SD 카드는 외부 스토리라고 하지만, 다수의 안드로이드 장치들이 실제 장치 없이 내부적으로 구현하는 경우도 존재.)
2. 외부 스토리지 작업할 때는 퍼미션 필요.
매니페스트 파일에 android.permission.WRITE_EXTERNAL_STORAGE 추가
○ 오디오 레코드 동작 구현
1. MediaRecorder 인스턴스가 오디오 소스, 출력 포맷, 오디오 데이터가 저장될 파일의 위치 등의 정보를 갖도록 구현해야함.