音频流格式启用数据流

news2025/1/15 17:35:07

音频流格式启用数据流

  • 音频流格式启用数据流
    • 使用 AudioStreamBasicDescription 结构
    • 在哪里以及如何设置流格式

音频流格式启用数据流

在单个样本帧级别处理音频数据时,就像使用音频单元一样,仅仅指定正确的数据类型来表示音频是不够的。单个音频样本值中的位布局是有意义的,因此像 Float32 或 UInt16 这样的数据类型不够有表现力。本节将介绍 Core Audio 解决这个问题的方法。

使用 AudioStreamBasicDescription 结构

在应用程序中以及应用程序和音频硬件之间移动音频值的媒介是 AudioStreamBasicDescription 结构:

struct AudioStreamBasicDescription {
    Float64 mSampleRate;
    UInt32  mFormatID;
    UInt32  mFormatFlags;
    UInt32  mBytesPerPacket;
    UInt32  mFramesPerPacket;
    UInt32  mBytesPerFrame;
    UInt32  mChannelsPerFrame;
    UInt32  mBitsPerChannel;
    UInt32  mReserved;
};
typedef struct AudioStreamBasicDescription  AudioStreamBasicDescription;

由于 AudioStreamBasicDescription 这个名字很长,以下缩写为 ASBD。要定义 ASBD 字段的值,请编写类似于下面的代码:

size_t bytesPerSample = sizeof (AudioUnitSampleType);
AudioStreamBasicDescription stereoStreamFormat = {0};
 
stereoStreamFormat.mFormatID          = kAudioFormatLinearPCM;
stereoStreamFormat.mFormatFlags       = kAudioFormatFlagsAudioUnitCanonical;
stereoStreamFormat.mBytesPerPacket    = bytesPerSample;
stereoStreamFormat.mBytesPerFrame     = bytesPerSample;
stereoStreamFormat.mFramesPerPacket   = 1;
stereoStreamFormat.mBitsPerChannel    = 8 * bytesPerSample;
stereoStreamFormat.mChannelsPerFrame  = 2;           // 2 indicates stereo
stereoStreamFormat.mSampleRate        = graphSampleRate;

首先,应该确定采样值的数据类型。此示例使用 AudioUnitSampleType 定义类型,这是大多数音频单元的推荐数据类型。在 iOS 中,AudioUnitSampleType 被定义为 8.24 固定点整数。接下来定义 ASBD 类型变量,初始化为 0 代表不包含任何数据(注意不能跳过该步,否则可能产生一些想不到的问题)。然后就是对变量赋值:

  • mFormatID:格式标识符。例如 kAudioFormatLinearPCM 表示音频单元使用未压缩的音频数据。
  • mFormatFlags:某些 audio unit 使用不规则的音频数据格式即不同的音频数据类型,则该字段需要不同的标志集。例如 3D Mixer unit 需要 UInt16 类型数据作为采样值且 mFormatFlags 需要设置为 kAudioFormatFlagsCanonical。
  • mBytesPerPacket:每个音频包中有多少字节数。
  • mBytesPerFrame:每一帧中有多少字节。
  • mFramesPerPacket:每个包中有多少帧。
  • mFramesPerPacket:每个包中有多少帧。
  • mBitsPerChannel:每个声道有多少位。
  • mChannelsPerFrame:每一帧中有多少声道。
  • mSampleRate:采样率。

在哪里以及如何设置流格式

必须为 audio processing graph 中的关键点设置音频数据流格式。在其他点,系统会设置格式。在其他点上,音频单元连接将流格式从一个音频单元传播到另一个音频单元。

iOS 设备上的音频输入和输出硬件具有系统确定的音频流格式。这些格式总是未压缩的、交错的线性 PCM 格式。该系统在 audio processing graph 中将这些格式强加到 I/O 单元的外向两侧,如图 1-8 所示。

在这里插入图片描述

