AVFAudio의 class들을 살펴보자

나우리·2024년 10월 29일

Swift

목록 보기
8/13

AVFaudio 내 class들은 기본적으로 세 가지로 나눌 수 있다.

  • 기본 재생, 녹음을 담당하는 class
  • 오디오 처리를 위한 class
  • 오디오 처리 시 기기와의 소통을 담당하는 class

재생 녹음을 담당하는 class

재생, 녹음 등을 담당하는 class는 다음과 같은 세 가지 class가 있다.

AVaudioPlayer

파일 또는 버퍼에서 오디오 데이터를 재생하는 객체

AVaudioRecorder

오디오 데이터를 파일에 녹음하는 객체

AVMIDIPlayer

시스템 소리 모듈을 통해 MIDI 데이터를 재생하는 객체
여기서 MIDI는 dj나 작곡하시는 분이 쓰는 그 "MIDI"를 말하는 것 같다.
currentPosition이란 변수가 따로 있는 걸 봐서 박자를 찍고, 얼마나 재생할지, 어느 타이밍에 재생할 지 등에 맞춰서 별도로 만들어진 구조인 듯하다.

오디오 처리 class

Audio Engine

  • 상당한 실시간, 오프라인 오디오 처리를 담당하는 객체, 3D 공간 음향처리를 도입하거나 MIDI와 샘플러들과 일하는 객체
    (출처: avaudio engine documentation)
  • 오디오 처리를 위한 객체
  • 이미지에서 보시다싶이 소스 파일에서 mixer node를 거치면서 오디오를 변환하여 반환하는 등 재생하면서 중간에 바꿔주거나 작업이 필요할 때 사용하는 것 같다.

이 때 노드의 갯수나 노드 설정 등은 사용자가 직접 추가할 수 있었고, 이를 통해 input값과 output값을 제어하여 중간에 변형이나 처리가 가능한 것 같다.

내가 본 사용 예시는 FFT(Fast Fourier Transform)을 통해 오디오의 데시벨 값을 표로 시각화할 때,
정확한 타이밍에 MIDI 객체를 재생할 때,
그리고 오디오에 공간음향처럼 효과를 적용할 때 사용하는 경우가 있었다.

기기와의 소통을 처리하는 class

AVAudioSession

  • 시스템과 앱 내 오디오를 어떻게 사용할지 소통하는 객체

세션 설정을 통해 휴대폰에 내가 이런 용도로 오디오를 사용중이라고 알리고,
이를 통해서 다른 출력해야 할 오디오가 있을 때 이런 식으로 처리해 달라고 설정이 가능했다.
기본 재생이나 녹음 class들과 상호작용하기 때문에 같이 관리할 때 신경을 조금 덜 써도 된다

AVAudioApplication

  • 앱의 하나나 더 많은 오디오 세션들을 관리하는 객체

주로 앱에서 마이크 사용 권한을 요청하기 위해 사용했다.
그 외에도 앱의 소리가 무음모드로 설정되어 있는지를 확인하고, 설정할 수 있도록 한다

AVAudioRoutingArbiter

  • AirPods 자동 전환에 참여하도록 macOS 앱을 구성하기 위한 객체
    일부 beats 등의 해드셋에도 적용이 가능하다고 한다.

에어팟 등 무선 이어폰을 멀티 디바이스에 연결했을 때 다른 기기가 재생이 시작되면 원래 재생하던 오디오는 정지되고,
다른 기기의 재생이 이어폰으로 자동적으로 연결되도록 되어있다.
이걸 제어하는 시스템 객체가 요 class라고 한다.

일반적으로 ios 앱은 기본적으로 자동 전환이 가능하게 설정되어 있다.

녹음과 재생만을 위한 앱을 만들 때는 별도의 처리가 필요없다면
AVAudioSession, AVApplication, AVaudioPlayer, AVaudioRecorder만 활용하면 된다.
요 class 들을 이용하여 녹음과 재생 기능을 추가하는 것에 대해서는 더 작성해보고자 한다.

참고문서

Audio Engine documentation
AVFaudio documentation

profile
왕초보 개발일지

0개의 댓글