About the Authors |
|
xiii | |
Foreword |
|
xv | |
Introduction |
|
1 | (12) |
|
|
2 | (1) |
|
|
3 | (1) |
|
|
3 | (2) |
|
How This Book Is Organized |
|
|
5 | (4) |
|
|
9 | (4) |
|
I Understanding Core Audio |
|
|
|
|
13 | (12) |
|
The Core Audio Frameworks |
|
|
14 | (1) |
|
|
15 | (1) |
|
Your First Core Audio Application |
|
|
16 | (6) |
|
|
19 | (3) |
|
|
22 | (1) |
|
|
23 | (2) |
|
|
25 | (18) |
|
|
25 | (2) |
|
|
27 | (5) |
|
|
32 | (8) |
|
|
40 | (1) |
|
|
40 | (1) |
|
|
41 | (2) |
|
3 Audio Processing with Core Audio |
|
|
43 | (16) |
|
|
43 | (8) |
|
Example: Figuring Out Formats |
|
|
46 | (5) |
|
|
51 | (2) |
|
Processing Audio with Audio Units |
|
|
53 | (2) |
|
|
55 | (1) |
|
|
55 | (4) |
|
|
|
|
59 | (22) |
|
|
59 | (1) |
|
|
60 | (3) |
|
|
63 | (1) |
|
Creating and Using the Audio Queue |
|
|
64 | (7) |
|
Utility Functions for the Audio Queue |
|
|
71 | (7) |
|
The Recording Audio Queue Callback |
|
|
75 | (3) |
|
|
78 | (3) |
|
|
81 | (16) |
|
Defining the Playback Application |
|
|
81 | (2) |
|
Setting Up a File-Playing Audio Queue |
|
|
83 | (6) |
|
Setting Up the Playback Buffers |
|
|
85 | (3) |
|
Starting the Playback Queue |
|
|
88 | (1) |
|
Playback Utility Functions |
|
|
89 | (2) |
|
Handling the Magic Cookie |
|
|
89 | (1) |
|
Calculating Buffer Size and Expected Packet Count |
|
|
90 | (1) |
|
The Playback Audio Queue Callback |
|
|
91 | (3) |
|
Features and Limits of Queue-Based Playback |
|
|
94 | (1) |
|
|
95 | (2) |
|
|
97 | (26) |
|
|
97 | (3) |
|
Using Audio Converter Services |
|
|
100 | (2) |
|
Setting Up Files for Conversion |
|
|
102 | (10) |
|
Calling Audio Converter Services |
|
|
105 | (4) |
|
Implementing the Converter Callback |
|
|
109 | (3) |
|
Converting with Extended Audio File Services |
|
|
112 | (6) |
|
Reading and Converting with Extended Audio Files |
|
|
116 | (2) |
|
|
118 | (5) |
|
|
|
7 Audio Units: Generators, Effects, and Rendering |
|
|
123 | (38) |
|
|
123 | (1) |
|
|
124 | (2) |
|
Sizing Up the Audio Units |
|
|
126 | (3) |
|
|
129 | (12) |
|
Building the main() Function |
|
|
131 | (2) |
|
Creating an Audio Unit Graph |
|
|
133 | (4) |
|
Setting Up the File Player Audio Unit |
|
|
137 | (4) |
|
Speech and Effects with Audio Units |
|
|
141 | (9) |
|
Building Blocks of the Speech Synthesis Graph |
|
|
142 | (2) |
|
Creating a Speech Synthesis AUGraph |
|
|
144 | (2) |
|
Setting Up a Speech Synthesizer |
|
|
146 | (1) |
|
|
147 | (3) |
|
Adding Your Code to the Audio Rendering Process |
|
|
150 | (10) |
|
The Audio Unit Render Cycle |
|
|
150 | (1) |
|
A Custom Rendering Example |
|
|
151 | (3) |
|
Creating and Connecting Audio Units |
|
|
154 | (1) |
|
The Render Callback Function |
|
|
155 | (5) |
|
|
160 | (1) |
|
8 Audio Units: Input and Mixing |
|
|
161 | (30) |
|
|
161 | (22) |
|
Connecting Input and Output Units |
|
|
164 | (4) |
|
Creating an AUHAL Unit for Input |
|
|
168 | (8) |
|
Writing the Input Callback |
|
|
176 | (2) |
|
Building an AUGraph to Play Samples from a CARingBuffer |
|
|
178 | (3) |
|
Writing the Play-Through App's Render Callback |
|
|
181 | (1) |
|
Running the Play-Through Example |
|
|
182 | (1) |
|
|
183 | (6) |
|
|
189 | (2) |
|
|
191 | (32) |
|
|
191 | (2) |
|
|
193 | (3) |
|
|
196 | (14) |
|
|
197 | (3) |
|
|
200 | (5) |
|
Animating the Source's Position |
|
|
205 | (1) |
|
Loading Samples for an OpenAL Buffer |
|
|
206 | (4) |
|
Streaming Audio in OpenAL |
|
|
210 | (10) |
|
Setting Up the OpenAL Streaming Example |
|
|
210 | (5) |
|
Setting Up an ExtAudioFile for Streaming |
|
|
215 | (2) |
|
Refilling the OpenAL Buffers |
|
|
217 | (3) |
|
|
220 | (3) |
|
|
|
|
223 | (34) |
|
Is That Core Audio in Your Pocket? |
|
|
223 | (1) |
|
Playing Nicely with Others: Audio Session Services |
|
|
224 | (3) |
|
|
227 | (11) |
|
|
227 | (4) |
|
Initializing the Audio Session and Audio Queue |
|
|
231 | (3) |
|
The Tone Generator Method |
|
|
234 | (2) |
|
Handling iOS Interruptions |
|
|
236 | (2) |
|
|
238 | (15) |
|
Building an Audio Pass-Through App with the iOS RemoteIO Unit |
|
|
239 | (2) |
|
Setting Up the Pass-Through Example |
|
|
241 | (3) |
|
Setting Up the RemoteIO Audio Unit for Capture and Play-Out |
|
|
244 | (5) |
|
The RemoteIO Render Callback |
|
|
249 | (4) |
|
|
253 | (1) |
|
|
253 | (1) |
|
|
254 | (1) |
|
|
254 | (3) |
|
|
257 | (22) |
|
|
257 | (1) |
|
|
258 | (3) |
|
|
258 | (1) |
|
|
258 | (2) |
|
|
260 | (1) |
|
|
260 | (1) |
|
|
261 | (1) |
|
Building a Simple MIDI Synthesizer |
|
|
262 | (5) |
|
|
265 | (2) |
|
Handling MIDI Notifications and Events |
|
|
267 | (2) |
|
|
269 | (1) |
|
|
269 | (8) |
|
Setting Up the MIDIWifiSource Example |
|
|
269 | (2) |
|
Setting Up MIDI over Wi-Fi |
|
|
271 | (2) |
|
|
273 | (2) |
|
Setting Up Your Mac to Receive Wi-Fi MIDI Data |
|
|
275 | (2) |
|
Summary: MIDI Mastery ... but Mobility? |
|
|
277 | (2) |
|
|
279 | (10) |
|
|
279 | (1) |
|
|
280 | (1) |
|
Digital Signal Processing |
|
|
280 | (1) |
|
|
281 | (5) |
|
|
281 | (4) |
|
|
285 | (1) |
|
|
286 | (1) |
|
|
287 | (2) |
Index |
|
289 | |