如何从AVAudioEngine的installTap高频获取缓冲区

2024-01-28

我希望像 iOS 语音备忘录应用程序一样在屏幕上渲染音频波形,因此我使用 AVAudioEngine 并在输入节点上安装 Tap。但它以 0.1 秒的频率提供最快的回调,我需要以更快的频率获取缓冲区数据,以便可以在屏幕上绘制越来越多的波形,以实现平滑和实时的可视化。

您能否建议更好的方法?

    let inputNode = self.audioEngine!.inputNode
    let format = inputNode.inputFormat(forBus: 0)
    
    inputNode.installTap(onBus: 0, bufferSize: 4096, format: format) { [self] (buffer, time) in
        processAudioData(buffer: buffer)
        DispatchQueue.main.async {
            audioPlotView.setNeedsDisplay(). // Render waveform on screen
        }
    } 

我认为你误解了如何处理这个问题。您不应该以高频率获取非常少量的新数据,而应该分解代码以在较长的时间间隔内获取更大的数据块。

然后,您可以设置显示代码来启动动画,以便在给定的时间间隔内以新数据的图表形式呈现动画。对于动画来说,1/10 秒实际上是一个非常短的时间间隔。

我建议对 1/10 秒时间间隔的数据幅度进行平均,并将新的平均数据动画到位。

顺便说一句,请参阅更新我发布了您问题的答案 https://stackoverflow.com/a/67660646/205185关于创建数据的动画图表。

