본문 바로가기

Software/iOS & Objective-C

Audio Unit Hosting에 대하여...

About Audio Unit Hosting

iOS는 녹음, 재생, 오프라인 렌더링 및 VoIP(Voice over Internet Protocol)와 같은 실시간 대화를 위한, 
Mixing, equalization, format 변환 및 실시간 입/출력을 지원하는 오디오 처리를 위한 Plug-Ins을 제공한다.
이것들을 동적으로 사용(Host) 가능하며, 강력하고 유연한 Plug-ins은 iOS Application에서 제공된다.

Audio Units은 일반적으로 그림과 같이 Audio Processing Graph라는 객체의 Context에서 작업이 이루어진다.

그림을 통해 예제를 살펴보면, App은 하나 이상의 Callback 함수를 통해 Graph의 첫 번째 Audio Unit로 오디오를 전송하고 각  오디오 Unit에 대하여 개별적인 제어를 수행한다. I/O Unit의 출력(Audio processing graph의 마지막 Audio unit)은 출력을 담당하는 Hardware에 직접 연결된다.



At a Glance
Audio Unit이 iOS의 Audio Stack에서 가장 낮은 Programming layer(프로그램 계층)을 구성하기 때문에, 효과적으로 사용하기 위해서는 다른 iOS Audio 기술에서 필요한 것보다 더 심층적인 이해가 필요하다.

합성된 소리, 지연 시간이 적은 I/O(입력 및 출력) 또는 특정 오디오 장치 기능의 실시간 재생이 필요한 경우가 아니면 먼저 Media Player, AV Foundation, OpenAL 또는 Audio Toolbox  Framework를 학습하는 것만으로 충분하다. 해당 Framework를 사용하면 사용자를 대신하여 Audio Units을 사용하며, 멀티미디어 프로그래밍 가이드에 설명된 것 처럼 중요한 추가 기능들을 제공해준다.


Audio Units Provide Fast, Modular Audio Processing

Audio Units을 직접사용하여 얻을 수 있는 장점은 다음과 같다.

  • 탁월한 응답성 : Audio Unit Callback 함수에서 실시간 우선 순위 스레드에 접근할 수 있으므로, Audio Code는 가능한 원천적인 소스에 직접 접근 사용한 것에 가깝다. 합성 악기와 실시간 동시 음성 입/출력은 Audio Unit을 직접 사용하는 경우 느낄 수 있는 가장 큰 이점이다.
  • 동적 재구성 : AUGraph 불투명 유형을 기반을 작성된 Audio processing graph API를 사용하면, 오디오를 처리하는 동안 복잡한 오디오 처리 chains을 스레드 안정 방식으로 동적으로 어셈블, 재구성 및 재배치 할 수 있다. 이 기능을 제공하는 iOS의 유일한 오디오 API 이다.


An audio unit’s life cycle 과정은 다음과 같다.
  1. App Runtime에 사용하고자하는 Audio Unit이 정의된 정보를 동적으로 참조 한다.
  2. Audio Unit을 인스턴스화(객체 생성) 한다.
  3. 유형에 따라 필요에 따라 Audio Unit을 구성하고 앱의 의도를 수용한다.
  4. Audio Unit을 초기화하여 오디오를 처리할 준비를 마친다.
  5. 오디오 흐름을 시작한다.
  6. Audio Unit를 제어한다.
  7. 끝나면 Audio Unit을 해제한다.

Audio Unit은 Stereo panning, mixing, volume control 및 Audio level metering과 같은 매우 유용한 개별 기능을 제공한다. Audio Unit 호스팅을 통해 이러한 기능을 앱에 추가 할 수 있다. 하지만 이런 유용한 기능을 사용하기 위해선 Audio Data Stream format(오디오 데이터 스트림 형식), 렌더링 콜백 기능 및 Audio Unit 아키텍처와 같은 기본 개념을 숙지 해야만한다.


Choosing a Design Pattern and Constructing Your App

디자인 패턴을 호스팅하는 Audio Unit은 유연한 청사진을 제공하여 App의 특성을 맞춤 설정한다. 패턴은 다음과 같다.


  • I/O 장치를 구성하는 방법 : 

I/O 장치에는 두 개의 독립적인 요소가 존재한다. 하나는 입력 하드웨어에서 오디오를 받아들이는 요소이고, 다른 하   나는 출력 하드웨어로 오디오를 보내는 요소이다. 각 디자인 패턴은 활성화해야 하는 요소를 나타낸다.

  • Audio processing graph 오디오 데이터 스트림 형식을 지정해야하는 경우 : 

오디오 흐름을 지원하는 형식을 올바르게 지정해야 한다.

  • Audio Unit 연결 정의 및 렌더링 Callback function을 연결 시키기 : 

Audio unit 연결은 특정 Audio unit에서 다른  Audio unit 장치의 입력으로 스트림 형식을 전달하는 형식적 구성이다. 렌더링 Callback을 사용하면 Audio를 graph로 보내거나 graph 내의 개별 Sample level에서 Audio를 조작할 수 있다.


어떤 Design Pattern을 선택하든 관계없이 Audio Unit 호스팅 앱을 제작하는 단계는 기본적으로 동일하다.

  1. Application에서 Audio session을 구성하여 App이 시스템 및 장치 하드웨어의 컨텍스트에서 올바르게 작동하는지 확인할 것.
  2. Audio processing graph를 작성해야 함. 이 다단계 프로세스는 Audio Unit Hosting Fundamentals에서 학습한 모든 것을 사용한다.
  3. Graph의 Audio audio units을 제어하기위한 사용자 인터페이스를 제공한다.


반응형

'Software > iOS & Objective-C' 카테고리의 다른 글

Audio Unit Hosting Fundamentals  (0) 2016.12.06
iOS Audio Play  (0) 2016.11.23
Concurrency Programming Guide 요약  (0) 2016.10.10
[iOS] App 내에서 언어 변경법  (0) 2016.03.02
클래스 기본 문법  (0) 2015.11.09