在图中,麦克风代表输入音频硬件。系统确定输入硬件的音频流格式,并将其强加到远程 I/O 单元输入元素的输入范围内。同样,图中的扬声器代表输出音频硬件。系统确定输出硬件的流格式,并将其强加到远程 I/O 单元输出元素的输出范围上。

应用程序负责在 I/O 单元元素的内侧建立音频流格式。I/O 单元在您的应用程序格式和硬件格式之间执行任何必要的转换。应用程序还负责在 graph 中需要的任何地方设置流格式。在某些情况下,例如在上图的多通道混合器单元的输出中,只需设置部分格式,特别是采样率。

如图 1-8 所示,音频单元连接的一个关键特征是,连接将音频数据流格式从源音频单元的输出传播到目标音频单元的输入。这是一个关键点,因此需要强调:流格式传播通过音频单元连接进行,并且只在一个方向上——从源音频单元的输出到目标音频单元的输入。

流格式传播发生在音频处理图形生命周期的一个特定点,即初始化时。利用格式传播的优势可以显著减少需要编写的代码量。例如,当将多通道混音器单元的输出连接到远程 I/O 单元进行播放时,无需为 I/O 单元设置流格式。

虽然我们可以通过 ASBD 灵活的设置音频数据流的属性,但是建议还是使用当前设备硬件默认使用值。当这样做时,I/O 单元不需要执行采样率转换,这将最大限度地减少功耗,并最大限度地提高了音频质量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1895537.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【spring MVC的执行流程】

SpringMVC可以说是Servlet的封装,屏蔽了Servlet的很多细节,比如Servlet再获取参数的时候需要不停地getParameter,现在只要在SpringMVC方法定义对应的JavaBean,只要属性和参数名一致,SpringMVC就可以帮我们实现将参数封装到JavaBea…

android应用的持续构建CI(三)-- 手动签名

一、背景 关于android应用的签名及其原理,很多文章都有讲述,无意重复赘述。 本文紧接上文,站在运维的角度,对开发是透明的。 但是它又和gradle build 构建动作是紧密相关的。 第一步使用jdk的keytool生成证书文件,…

kubeadm快速部署k8s集群

Kubernetes简介 Kubernetes,简称k8s,容器编排引擎,以API编程的方式管理安排各个容器的引擎。 k8s会在多台node服务器上调度pod进行部署和扩缩容每个pod内部可以含有多个container每个container本质上就是一个服务进程 1、k8s集…

Python 3.x 下的 3D 游戏引擎

在 Python 3.x 中,有几个比较流行的用于开发 3D 游戏的引擎和库。虽然 Python 自身不是一个主流的游戏开发语言,但是可以通过这些库和引擎结合其它语言或者底层渲染引擎来实现复杂的游戏开发。 1、问题背景 在 Linux 系统中,尤其是 Debian 7…

clone()方法

在Java中,clone() 方法是一个非常有趣且强大的工具,用于创建对象的一个副本。这个方法位于 Object 类中,因此可以被所有类使用。让我们讨论一下它的几个要点: 什么是克隆? 克隆就是创建一个对象的新副本,这…

3-1 激活函数和神经网络思想

3-1 激活函数和神经网络思想 主目录点这里

机器学习原理之 -- 梯度提升树(GBT)原理详解

梯度提升树(Gradient Boosting Trees, GBT)是一种强大的机器学习算法,广泛应用于分类和回归任务。它通过集成多个弱学习器(通常是决策树)来构建一个强大的预测模型,具有较高的准确性和鲁棒性。本文将详细介…

android应用的持续构建CI(四)-- 依赖环境(兼容多版本的gradle和jdk)

一、背景 android应用的构建前提是,安装好了gradle和jdk。在实际使用的过程中,不同的android应用,对gradle和jdk的版本要求不一。 于是,在jenkins服务器上,我们需要安装多种版本的gradle和jdk。 安装过jdk的小伙伴应…

Rethinking Federated Learning with Domain Shift: A Prototype View

