0%

当你使用音频队列服务播放音频时,源几乎可以是任意的——磁盘文件、基于软件音频合成器、内存中的对象等。本章介绍最常见的情况:播放磁盘上的文件。

当你使用音频队列服务进行录制的时候,你可以将音频录制到任何地方:磁盘文件、网络连接或内存对象等等。本章将介绍中最常见的一种情况,将音频录制到磁盘文件中。

本章将学习到音频队列的功能、架构和内部工作原理。本文介绍音频队列用来播放或录制所用的音频队列(audio queues)、音频队列缓冲区(audio queue buffers)和回调函数,你还可以找到关于音频队列状态和参数的信息,截至到本章的结尾,你将会获得有效使用该技术的概念性理解。

介绍

本文档介绍了如何使用音频队列服务(Audio Queue Services),这是Core Audio的Audio Toolbox框架中的一个C语言编程接口。

程序 application

A specific style of program that displays a graphical interface to the user.

一种特定风格的向用户显示图形界面的program

有很多方法可以调整现有的线程代码,以利用Grand Central Dispatch和操作对象的优势。虽然不是在所有情况下都能摆脱线程,但在你进行转换的地方,性能(以及代码的简单性)可以得到极大的改善。具体来说,使用调度队列和操作队列而取代线程有几个优势:

每当你与底层系统打交道时,必须准备好该任务可能需要花费大量的时间。对内核或其他系统层的调用涉及到上下文的改变,与发生在进程中的调用相比,这种改变是相当昂贵的。因此,许多系统库提供了异步接口,允许你的代码向系统提交一个请求,并在处理该请求时继续做其他工作。Grand Central Dispatch建立在这种一般行为的基础上,允许你提交请求,并使用block和调度队列将结果反馈给你的代码。

Grand Central Dispatch(GCD)调度队列是执行任务的强大工具。调度队列让你可以相对于调用者异步或同步地执行任意的代码块。你可以使用调度队列来执行几乎所有你过去在独立线程上执行的任务。调度队列的优点是使用起来更简单,执行任务的效率相比线程代码高得多。

本章介绍了调度队列,以及如何执行程序中的一般任务。如果你想用调度队列替换现有的线程代码,可参阅迁移线程代码

Cocoa操作对象是一种以面向对象的方式来封你需要异步执行的任务。操作对象被设计成跟操作队列队列一起使用,或者单独使用。因为是基于Objective-C实现的,操作对象可同时在 OS X 和 iOS 中使用。

计算机的早期,单位时间内它可以做的工作是由 CPU 的时钟速度决定的。但随着技术的进步,处理器的设计变得更加紧凑,热量和其他物理限制开始限制处理器的最大时钟速度。于是,芯片制造商寻找其他方法来提高其芯片的总性能。他们最终选择的解决方案是增加每个芯片上的处理器内核数量。通过增加内核数量,单个芯片可以在不增加CPU速度或改变芯片尺寸或热特性的情况下每秒执行更多指令。唯一的问题是如何利用这些额外的内核。