로그인회원가입장바구니고객센터마이페이지회사소개
kangcom
전체
Home >   >   > 

iOS 코어 오디오 프로그래밍

 [녹음, 재생, 변환에서 위치기반 음향까지 오디오 앱 개발]
   
지은이 크리스 애덤슨, 케빈 아빌라   |   출판사 에이콘  |   발행일 2015년 11월 26일
 
클릭하시면 큰 도서이미지를 보실 수 있습니다.
판매가 30,000원27,000원 10%
마일리지 1% 300원
발행일 2015-11-26
ISBN 8960777927 | 9788960777927
기타정보 번역서 | 364쪽 | 일반
예상출고일 1~2일 이내 (근무일기준)
배송비 무료배송
   
프로그래밍
종합지수 0p
   
이 책의 원서
  Core Audio
Addison-Wesley Professional | Mike Lee
 

[ 요약 ]

이 책은 오디오 캡처, 실시간 효과 추가, MP3 재생, 가상 음악 장치, 웹 라디오, VoIP 지원 기능에 관련된 코어 오디오 프레임워크 API를 설명한다. 지금까지 만들어진 오디오 시스템 중에서 가장 정교한 오디오 프로그래밍 시스템인 코어 오디오는 단순하지 않기 때문에 이 책에서는 쉽게 설명된 예제를 통해서 녹음, 재생, 형식 변환, 오디오 유닛, 3D 오디오 MIDI 연결에 대한 지침을 제공하고, 맥과 iOS에서 코어 오디오의 프로그래밍에서 발생하는 독특한 도전 과제들을 극복하는 것을 도와준다.


[이 책에서 다루는 내용]

■ 코어 오디오의 놀라운 스타일과 규칙 학습
■ 오디오 큐 구조로 녹음과 재생 구현
■ 오디오 합성, 오디오 스트림에 효과 적용, 마이크에서 캡처, 여러 스트림 합성을 위한 오디오 유닛 사용
■ 코어 오디오의 도움 API로 파일 스트림 관리와 형식 변환
■ OpenAL로 3D 공간에 위치기반 오디오 생성
■ 즉석에서 오디오를 합성하기 위한 코어 MIDI 사용
■ 코어 오디오의 C 기반 환경에서 코코아와 오브젝티브C 장점 활용

[이 책의 대상 독자]

누가 이 책을 읽어야 하는가?
이 책의 주요 독자층은 맥이나 iOS 프로그래밍에 익숙한 경험이 있지만, 코어 오디오를 다뤄 보지 않은 프로그래머다. C를 알고 있으면 좋지만, 디지털 오디오에 대한 선행 지식은 필요하지 않다. 디지털 오디오에 관한 내용은 2장에서 다룬다. 오디오 프로그래밍에서 흥미로움을 유발하기 위해서 오디오 캡처, 실시간 효과, MP3 플레이백, 가상 악기, 웹 라디오, 보이스오버 IP 등 미디어 애플리케이션에서 무엇이 가능한지 충분한 경험을 했다고 가정한다. 프로그래머로서 이런 미디어에 대해 별다른 흥미가 없다면 루비 온 레일스 같은 책들이 꽂힌 서가를 찾아보는 편이 나을 것이다.

누가 이 책을 읽지 말아야 하는가?
자칭 ‘세상에서 가장 단련된 프로그래머’인 마이크 리(Mike Lee)는 “코어 오디오는 진지한 마술과 같다.”고 언급한 적이 있다. 이 책을 배워 나가면서 로우레벨의 API를 찾아 다니는 자신을 발견할 것이며, 이런 수준의 프로그래밍에 흥미가 없다면, 이 책은 여러분을 위한 책이 아니다. 하지만 충분히 능력을 갖춘 상태가 됐을 때 이 책을 펼쳐보는 것은 추천할 만한 것임을 명심하기 바란다.
엑스코드, C, 오브젝티브C를 알아야 하고, 헤더 파일을 읽고, 해석하는 데 어려움이 없어야 한다. 언제 무엇인가에 미친 듯이 집중하는 시점이 올지 모르고, 그때 가지고 있는 기술이 이 책을 습득하는 데 분명 많은 도움이 될 것임을 확신한다.

[ 이 책의 구성]