CVPR2023,针对分布式数据来自不同的域时,私有模型在其他域上表现出退化性能(具有域转移)的问题。提出用于域转移下联邦学习的联邦原型学习(FPL)。核心思想是构建集群原型和无偏原型,提供富有成效的领域知识和公平的收敛目标。将样本嵌入拉近到属于相同语义的集群原型,而…

昇思25天学习打卡营第10天|利用 MindSpore 实现 BERT 对话情绪识别的完整攻略

目录 环境配置 导入模块和库 准备数据集 数据集下载和压缩 数据加载和数据预处理 进行模型的构建和优化器的设置 配置和准备模型的训练过程 测量训练操作的执行时间 模型验证 模型推理 自定义推理数据集 环境配置 首先,利用“%%capture captured_output”来捕获…

银湖资本在中国设立公司运营点,全球投资巨头的新篇章!

近日,全球知名私募股权投资公司银湖资本宣布在中国设立公司运营点。一点是银湖资本在国内安置了两个办事营业点,一个在黑龙江,一个在广州等一线城市。这一举动标志着银湖资本在全球范围内的扩展进入了新的阶段,同时也展示了其对中…

iOS手机竖着拍的照片被旋转了90°的原因以及解决方案

EXIF.getData(IMG_FILE, function () { // IMG_FILE为图像数据 var orientation EXIF.getTag(this, “Orientation”); console.log(“Orientation:” orientation); // 拍照方向 }); 获取拍照方向的结果为1-8的数字: 注意:对于上面的八种方向中&a…

Xilinx FPGA:vivado关于真双端口的串口传输数据的实验

一、实验内容 用一个真双端RAM,端口A和端口B同时向RAM里写入数据0-99,A端口读出单数并存入单端口RAM1中,B端口读出双数并存入但端口RAM2中,当检测到按键1到来时将RAM1中的单数读出显示到PC端,当检测到按键2到来时&…

从单体服务到微服务:预初始化属性多模式 Web 应用开发记录<四> FreeMarker 视图首次渲染优化

欢迎关注公众号&#xff1a;冬瓜白 相关文章&#xff1a; 多模式 Web 应用开发记录<一>背景&全局变量优化多模式 Web 应用开发记录<二>自己动手写一个 Struts多模式 Web 应用开发记录<三>预初始化属性 经过一段时间的开发和测试&#xff0c;我们成功地…

java的工厂设备管理系统-计算机毕业设计源码16179

摘要 在现代制造业中&#xff0c;高效的设备管理对于确保生产过程的顺利进行至关重要。为了满足工厂对于设备管理的需求&#xff0c;我们设计并实现了一个基于 Java 的工厂设备管理系统。 该系统旨在提供一个全面、可靠且易于使用的解决方案&#xff0c;以帮助工厂有效地管理…

temu a4接口 逆向

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 前言(lianxi …

【️讲解下Laravel为什么会成为最优雅的PHP框架?】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

为什么进口主食冻干那么高贵?必入榜主食冻干总结分享

新手养猫人常常会有这样的疑问&#xff1a;为何进口主食冻干价格如此昂贵&#xff0c;但仍有大量养猫达人对其推崇备至&#xff1f;与国产主食冻干相比&#xff0c;进口产品的价格高出3-4倍之多&#xff0c;那么这高昂的价格背后&#xff0c;进口主食冻干是否真的值得推荐&…

偏微分方程笔记(驻定与非驻定问题)

椭圆方程可以看成抛物方程 t → ∞ t\rightarrow\infty t→∞的情况。 抛物&#xff1a; 双曲&#xff1a;

音视频流媒体视频平台LntonAIServer视频监控平台工业排污检测算法

在当今社会&#xff0c;环境保护和可持续发展已成为全球关注的焦点。工业生产作为经济发展的重要支柱&#xff0c;其对环境的影响不容忽视。因此&#xff0c;如何有效地监控和管理工业排污&#xff0c;成为了一个亟待解决的问题。LntonAIServer工业排污检测算法应运而生&#x…