我想出的动画看起来像这样:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从AVAudioEngine的installTap高频获取缓冲区 的相关文章

  • 如何在导航栏中添加右键?

    我有一个问题要在导航栏中添加右键 我有两个视图 视图 A 和视图 B 我添加了一个导航栏来查看A 之后我使用了self navigationController pushViewController显示视图 B 视图B的导航栏左侧自动显示一
  • 调整 SKShapeNode 的大小

    如何调整 SKShapeNode 的大小 到目前为止我尝试过的 调整框架大小 box frame width 10 给出错误Cannot assign to the result of this expression SKAction le
  • 对于 Swift 中的计算器

    只是要警告你 我是 Swift 的新手 我仍在适应它的工作原理 我一直在尝试在课堂上完成这个计算器项目 问题是 我需要练习简化代码 现在 当按下数字按钮时 我将其保存在这样的数组中 IBAction func buttonPressed s
  • Swift - 本地通知不会被触发

    我正在 Swift 3 中编码 我只是想发送通知now没有任何延迟或间隔 然而 通知永远不会被触发 这是我的代码 视图控制器代码 import UserNotifications class HomeViewController UIVie
  • iOS 自定义单元格设计放在哪里? awakeFromNib 还是 cellForRowAtIndexPath?

    所以 基本上我用笔尖做了一个定制单元 希望我应用一些定制设计 比如颜色和阴影 我发现了两种应用样式的方法 awakeFromNib override func awakeFromNib super awakeFromNib Containe
  • 如何将导航栏大标题转换为多行,居中对齐

    我正在尝试设计具有多行居中大标题文本的视图控制器 就像苹果的 Ask Siri Settings gt General gt Keyboards gt About Ask Siri Dictation and Privacy 我可以使用以下
  • 从数组中获取随机字符串[重复]

    这个问题在这里已经有答案了 我试图从数组 firstArray 中获取随机字符串并将其打印在 UILabel label 中 我似乎无法弄清楚并且出现错误 感谢您的帮助 我尝试搜索但找不到任何最新的教程 方法 import UIKit cl
  • Swift 中的柯里化,未来会有新的声明语法吗?

    今天刚在 Linux 上安装了 Swift 来看看 尝试一个柯里化的小例子会导致警告 柯里化的语法将来会改变 但是我找不到任何关于这个新语法的信息 我尝试过的柯里化示例 func do stuff x Int y Int z Int gt
  • Firestore 更新后仅获取文档一次

    我有一个 tableView 它从 Firestore 集合中获取所有文档 并且我只想在用户刷新 tableView 后将最后一个文档添加到 Firestore 时获取一次 然后我想删除侦听器 以便当用户刷新 tableView 时仅获取文
  • 带闭包的默认属性值使编译器重新编译所有文件

    This source https developer apple com library content documentation Swift Conceptual Swift Programming Language Initiali
  • SwiftUI 列表与右侧的部分索引?

    是否可以有一个在右侧有索引的列表 就像下面 SwiftUI 中的示例一样 我在 SwiftUI 中做了这个 Contacts swift TestCalendar Created by Christopher Riner on 9 11 2
  • 使用 iOS 8 自定义键盘发送图像?

    我一直在为 iOS 8 开发自定义键盘 但在尝试使用键盘发送图像时偶然发现了一个问题 我做了一些研究 似乎没有一种简单的方法可以做到这一点UITextDocumentProxy因为只有NSStrings被允许 我是否忽略了使用自定义键盘发送
  • 在 Cocoa OS X AVPlayer 中播放 HLS (m3u8) - Swift

    基本上我正在尝试在 Cocoa Swift 中使用 AVPlayer 播放 m3u8 HLS Live Stream 我对这门语言比较陌生 所以基本上掌握了一些示例代码 http qiita com ono matope items 23d
  • 如何接收有关与我共享的记录中所做更改的 CloudKit 通知?

    我有两个 iCloud 帐户 A and B 在两个不同的设备上 来自其中之一 A 我将 ckrecord 分享给另一个人 B 像这样 let controller UICloudSharingController controller p
  • 作为!与 Swift 中 Xcode 6.3 中的 as 运算符对比

    Xcode 6 3 使 Swift 发生了很大变化 我必须更换每个应用程序中的数十个位置as gt as 为什么 现在有什么规则 在 Swift 1 2 之前 as运算符可用于执行两种不同类型的转换 具体取决于要转换的表达式的类型及其要转换
  • 在 iOS 中,如何创建一个始终位于所有其他视图控制器之上的按钮?

    无论是否呈现模态或用户执行任何类型的转场 有没有办法让按钮在整个应用程序中 始终位于顶部 而不是屏幕顶部 有什么方法可以让这个按钮可拖动并可捕捉到屏幕上吗 我正在以苹果自己的辅助触摸作为此类按钮的示例 您可以通过创建自己的子类来做到这一点U
  • 无法在 ios 应用程序中通过 googlecast 正确投射视频

    我正在开发一个基于 AVPlayer 的自定义视频播放器项目 尝试整合谷歌演员 我已经根据谷歌图进行了集成 https codelabs developers google com codelabs cast videos ios http
  • 我的 UICollectionView 无法使用 Swift 平滑滚动

    我有一个CollectionView它使单元出队取决于message类型 例如 文本 图像 我遇到的问题是当我向上 向下滚动时滚动确实很不稳定 因此用户体验不是很好 这仅在第一次加载单元格时发生 之后滚动就会平滑 我有什么想法可以解决这个问
  • 动态调度协议扩展不适用于多个目标

    这是我的主要目标中的代码 所以不是测试目标 protocol ProtocolA func dontCrash extension ProtocolA func dontCrash fatalError func tryCrash dont
  • NSPredicate IN 从数组元素查询

    对于一个古怪的标题表示歉意 我有一个 Int 数组 我想定义一个 NSPredicate 来过滤掉 connectionType 等于数组中包含的值的项目 所以基本上是这样的 fetchRequest predicate NSPredica

