Audio Toolbox 常用函数

news/2024/7/10 22:43:48 标签: audio toolbox, ios

Audio Toolbox 常用函数

  • Audio Toolbox 常用函数
    • AudioConverterNew
    • AudioConverterFillComplexBuffer
    • AudioConverterComplexInputDataProc
    • AudioFileReadPacketData

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。


http://www.niftyadmin.cn/n/5539709.html

相关文章

华为 eNSP 模拟器 配置RIP实例 动态路由协议

1 实验拓扑 2 配置路由器 #R1 Huawei>sys [Huawei]sysname R1 [R1]interface GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 192.168.1.1 255.255.255.0 [R1-GigabitEthernet0/0/0]qu [R1]rip [R1-rip-1]network 192.168.1.0 [R1-rip-1]version 2 [R1-rip-…

Bpuzzle V1.2 支持任意图片!BlueLife Puzzle (bPuzzle) 是一款简单的游戏,通过按正确的顺序滑动拼图块来玩

BlueLife Puzzle (bPuzzle) 是一款简单的游戏,通过按正确的顺序滑动拼图块来玩。将您选择的图像拖放到主窗口或使用文件菜单选择默认图像。如果图片格式是 JPG,大小无关紧要,但如果是 Png,则应为 800600 像素,然后 bPu…

ChatGPT对话:按ESC键退出Python程序

问:python,这条语句if keyboard.is_pressed(‘Esc’):会阻塞程序,等待按键吗? ChatGPT: if keyboard.is_pressed(Esc): 这条语句不会阻塞程序,它只是检查在执行这条语句时 Esc 键是否被按下。如果 Esc 键…

【论文阅读】-- Interactive Horizon Graphs:改进多个时间序列的紧凑可视化

Interactive Horizon Graphs: Improving the Compact Visualization of Multiple Time Series 摘要1 引言2 相关工作2.1 多个时间序列的可视化2.2 缩减折线图 (RLC)2.3 地平线图 (HG)2.4 大尺度和小尺度变异数据集2.5 多个时间序列…

Linux 【线程池】【单例模式】【读者写者问题】

💓博主CSDN主页:麻辣韭菜💓   ⏩专栏分类:Linux初窥门径⏪   🚚代码仓库:Linux代码练习🚚   🌹关注我🫵带你学习更多Linux知识   🔝 目录 🏳️‍🌈前言 …

从零开始使用 Docsify 搭建文档站点

引言 在当今的技术环境中,拥有一份易于访问和美观的文档是至关重要的。Docsify 是一个非常适合快速搭建文档站点的工具,它简单易用,且不需要生成静态文件。本文将带你一步步从零开始使用 Docsify 搭建一个文档站点。 1. 安装 Node.js 和 np…

CTF实战:从入门到提升

CTF实战:从入门到提升 🚀前言 没有网络安全就没有国家安全,网络安全不仅关系到国家整体信息安全,也关系到民生安全。近年来,随着全国各行各业信息化的发展,网络与信息安全得到了进一步重视,越…

Numpy矩阵运算

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl Numpy概述 Numpy是Python的一个开源数值计算扩展库,主要用于存储和处理大型多维数组和矩阵,并且提供了大量的数学函数来操作这些数组。Numpy是Pytho…