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 오디오 처리 흐름 상세

  1. 권한 획득: Manifest.permission.RECORD_AUDIO 확인.
  2. AudioRecord 설정:
    • AudioSource.MIC, 샘플레이트(44.1kHz), 채널(CHANNEL_IN_STEREO).
    • 버퍼 크기 계산: AudioRecord.getMinBufferSize().
  3. 데이터 캡처: startRecording() → read()로 PCM 버퍼 획득.
  4. 처리: PCM 데이터를 인코딩(MediaCodec) 또는 실시간 처리.
  5. 저장/전송: MediaMuxer로 파일 저장 또는 네트워크 전송.

Comments

Popular posts from this blog

TinyZero 따라하기 (1)

TinyZero 따라하기 (3)

TinyZero 따라하기 (2)