Android Audio (1) : 녹음 (Recording)
1. 오디오 녹음(Recording) 단계
녹음은 외부 소스(마이크, 스트림 등)로부터 오디오 데이터를 캡처하여 앱에서 처리하거나 저장하는 과정입니다.
1.1 입력 소스 선택
- AudioSource: 오디오 입력 소스를 정의합니다. 안드로이드에서 지원하는 소스 예:
- MIC: 일반 마이크 입력.
- VOICE_COMMUNICATION: 통화에 최적화된 마이크 입력(노이즈 캔슬링 포함).
- CAMCORDER: 비디오 녹화용 마이크.
- REMOTE_SUBMIX:ក: 외부 입력 장치(예: 블루투스).
- 구성: AudioRecord 객체 생성 시 AudioSource를 지정하여 입력 소스를 선택.
- 예: AudioRecord(AudioSource.MIC, sampleRate, channelConfig, encoding).
1.2 오디오 데이터 캡처
- AudioRecord: 저수준 API로, PCM 형식의 원시 오디오 데이터를 캡처.
- 설정: 샘플레이트(예: 44.1kHz), 채널(모노/스테레오), 비트 깊이(16비트 PCM 등)를 AudioFormat으로 정의.
- 동작: AudioRecord.startRecording() 호출 후 read() 메서드로 버퍼에 데이터 저장.
- 고성능 옵션:
- AAudio: API 26+에서 지원, 저지연 처리에 적합.
- Oboe: AAudio와 OpenSL ES를 추상화한 C++ 라이브러리.
- 고려사항:
- 마이크 권한(RECORD_AUDIO) 요청.
- 버퍼 크기 최적화로 지연 최소화.
- 샘플레이트와 하드웨어 호환성 확인.
1.3 데이터 처리
- 캡처된 PCM 데이터를 앱에서 처리:
- 인코딩: PCM을 MP3/AAC로 변환(예: MediaCodec 사용).
- 저장: 파일로 저장(예: MediaMuxer로 MP4 컨테이너에 저장).
- 실시간 처리: 스트리밍 또는 효과 적용(예: 이퀄라이저).
- 오디오 포커스:
- AudioManager.requestAudioFocus로 다른 앱의 오디오 방해 방지.
- 예: 녹음 중 전화가 오면 AudioFocusChangeListener로 처리.
1.4 저장/전송
- 파일 저장: PCM 데이터를 인코딩 후 로컬 스토리지에 저장.
- 스트리밍: 네트워크로 전송(예: WebRTC, RTSP 프로토콜).
- 고려사항: 저장소 권한(WRITE_EXTERNAL_STORAGE) 및 네트워크 상태 확인.
1.5 오디오 처리 흐름 상세
- 권한 획득: Manifest.permission.RECORD_AUDIO 확인.
- AudioRecord 설정:
- AudioSource.MIC, 샘플레이트(44.1kHz), 채널(CHANNEL_IN_STEREO).
- 버퍼 크기 계산: AudioRecord.getMinBufferSize().
- 데이터 캡처: startRecording() → read()로 PCM 버퍼 획득.
- 처리: PCM 데이터를 인코딩(MediaCodec) 또는 실시간 처리.
- 저장/전송: MediaMuxer로 파일 저장 또는 네트워크 전송.
Comments
Post a Comment