随机推荐

  • 未捕获的引用错误:ga 未定义

    我想知道人们点击某个特定按钮的次数 使用谷歌分析应该非常简单 但是 我在谷歌控制台上遇到了 未捕获的引用错误 ga未定义 错误 并且找不到如何修复它 我在头部添加了这个
  • 在 Android 上将 USB 波特率从 9600 更改为 115200

    我有一个 Arduino 它以 115200 波特率串行发送数据 有一个应用程序以 9600 波特率从 Arduino 接收数据 代码是 Arduino USB serial converter setup Set control line
  • Yii CGridView 超链接在新选项卡中打开

    我已经将我的 yii CGridview 的一栏作为超链接 但单击它后 它会在同一选项卡中打开链接地址 如何在新选项卡中打开链接地址 array header gt Name name gt name value gt CHtml link
  • 在 WinRT 应用程序中处理 2、3、4、5 个手指点击、双击和按住手势

    我可以轻松处理 1 根手指Tapped DoubleTap and Holding像这样的手势 public MainPage this InitializeComponent this Tapped mc Tapped this Doub
  • 如何旋转MKMapView并保持Annotation和视图不旋转?

    我正在制作一个显示用户当前位置的 MKMapView 我想像 Google 地图应用程序一样旋转地图 但不旋转注释 我使用以下代码 void locationManager CLLocationManager manager didUpda
  • 替换 msbuild 变量中的字符

    我需要替换要传递给 msbuild 4 中的 exec 任务的变量中的字符 具体来说 我需要替换所有出现的反斜杠 带有正斜杠 in the MSBuildProjectDirectory 多变的 eg
  • play2框架我的模板是没有看到的。 : 包views.html不存在

    问题是控制器看不到我想使用的模板 etl admin compile info 编译 3 个 Scala 源代码和 4 个 Java 源代码 来源 D ECLIPSE WORKSPACES play2 apps etl admin targ
  • 在谷歌地图图块上绘制形状文件[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一些形状文件想要在 Google 地图图块上绘制 做到这一点最有效的方法是什么 一种方法可能是使用 pkg RgoogleMaps
  • 如何传递手势选择器的参数

    我向标签添加了一个手势 当点击时我想触发 showlbl 它将以 int 作为参数 但是我收到一个编译器错误 UITapGestureRecognizer gestlbl0 UITapGestureRecognizer alloc init
  • Spring 视图不尊重 @UIScope 注释?

    我遇到 Vaadin spring 注释的问题 UIScope 定义如下 SpringComponent SpringView name AdminView VIEW NAME UIScope public class AdminView
  • Symfony 4 全局路由前缀

    我在 Symfony 4 应用程序中找不到有关全局路由前缀的任何信息 唯一的thing https symfony com blog new in symfony 3 4 prefix all controller route names我
  • ImportError:尝试导入祝福时没有名为“_curses”的模块

    我正在尝试运行这个 from blessings import Terminal t Terminal print t bold Hi there print t bold red on bright green It hurts my e
  • 处理不平衡问题后,数据高度倾斜,准确性下降

    在对数据进行预处理 例如缺失值替换和异常值检测 后 我使用随机化方法对数据进行分区 并使用 WEKA 删除百分比过滤器 我的数据集是一个高度倾斜的数据集 不平衡比为 6 1 对应于负类和正类 如果我使用朴素贝叶斯分类器对数据进行分类 而不处
  • TSQL:字符串错误的日期时间

    有一些与此相关的帖子 但我对 TSQL 很陌生 我无法理解它们 所以请原谅 我的程序有 BEGIN TRY INSERT INTO dbo myprocedure Mydate VALUES CONVERT DATETIME mydate
  • C# using 语句捕获错误

    我只是查看 using 语句 我一直知道它的作用 但直到现在还没有尝试使用它 我想出了以下代码 using SqlCommand cmd new SqlCommand reportDataSource new SqlConnection S
  • 调用远程ESB客户端错误

    我正在尝试从远程客户端发送和 esb 消息 但我不断收到此错误 org jboss soa esb listeners message MessageDeliverException org apache ws scout transpor
  • 如何使 Google Chrome 扩展示例正常工作?

    最近我决定编写一个非常简单的 Google Chrome 扩展 它要做的就是当用户按下扩展程序的按钮时 使用 JavaScript 从网页中隐藏一些 DOM 元素 由于我对 Chrome 扩展一无所知 所以我开始阅读教程 然后我发现了这个
  • 了解青春痘

    我不明白这个 DI容器 是如何使用的 官方网站上显示的示例没有告诉我任何信息 http pimple sensiolabs org http pimple sensiolabs org 基本上我有一个简单的站点 它由一组类组成 DB 类 C
  • Emacs:Tramp 不起作用

    我尝试通过 Emacs 通过 Tramp 打开远程文件 require tramp setq tramp default method ssh 我收到一条来自 Emacs 的消息 TRAMP 等待远程 shell 的提示 Emacs 挂起并
  • 如何从AVAudioEngine的installTap高频获取缓冲区

    我希望像 iOS 语音备忘录应用程序一样在屏幕上渲染音频波形 因此我使用 AVAudioEngine 并在输入节点上安装 Tap 但它以 0 1 秒的频率提供最快的回调 我需要以更快的频率获取缓冲区数据 以便可以在屏幕上绘制越来越多的波形