I부. 코어 오디오 이해
이 부분은 이 책의 전반에 사용되는 기술적인 기반을 설명한다. 어떤 코드를 작성하기 전에 많은 양의 내용을 습득하는 것은 주제에 대한 학습을 돕는다. 디지털 오디오와 코어 오디오가 제공하는 해결 방법을 이해하는 것은 차후에 나오는 부분들과 예제 코드의 이해를 위해서는 필수적이다.
1장. 코어 오디오 개요
맥이나 iOS 프레임워크로서 코어 오디오의 기본을 살펴보면서 시작한다. 즉 파일이 어디에 위치하고, 프로젝트와 프레임워크를 연결하는 방법, 도움이 필요할 때 무엇을 찾아봐야 하는지에 대해 다룬다.
API 자체의 개요로 시작한다. 순차적으로 속성 기반의 특성을 설명한다. 그리고 각각의 구조적인 단위를 간략하게 살펴본다. 즉 하이레벨의 API(오디오 큐(Audio Queue), OpenAL, 확장된 오디오 파일(Extended Audio File))에서 시작하고, 중간 수준의 API(오디오 유닛(Audio Units), 오디오 파일, 오디오 변환기(Audio Converter)로 이동하고, 로우레벨의 API(IOKit/IOAudio, HAL, iOS에서 원격 I/O)를 다룬다. 코어 오디오 코드를 작성하는 맛을 보게 하기 위해서 소리 파일에서 코어 오디오를 사용해 메타 데이터를 추출하는 간단한 애플리케이션을 작성한다.
2장. 소리 이야기
디지털 오디오의 핵심 문제는 디지털 컴퓨터에서 소리의 아날로그 파형을 나타내는 데 있다. 샘플링(sampling)이 어떻게 소리를 2진 컴퓨터의 1과 0으로 변경하는지 이야기한다. 비트율(bit rate)과 품질, 성능, 파일 크기에 대한 균형에 대해서 다룬다. 샘플링에 대해 실제적으로 이해하기 위해서 샘플별로 파일에 직접 소리 파형을 작성하고, 사람의 귀에 파형이 얼마나 다르게 들리는지 볼 것이다(실제로 들을 것이다).
가공되지 않은 연속된 비트(bit)를 가지고 있을 때, 그것을 프레임(frame)과 패킷(packet)으로 양자화할 필요가 있다. 고정 비트율과 가변 비트율의 차이점과 프레임율에 대해서도 언급한다.
3장. 코어 오디오로 오디오 처리
영어로 오디오의 개념을 이해한다면, 이제 그것을 C로 표현할 차례다. 여기서는 구현 세부사항에 대해서 언급한다. 즉 코어 오디오가 오디오 스트림(stream)을 나타내는 방법과 이러한 스트림과 작업하는 기능을 제공하는 방법을 설명한다. 파일 형식과 스트림 형식을 설명하고, 그들의 차이점을 강조한다. 그리고 코어 오디오가 어떤 형태의 오디오 형식/파일 형식 조합을 지원하는지 검사하기 위해서 예제를 작성할 것이다.
형식에 대한 설명 이후에 코어 오디오의 프로세싱 모델(processing model)로 주제를 전환하고, 코어 오디오가 어떻게 기능을 오디오 유닛으로 캡슐화하고, 이런 기능을 어떻게 흥미롭게 합치는지, 그리고 시스템을 통해 오디오 데이터를 이동하기 위해서 왜 풀 모델(pull model)을 사용하는지를 살펴본다.

2부. 기본 오디오
2부는 이전 장의 개념과 API의 실제 사용을 다루면서 시작한다. 파일 기반의 오디오 데이터를 녹음하고, 재생함으로써 파일과 오디오 시스템 사이의 데이터 흐름을 논의한다. 그리고 형식 사이의 데이터를 이동하기 위해서 트랜스코딩(transcoding) API를 살펴보고, 이것을 가능하게 하는 뒤에 숨겨진 중요한 함수를 설명한다.
4장. 녹음
왜 재생 전에 녹음을 설명하는가? 녹음이 더 쉽고, 이후에 다룰 샘플 파일을 재생하기 때문이다. 4장은 파일에서 데이터를 넣고, 빼는 하이레벨의 API를 소개하고, 그 데이터를 사용하기 위해 오디오 큐 API를 살펴본다. 기본 입력 장치에서 오디오를 캡처하는 완전한 예제를 파일에 작성한다. 그 과정에서 어려운 압축 포멧을 다룬다. 특히 형식에 기반한 매직 쿠키(magic cookies)와 임의의 형식을 위한 데이터 작성을 위해 얼마나 큰 버퍼가 필요한지 계산하는 방법을 다룬다.
5장. 재생
프로그래밍의 관점에서 녹음과 재생은 동전의 양면과 같다. 재생은 파일의 데이터를 버퍼로 옮긴다. 녹음은 버퍼의 데이터를 파일로 옮긴다.
5장은 파일에서 오디오를 읽고, 기본 출력으로 재생하는 완전한 예제를 제공한다. 다시 말해서 가변 비트율 형식을 다루는 기술을 살펴본다. 또한 오디오 큐의 속성과 파라미터로 할 수 있는 기능들을 살펴보고, 아주 많은 버퍼로 발생하는 지연에 대한 문제를 다룬다.
6장. 변환
객체지향 프로그래밍에 익숙한 사람들을 위해서 설명하자면 코어 오디오의 하이레벨 API는 상당히 로우레벨이다. 6장은 그 뒤에 숨겨진 복잡성을 다루고, 현대적인 오디오 코덱(audio codec)의 아주 상세한 부분과 표준적인 데이터로 변환하는 데 필요한 복잡성을 살펴본다. 압축된 파일을 압축 해제된 파일로 변환하는 오디오 변환기 서비스(Audio Converter Services)를 직접 사용하는 예제를 제공하고, 이 과정을 I/O와 데이터 변환을 한 번의 과정으로 합치는 확장된 오디오 파일 서비스(Extended Audio File Services)를 사용해 단순화한다.

3부. 고급 오디오
오디오 데이터를 앞뒤로 옮기는 방법을 이해하기 때문에 좀 더 화려한 기능을 배울 차례다. 오디오 데이터에 효과를 추가하는 것으로 시작해, 3D 위치기반 음향을 다루고, 성능과 로우레벨 아키텍처를 배울 것이다.
7장. 오디오 유닛: 생성기, 효과, 렌더링
코어 오디오는 오디오 유닛이라고 불리는 디지털 시그널 처리 플러그인(plug-in)을 위한 훌륭한 구조를 제공한다. 그러나 오디오 유닛은 코어 오디오 API의 흔히 사용되는 가장 낮은 수준이며, 프로그래머에게 새로운 도전 과제를 준다. 이 장은 파일과 맥 OS X 소리 합성기에서 소리를 재생하고, AUGraph API를 통해서 조율된 소리에 효과를 실행하기 위해서 오디오 유닛을 소개한다. 프로그램적으로 생성된 오디오 데이터를 오디오 유닛의 입력으로 제공하는 방법을 살펴본다.
8장. 오디오 유닛: 입력과 혼합
오디오 유닛 API와 좀 더 친숙해지도록 돕기 위해, 오디오 캡처를 실행하기 위한 IO 유닛 사용 방법을 살펴보고, 캡처된 데이터를 얻어 다른 소스를 AUGraph로 실행해보는 다소 어려운 방법을 살펴본다. 이 모든 것을 조합하기 위해 강력한 멀티채널 혼합 유닛(multichannel mixer unit)을 사용한다.
9장. 위치기반 음향
지금까지 소리에 대해서만 다뤘지만, 소리에 대한 사람의 경험은 음향에 대한 문제에 완전히 새로운 차원을 추가한다. 9장은 소리를 3D 공간의 위치와 관련 짓는 OpenAL, 3D 위치기반 음향 API를 다룬다. 루프(loop)로 시작하지만, 9장의 끝부분에서는 3D 소스에서 사운드를 추출해 마음껏 긴 스트림을 재생할 수 있을 것이다.

4부. 추가적인 주제
앞에서 대부분의 코어 오디오에 대한 내용을 다루었지만, 전부를 다룬 것은 아니다. 이 파트는 이 책의 나머지 부분과 잘 어울리지 않는 추가적인 내용을 다룬다. iOS를 다루는 장으로 시작해 MIDI 데이터를 다루는 방법을 설명하고, 코어 오디오를 확장하는 내용으로 마무리한다.
10장. iOS에서의 코어 오디오
개념적으로 아이폰에서의 소리와 매킨토시에서의 소리 사이에는 약간의 차이가 존재하지만, 이 차이는 매우 세부적이다. 10장은 제한된 하드웨어 자원에서 발생하는 제한과 예외에 대한 차이에 집중한다.
우선권이 존재하고(preemptive), 다중 근원, 다중 목적지 아이폰 환경에서 적절하게 동작하게 하기 위해서 중요한 오디오 세션(Audio Session) API에 대해서 논의한다.
11장. 코어 MIDI
뮤지션들은 악기와 디지털 음악 데이터를 처리하는 핵심인 MIDI 표준을 사랑한다. 11장에서는 코어 MIDI가 맥이나 iOS 장치와 물리적으로나 무선으로 연결된 악기 사이에서 음악 이벤트를 처리하는 방법을 살펴본다. 또한 노트와 타이밍 데이터를 소리로 변환하기 위해서 MIDI 데이터가 오디오 유닛으로 전달되는 방법을 볼 것이다.
12장. 정리
마지막 장인 12장에서는 무엇을 배웠고, 무엇이 남았는지 살펴본다. 맥 OS X 10.7(라이온)과 iOS에서 밝혀진 최신의 오디오 비트를 지적한다.

이 책은 코어 오디오가 정의한 모든 함수를 다루거나, 개념적으로 모든 것을 다루지는 않지만, 가장 많이 사용되고, 가장 중요한 주제들을 깊이 있게 다룬다. 이 책을 끝까지 읽고 난 이후에 코어 오디오가 동작하는 방식을 이해하게 될 것이며, 자신의 애플리케이션에 필요한 추가적인 기능들을 스스로 찾아서 구현할 수 있도록 준비됐다고 생각해도 될 것이다

1부. 코어 오디오 이해
__1장. 코어 오디오 개요
____코어 오디오 프레임워크
____코어 오디오 규칙
____첫 번째 코어 오디오 애플리케이션
______예제 실행
____코어 오디오 속성
____정리

__2장. 소리 이야기
____파형 생성
____디지털 오디오
____DIY 샘플
____버퍼
____오디오 형식
____정리

__3장. 코어 오디오로 오디오 처리
____오디오 데이터 형식
______예제: 형식 가늠하기
____표준 형식
____오디오 유닛으로 오디오 처리
____풀 모델
____정리

2부. 기본 오디오

__4장. 녹음
____오디오 큐에 관한 모든 것
____녹음기 제작
____CheckError() 함수
____오디오 큐 생성과 사용
____오디오 큐를 위한 유틸리티 함수__
______녹음 오디오 큐 콜백
____정리

__5장. 재생
____재생 애플리케이션 정의
____파일 재생 오디오 큐 설정
______재생 버퍼 설정
______재생 큐 시작
____재생 유틸리티 함수
______매직 쿠키 처리
______버퍼 크기와 기대되는 패킷 수 계산하기
____재생 오디오 큐 콜백
____큐 기반 재생의 기능과 한계
____정리

__6장. 변환
____afconvert 유틸리티
____오디오 변환 서비스 사용
____변환을 위한 파일 설정
______오디오 변환 서비스 호출
______변환기 콜백 구현
____확장된 오디오 파일 서비스로 변환
______확장된 오디오 파일로 읽고 변환하기
____정리

3부. 고급 오디오

__7장. 오디오 유닛: 생성기, 효과, 렌더링
____놀라운 기능이 발현되는 곳
____오디오 유닛의 동작 방법
____오디오 유닛 확장
____첫 번째 오디오 유닛
______main() 함수 빌드
______오디오 유닛 그래프 생성
______파일 재생기 오디오 유닛 설정
____오디오 유닛으로 말하기와 효과
______음성 합성 그래프의 블록 생성
______음성 합성기 AUGraph 생성
______음성 합성기 설정
______효과 추가
____오디오 렌더링 처리 단계에 개발자 코드 추가
______오디오 유닛 렌더 사이클
______맞춤형 렌더링 예제
______오디오 유닛을 생성하고 연결
______렌더 콜백 함수
____정리

__8장. 오디오 유닛: 입력과 혼합
____I/O 입력 다루기
______입력과 출력 유닛을 연결
______입력을 위해 AUHAL 유닛을 생성
______입력 콜백 작성
______CARingBuffer의 샘플을 재생하기 위한 AUGraph 생성
______재생 애플리케이션의 렌더 콜백 작성
______재생 예제 실행
____혼합
____정리

__9장. 위치기반 음향
____공간에서 음향
____OpenAL API
____소리를 공간에 위치
______예제 설정
______OpenAL 구조체 사용
______근원의 위치를 이동
______OpenAL 버퍼를 위해 샘플 불러오기
____OpenAL의 스트리밍 오디오
______OpenAL 스트리밍 예제 설정
______스트리밍을 위한 ExtAudioFile 설정
______OpenAL 버퍼를 다시 채우기
____정리

4부. 추가적인 주제
__10장. iOS에서의 코어 오디오
____코어 오디오가 주머니에 있는가?
____다른 기능과 조화: 오디오 세션 서비스
____오디오 세션 예제
______앱 설정
______오디오 세션과 오디오 큐 초기화
______음색 생성기 메소드
______iOS 인터럽트 처리
____iOS에서 오디오 유닛
______iOS RemoteIO 유닛으로 오디오 통과 앱 제작
______통과 예제 설정
______캡처와 재생을 위해 RemoteIO 오디오 유닛 설정
______RemoteIO 렌더 콜백
______그 외의 iOS 오디오 기능
______iOS에서 원격 제어
______iOS 하드웨어 위험
____정리

__11장. 코어 MIDI
____MIDI 개념
____코어 MIDI
______코어 MIDI 구조
______코어 MIDI 용어
______코어 MIDI 속성
______MIDI 메시지
____장치 유닛
____간단한 MIDI 합성기 제작
______MIDI에 연결
____MIDI 알림과 이벤트 처리
______AUGraph 재생
____MIDI 이벤트 제작
______MIDIWifiSource 예제 설정
______와이파이를 통한 MIDI 설정
______MIDI 메시지 전송
______와이파이 MIDI 데이터를 수신하기 위해 맥 설정
____정리

__12장. 정리
____코어 오디오의 남은 내용
____다음 과정
______디지털 신호 처리
____라이온과 iOS 5
____AUSampler
______iOS에서 코어 오디오
____코어 오디오 커뮤니티
____정리

크리스 애덤슨(Chris Adamson)
미시간 주의 그랜드 라피드에 살고 있는 독립적 작가이자 편집자이며 개발자다. 현재는 iOS와 맥 개발에 집중하고 있으며 『iOS SDK Development』(Pragmatic Programmers, 2012)를 공동 저술했다. 『QuickTime for Java:A Developer’s Notebook』(O’Reilly Media, 2005)를 저술했으며, 『Swing Hacks』(O’Reilly Media, 2005)의 공저자다. 이전에는 java.net과 ONJava.com의 편집자였다. 맥과 iOS의 사용자 인터페이스와 디지털 미디어 개발에 집중한 회사인 Subsequently and Furthermore, Inc.를 세워 컨설팅과 출판을 한다. 또한, 디지털 미디어 소프트웨어 개발 관련 블로그(www.subfurther.com/blog)를 운영 중이다. 이전 경력은 CNN 헤드라인 뉴스의 작가/협력 프로듀서였고, 수년에 걸쳐서 11과 1/2개의 맥을 용케 소유해왔다.

케빈 아빌라(Kevin Avila)
특별한 특색이 있는 탄소화합물, 산소, 수소, 질소와 같은 화합물을 부드럽게 잘 섞어 놓은 사람 같다. 15년 이상 맥 개발 경력이 있으며, 출시 직후부터 아이폰 앱 개발을 해왔다. 애플의 엔지니어에서부터 전문적인 녹음실을 설정하는 것까지 오디오 마켓의 모든 부분을 다뤄본 경험이 있다. 현재는 집에서 속옷차림으로 커피를 마시면서 여러 고객들의 코딩 용병으로 일하고 있다.
등록된 서평이 없습니다.
Do it! 안드로이드 앱 프로그래밍...
정재곤
선택된 상품을 찜하실 수 있습니다. 선택된 상품을 바로구매 하실 수 있습니다.
 
전체평균(0)
회원평점   회원서평수 0
에이콘 출판사의 신간
『사운드 디자인: 제품과 서비스에 숨겨진 원리』
앰버 케이스, 애런 데이 저
25,200원
(10%↓+5%)
 
『보이스봇 & 챗봇 디자인: 아마존 알렉사, 구글홈, 페이스북 메신저에서 배우는 대화형 시스템 구축』
레이첼 배티시 저
18,000원
(10%↓+5%)
 
『암호 해킹으로 배우는 파이썬의 기초: 암호학과 파이썬을 함께 배우자』
알 스웨이가트 저
31,500원
(10%↓+5%)
 
『모던 C++ 프로그래밍 쿡북 : 100가지 레시피로 배우는 C++ 동작의 이해와 문제 해결』
마리우스 반실라 저
36,000원
(10%↓+5%)
 
『해킹 입문자를 위한 TCP/IP 이론과 보안 2/e: 모의 침투 입문자를 위한 필독서』
오동진 저
22,500원
(10%↓+5%)
 
이메일주소수집거부