AVAudioPlayerNode.scheduleFile() 的completionHandler 调用得太早

2023-12-29

我正在尝试在 iOS 8 中使用新的 AVAudioEngine。

看起来player.scheduleFile()的completionHandler被调用before声音文件已播放完毕。

我正在使用长度为 5 秒的声音文件——并且println()- 声音结束前约 1 秒出现消息。

我做错了什么或者我误解了completionHandler的想法吗?

Thanks!


这是一些代码:

class SoundHandler {
    let engine:AVAudioEngine
    let player:AVAudioPlayerNode
    let mainMixer:AVAudioMixerNode

    init() {
        engine = AVAudioEngine()
        player = AVAudioPlayerNode()
        engine.attachNode(player)
        mainMixer = engine.mainMixerNode

        var error:NSError?
        if !engine.startAndReturnError(&error) {
            if let e = error {
                println("error \(e.localizedDescription)")
            }
        }

        engine.connect(player, to: mainMixer, format: mainMixer.outputFormatForBus(0))
    }

    func playSound() {
        var soundUrl = NSBundle.mainBundle().URLForResource("Test", withExtension: "m4a")
        var soundFile = AVAudioFile(forReading: soundUrl, error: nil)

        player.scheduleFile(soundFile, atTime: nil, completionHandler: { println("Finished!") })

        player.play()
    }
}

我看到同样的行为。

根据我的实验,我相信一旦缓冲区/段/文件被“调度”,就会调用回调,而不是在播放完成时调用。

尽管文档明确指出: “在缓冲区完全播放或播放器停止后调用。可能为零。”

所以我认为这要么是一个错误,要么是不正确的文档。不知道哪个

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

AVAudioPlayerNode.scheduleFile() 的completionHandler 调用得太早 的相关文章

随机推荐

  • SQL查询按日期时间分组问题?

    我有这个 SQL 查询 SELECT DISTINCT BatchCode SUM Quantity as Created TotalQuantity Status Destination DateCreated CreatedBy FRO
  • 错误:规则只能有一个资源源(提供资源和测试+包含+排除)

    你好 我有以下错误 我在 vuejs 中有一个应用程序 它工作正常 错误突然出现 重新安装了所有内容 清理缓存 但我找不到解决方法 我希望你的帮助 错误 规则只能有一个资源源 提供的资源和测试 包含 排除 exclude null use
  • 存储稍后转发的变量参数

    我正在开发一个小程序 它使用操作队列顺序执行操作 我希望能够在我的操作中存储参数 直到它们被执行 然后应该可以从exec 动作的方法 我下面有一个小例子 include
  • 如何生成 RDP 文件

    在我的应用程序中 我需要能够导入 RDP 文件 将它们存储在设置中 并从应用程序内运行它们 基本上是 RDP 管理功能 但第二个要求是我不知道如何解决这个问题 基本上我想让用户创建一个新的 RDP 输入主机名 然后剩下的将通过 RDP 程序
  • css left 属性允许的最大负值是多少?

    我有一个场景 我更新 left 值以显示 div 元素的某些部分 就我而言 div 元素的宽度非常长 我使用 left 属性来通过动画来回移动 div 示例代码 slides next live click function var pos
  • 在 React Native 中将状态从子组件传递到父组件

    我的应用程序有一个设置屏幕 子组件 您可以在其中更改有关您自己的信息 我正在尝试将其呈现在我的应用程序的个人资料屏幕 父组件 上 因此 个人资料屏幕会显示您的信息 如果您想更改任何信息 您可以在设置中进行操作 现在 我在设置屏幕中所做的任何
  • Snowflake - 如何检索当前正在执行的过程的名称?

    我想在 javascript 过程本身中访问 Snowflake 中当前执行的过程的名称并将其存储在变量中 当我询问 this 对象时 我可以在 Variant 返回中看到名称 但就 JSON 而言 我相信这是名称而不是值 并且我不确定如何
  • odeint的runge_kutta4与Matlab的ode45的比较

    我想用runge kutta4方法中的odeint C 库 http headmyshoulder github io odeint v2 我已经用Matlab解决了这个问题 我在Matlab中的以下代码来解决x x g x 初始值x1 1
  • 我的图像分割结果图在白色斑块中包含黑色格子

    I m doing an image segmentation with UNet like CNN architecture by Pytorch 0 4 0 It mark foreground as 1 and background
  • 构建设置中的“Objective-C Bridging Header”条目不会出现在 Xcode 8.3 中

    我需要添加一些Objective C将库文件添加到我的项目中 然后我创建了MyProject Bridging Header h我自己归档 但现在我无法设置它的路径 因为在项目的构建设置中我找不到Objective C Bridging H
  • jqPlot 条形图出现问题

    我正在使用 jqPlot 创建条形图 但遇到了一些问题 问题一 图表上的第一个和最后一个条被截断 只显示一半 问题2 我不希望我的数据点跨越整个 x 轴 是否不能让数据跨越整个 x 轴 ex This is what is does rig
  • 是否有具有显式子类型的 ADT 名称?

    我正在为将 ADT 与显式子类型相结合的数据类型寻找合适的名称 在我的一个应用程序中 我使用类似于 ADT 的结构来表示解析树 在解析树上执行递归模式匹配 我发现如果可以将 ADT 与子类型结合起来会非常方便 如下例所示 注意 该示例是用
  • Haskell 保护 lambda 函数?

    是否可以对 lambda 函数设置保护 例如 k k lt 0 gt negative k 0 gt zero otherwise gt positive 其他答案显示了扩展如何LambdaCase and MultiWayIf 自从第一次
  • nginx 显示空白 PHP 页面

    我已经使用 php5 fpm 设置了 nginx 服务器 当我尝试加载该网站时 我得到一个空白页面 没有错误 Html 页面可以正常使用 但 php 则不行 我尝试在 php ini 中打开 display errors 但没有成功 php
  • MeshLab:如何导入 XYZRGB 文件

    当我导入 XYZRGB 我以编程方式生成 时 MeshLab 渲染点云 但颜色丢失 如何为顶点指定纹理 颜色 我尝试过 顶点属性转移 但没有任何反应 将扩展名 xyz 重命名为 txt 然后在导入文件时选择 x y z r g b 选项 在
  • Pandas 和 Python 数据框和条件移位函数

    数据框中是否有条件 移位 参数 例如 假设我拥有一个二手车场并且我的数据如下 SaleDate Car 12 1 2016 Wrangler 12 2 2016 Camry 12 3 2016 Wrangler 12 7 2016 Priu
  • 从 App Engine 使用 GCS json-api 时出现“超出配额”

    我在 App Engine 上使用 Go 大多数情况下 我使用文件 API http godoc org code google com p appengine go appengine file访问 GCS 效果很好 除了删除不起作用 h
  • WPF 不活动和活动

    我正在尝试处理 WPF 应用程序中的用户不活动和活动 以淡入淡出一些内容 经过大量研究后 我决定采用 Hans Passant 发布的 至少在我看来 非常优雅的解决方案here https stackoverflow com questio
  • 为什么我打印的数组末尾有一个 1?

    这是一个超级简单的数组打印 但是当我使用 print r 时我已经到了最后 然后我得到 Array 0 gt 1 1 gt 2 2 gt 3 3 gt 4 1 print r http php net print r已经打印了数组 不需要e
  • AVAudioPlayerNode.scheduleFile() 的completionHandler 调用得太早

    我正在尝试在 iOS 8 中使用新的 AVAudioEngine 看起来player scheduleFile 的completionHandler被调用before声音文件已播放完毕 我正在使用长度为 5 秒的声音文件 并且println