Audio Toolbox 常用函数
Audio Toolbox 常用函数
AudioConverterNew
作用:根据指定的音频格式创建一个新的音频转换器对象。
函数原型:
OSStatus AudioConverterNew(
const AudioStreamBasicDescription *inSourceFormat,
const AudioStreamBasicDescription *inDestinationFormat,
AudioConverterRef _Nullable *outAudioConverter);
参数:
- inSourceFormat:一个 AudioStreamBasicDescription 对象,要转换的源音频的格式。
- inDestinationFormat:一个 AudioStreamBasicDescription 对象,音频转换的目标格式。
- outAudioConverter:生成的 Audio Converter 对象。
AudioConverterFillComplexBuffer
作用:给 Audio Converter 传入由回调函数提供的音频数据,支持非交错和分组格式,转换后的数据存储在 outOutputData 中。
函数原型:
OSStatus AudioConverterFillComplexBuffer(
AudioConverterRef inAudioConverter,
AudioConverterComplexInputDataProc inInputDataProc,
void *inInputDataProcUserData,
UInt32 *ioOutputDataPacketSize,
AudioBufferList *outOutputData,
AudioStreamPacketDescription *outPacketDescription);
参数:
- inAudioConverter:一个 AudioConverterRef 对象,是用于格式转换的音频转换器。
- inInputDataProc:提供音频数据进行转换的回调功能。当转换器准备好获取新的输入数据时,此回调会反复调用。
- inInputDataProcUserData:用户自定义数据,会被传递到 inInputDataProc 回调中。
- ioOutputDataPacketSize:调用函数时传入,标识希望读取多少个重采样后的数据包;函数调用返回,标识实际读取了多少个重采样的数据包。
- outOutputData:AudioBufferList, 用来存储此次调用读取到的重采样的数据。
- outPacketDescription:针对非 PCM 的压缩格式,每个数据包的大小或时长,需要提供对一个的包描述。
返回值:与 AudioConverterComplexInputDataProc 提供的返回值有关。
AudioConverterComplexInputDataProc
作用:向 AudioConverterFillComplexBuffer 函数提供输入数据(待重采样的音频数据)。
函数原型:
typedef OSStatus (*AudioConverterComplexInputDataProc)(
AudioConverterRef inAudioConverter,
UInt32 *ioNumberDataPackets,
AudioBufferList *ioData,
AudioStreamPacketDescription * _Nullable *outDataPacketDescription,
void *inUserData);
参数:
-
inAudioConverter:调用该方法的 AudioConverterRef 对象。
-
ioNumberDataPackets:在输入时,标识转换器本次回调所需的输入音频数据的最小数据包数。在输出时,标识提供用于转换的音频数据包数量,如果没有更多数据,则为 0。
-
ioData:用于保存输入源提供的数据,你负责填充该 buffer。实际填充了多少个包,通过 ioNumberDataPackets 告诉调用者。
-
outPacketDescription:针对非 PCM 的压缩格式,每个数据包的大小或时长,需要提供对一个的包描述。
-
inUserData:AudioConverterFillComplexBuffer 调用时传入的用户数据(inInputDataProcUserData)。
AudioFileReadPacketData
作用:从音频文件中读取音频数据包。
函数原型:
OSStatus AudioFileReadPacketData(
AudioFileID inAudioFile,
Boolean inUseCache,
UInt32 *ioNumBytes,
AudioStreamPacketDescription *outPacketDescriptions,
SInt64 inStartingPacket,
UInt32 *ioNumPackets,
void *outBuffer);
参数:
-
inAudioFile:文件句柄。
-
inUseCache:是否缓存数据,如果多次访问,使用缓存会快一点。
-
ioNumBytes:输入时,标识outBuffer 参数的大小,以字节为单位。在输出时,标识实际读取的字节数。
如果您在ioNumPackets参数中请求的数据包数量的字节大小小于您在 outBuffer 参数中传递的缓冲区大小,您将看到输入和输出值的差异。在这种情况下,此参数的输出值小于其输入值。
-
outPacketDescriptions:读取音频数据包的数据包描述数组。此参数中传递的数组必须足够大,以容纳 ioNumPackets 参数中请求的数据包数量的描述。此参数仅适用于可变比特率数据。如果正在读取的文件包含恒定比特率(CBR)数据,例如线性 PCM,则此参数不会被填充。如果文件的数据格式是 CBR,则传递 NULL。
-
inStartingPacket:读取的第一个数据包的数据包索引。如果一次读不完数据,需要更新读取位置。
-
ioNumPackets:输入时,标识要读取的数据包数量。在输出时,标识实际读取的数据包数量。
-
outBuffer:由自己分配的用于保存读取数据包的内存。通过将请求的数据包数量(在 ioNumPackets 参数中)乘以文件中音频数据的数据包大小来确定适当的大小。对于未压缩的音频格式,数据包等于一帧。