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 参数中)乘以文件中音频数据的数据包大小来确定适当的大小。对于未压缩的音频格式,数据包等于一帧。

返回值:参考 Result Codes | Audio File Services

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值