渲染回调函数将音频传给音频单元

渲染回调函数将音频传给音频单元

  • 渲染回调函数将音频传给音频单元
    • 了解音频单元渲染回调函数

渲染回调函数将音频传给音频单元

要将音频从磁盘或内存提供到音频单元输入总线,需使用符合 AURenderCallback 原型的渲染回调函数进行传输。当需要另一片样本帧时,音频单元输入将调用回调函数。

渲染回调函数是唯一可以对音频帧做处理的地方,与此同时,渲染回调具有严格的性能要求,必须遵守这些要求。渲染回调存在于实时优先级线程上,后续渲染调用异步到达。以录制为例,回调函数是按照固定时间间隔进行调用。当下一个渲染调用到达时,如果回调函数仍在生成示例帧以响应之前的渲染调用,那么将在声音中出现空隙。因此,不得在渲染回调函数内加锁、分配内存、访问文件系统或网络连接,或以其他方式执行耗时的任务。

了解音频单元渲染回调函数

下面展示一个符合 AURenderCallback 原型的渲染回调函数的函数声明。本节依次描述了每个参数的目的,并解释了如何使用每个参数。

static OSStatus MyAURenderCallback (
    void                        *inRefCon,
    AudioUnitRenderActionFlags  *ioActionFlags,
    const AudioTimeStamp        *inTimeStamp,
    UInt32                      inBusNumber,
    UInt32                      inNumberFrames,
    AudioBufferList             *ioData
) { /* callback body */ }
  • inRefCon:注册回调函数时传递的指针,一般可传本类对象实例。因为回调函数是 C 语言形式,无法直接访问本类中属性与方法,所以将本类实例化对象传入可以间接调用本类中属性与方法。
  • ioActionFlags:该参数允许回调向音频单元提供没有音频要处理的提示。例如,在想要输出沉默的回调调用期间,可以在回调正文中使用以下语句:*ioActionFlags |= kAudioUnitRenderAction_OutputIsSilence;。此外,当想产生静音时,还必须将 ioData 参数所指向的缓冲区显式设置为 0。
  • inTimeStamp:该参数表示调用回调的时间,可以用作音频同步的时间戳。它包含一个 AudioTimeStamp 结构,其 mSampleTime 字段是一个样本帧计数器。每次调用回调时,mSampleTime 字段的值会按 inNumberFrames 参数中的数字递增。应用程序可以使用 mSampleTime 值来调度声音。
  • inBusNumber:该参数指示调用回调的音频单元总线,允许根据此值在回调中分支。此外,当将回调附加到音频单元时,可以为每个总线指定不同的上下文(inRefCon)。
  • inNumberFrames:该参数表示在当前调用时要求回调提供的音频样本帧数。这些帧的数据保存在 ioData 参数中。
  • ioData:该参数指向回调时必须填充的音频数据缓冲区。放入这些缓冲区的音频必须符合调用回调的总线的音频流格式。如果正在为回调播放静音,需要显式地将这些缓冲区设置为 0(比如使用 memset 函数)。

图 1-7 描绘了 ioData 参数中的一对非交错立体声缓冲区。使用图中的元素来可视化回调需要填充的 ioData 缓冲区的详细信息。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实现模型贴图的移动缩放旋转

技术:threejscanvasfabric 效果图: 原理:threejs中没有局部贴图的效果,只能通过map 的方式贴到模型上,所以说换一种方式来实现,通过canvasfabric来实现图片的移动缩放旋转,然后将整个画布以map…

【智能算法应用】麻雀搜索算法SSA优化Kmeans图像分割

目录 1.算法原理2.数学模型3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】麻雀搜索算法(SSA)原理及实现 2.数学模型 Kmeans是一种无监督的聚类算法,由于参数简洁,时间复杂度低已成功应用于图像分割,取得了良好的分割效果。但传统的 K 均值聚…

Go-知识测试-性能测试

Go-知识测试-性能测试 1. 定义2. 例子3. testing.common 测试基础数据4. testing.TB 接口5. 关键函数5.1 testing.runBenchmarks5.2 testing.B.runN5.3 testing.B.StartTimer5.4 testing.B.StopTimer5.5 testing.B.ResetTimer5.6 testing.B.Run5.7 testing.B.run15.8 testing.B…

无人机便携式侦测干扰设备(定全向)技术详解

无人机便携式侦测干扰设备(定全向)是一种专门针对无人机进行侦测和干扰的设备。它具备定向和全向两种工作模式,能够覆盖较宽的频率范围,有效侦测并干扰无人机与遥控器之间的通信信号,从而达到控制或驱离无人机的目的。…

1999-2022年企业持续绿色创新水平数据

企业持续绿色创新水平数据为研究者提供了评估企业在绿色技术领域创新持续性和能力的重要视角。以下是对企业持续绿色创新水平数据的介绍: 数据简介 定义:企业持续绿色创新水平反映了企业在一定时期内绿色专利申请的持续性和创新能力。计算方法&#xf…

