AVFaudio 내 class들은 기본적으로 세 가지로 나눌 수 있다.
재생, 녹음 등을 담당하는 class는 다음과 같은 세 가지 class가 있다.
파일 또는 버퍼에서 오디오 데이터를 재생하는 객체
오디오 데이터를 파일에 녹음하는 객체
시스템 소리 모듈을 통해 MIDI 데이터를 재생하는 객체
여기서 MIDI는 dj나 작곡하시는 분이 쓰는 그 "MIDI"를 말하는 것 같다.
currentPosition이란 변수가 따로 있는 걸 봐서 박자를 찍고, 얼마나 재생할지, 어느 타이밍에 재생할 지 등에 맞춰서 별도로 만들어진 구조인 듯하다.

이 때 노드의 갯수나 노드 설정 등은 사용자가 직접 추가할 수 있었고, 이를 통해 input값과 output값을 제어하여 중간에 변형이나 처리가 가능한 것 같다.
내가 본 사용 예시는 FFT(Fast Fourier Transform)을 통해 오디오의 데시벨 값을 표로 시각화할 때,
정확한 타이밍에 MIDI 객체를 재생할 때,
그리고 오디오에 공간음향처럼 효과를 적용할 때 사용하는 경우가 있었다.
세션 설정을 통해 휴대폰에 내가 이런 용도로 오디오를 사용중이라고 알리고,
이를 통해서 다른 출력해야 할 오디오가 있을 때 이런 식으로 처리해 달라고 설정이 가능했다.
기본 재생이나 녹음 class들과 상호작용하기 때문에 같이 관리할 때 신경을 조금 덜 써도 된다
주로 앱에서 마이크 사용 권한을 요청하기 위해 사용했다.
그 외에도 앱의 소리가 무음모드로 설정되어 있는지를 확인하고, 설정할 수 있도록 한다
에어팟 등 무선 이어폰을 멀티 디바이스에 연결했을 때 다른 기기가 재생이 시작되면 원래 재생하던 오디오는 정지되고,
다른 기기의 재생이 이어폰으로 자동적으로 연결되도록 되어있다.
이걸 제어하는 시스템 객체가 요 class라고 한다.
일반적으로 ios 앱은 기본적으로 자동 전환이 가능하게 설정되어 있다.
녹음과 재생만을 위한 앱을 만들 때는 별도의 처리가 필요없다면
AVAudioSession, AVApplication, AVaudioPlayer, AVaudioRecorder만 활용하면 된다.
요 class 들을 이용하여 녹음과 재생 기능을 추가하는 것에 대해서는 더 작성해보고자 한다.