收银系统源码-营销活动-积分商城

1. 功能描述 营运抽奖:智慧新零售收银系统,线上商城的营销插件,由商户运营,用户通过多种渠道可以获取积分,不仅支持在收银端抵用,还可以在积分商城内兑换优惠券或者真实商品,提升会员活跃度&am…

计算机图形学入门24:材质与外观

1.前言 想要得到一个漂亮准确的场景渲染效果,不只需要物理正确的全局照明算法,也要了解现实中各种物体的表面外观和在图形学中的模拟方式。而物体的外观和材质其实就是同一个意思,不同的材质在光照下就会表现出不同的外观,所以外观…

CH09_JS的循环控制语句

第9章:Javascript循环控制语句 本章目标 掌握break关键字的使用掌握continue关键字的使用 课程回顾 for循环的特点和语法while循环的特点和语法do-while循环的特点和语法三个循环的区别 讲解内容 1. break关键字 为什么要使用break关键字 生活中,描…

MongoDB集群搭建-最简单

目录 前言 一、分片概念 二、搭建集群的步骤 总结 前言 MongoDB分片(Sharding)是一种水平扩展数据库的方法,它允许将数据分散存储在多个服务器上,从而提高数据库的存储容量和处理能力。分片是MongoDB为了应对大数据量和高吞吐量需…

13 - Python网络编程入门

网络编程入门 计算机网络基础 计算机网络是独立自主的计算机互联而成的系统的总称,组建计算机网络最主要的目的是实现多台计算机之间的通信和资源共享。今天计算机网络中的设备和计算机网络的用户已经多得不可计数,而计算机网络也可以称得上是一个“复…

idea MarketPlace插件找不到

一、背景 好久没用idea了,打开项目后没有lombok,安装lombok插件时发现idea MarketPlace插件市场找不到,需要重新配置代理源,在外网访问时通过代理服务进行连接 二、操作 ### File-->setting 快捷键 Ctrl Alt S 远端源地…

uni-app 使用Pinia进行全局状态管理并持久化数据

1.引言 最近在学习移动端的开发,使用uni-app前端应用框架,通过学习B站的视频以及找了一个开发模板,终于是有了一些心得体会。 B站视频1:Day1-01-uni-app小兔鲜儿导学视频_哔哩哔哩_bilibili B站视频2:01-课程和uni的…

hdu物联网硬件实验1 小灯闪烁

物联网硬件基础实验报告 学院 班级 学号 姓名 日期 成绩 实验题目 配置环境小灯 实验目的 配置环境以及小灯闪烁 硬件原理 无 关键代码及注释 /* Blink The basic Energia example. Turns on an LED on for one second, then off for one sec…

01 Web基础与HTTP协议

1.1 Web 基础 本章将介绍 Web 基础知识,包括域名的概念、DNS 原理、静态网页和动态网页的相关知识。 1.1.1.域名概述 1.域名的概念 ip地址不易记忆 2.早期使用host文件解析域名 主机名重复主机维护困难 3.DNS 分布式层次式 4.域名空间结构 根域顶级域 组…

在原有的iconfont.css文件中加入新的字体图标

前言:在阿里图标库中,如果你没有这个字体图标的线上项目,那么你怎么在本地项目中的原始图标文件中添加新的图标呢? 背景:现有一个vue项目,下面是这个前端项目的字体图标文件。现在需要新开发功能页&#x…

使用POI实现Excel文件的读取(超详细)

目录 一 导入poi相关的maven坐标 二 实现创建并且写入文件 2.1实现步骤 2.2实现代码 2.3效果展示 ​编辑 2.4注意 三 实现从Excel文件中读取数据 3.1实现步骤 3.2实现代码 3.3结果展示 一 导入poi相关的maven坐标 <!-- Apache poi --><dependency><gro…

【JVM-04】线上CPU100%

【JVM-04】线上CPU100% 1. 如何排查2. 再举一个例子 1. 如何排查 ⼀般CPU100%疯狂GC&#xff0c;都是死循环的锅&#xff0c;那怎么排查呢&#xff1f;先进服务器&#xff0c;⽤top -c 命令找出当前进程的运⾏列表按⼀下 P 可以按照CPU使⽤率进⾏排序显示Java进程 PID 为 2609…

LeetCode题练习与总结:排序链表--148

一、题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4]示例 2&#xff1a; 输入&#xff1a;head [-1,5,3,4,0] 输出&#xff1a;[-1,0,3,4,5]示例 3&am…

HTTP与HTTPS的主要区别

HTTP&#xff08;超文本传输协议&#xff09;与HTTPS&#xff08;超文本传输安全协议&#xff09;的主要区别在于安全性、数据传输方式、默认使用的端口以及对网站的影响。 一、安全性&#xff1a; HTTP是一种无加密的协议&#xff0c;数据在传输过程中以明文形式发送&#x…