Swift:尝试使用 UISlider 控制 AVAudioPlayerNode 中的时间

2023-12-08

我正在使用一个AVAudioPlayerNode附加到一个AVAudioEngine播放声音。

为了获取玩家的当前时间,我正在这样做:

extension AVAudioPlayerNode {
var currentTime: TimeInterval {
    get {
        if let nodeTime: AVAudioTime = self.lastRenderTime, let playerTime: AVAudioTime = self.playerTime(forNodeTime: nodeTime) {
            return Double(playerTime.sampleTime) / playerTime.sampleRate
        }
        return 0
    }
 }

}

我有一个指示音频当前时间的滑块。当用户更改滑块值时,.ended事件我必须将播放器的当前时间更改为滑块中指示的时间。 为此:

extension AVAudioPlayerNode {

func seekTo(value: Float, audioFile: AVAudioFile, duration: Float) {
    if let nodetime = self.lastRenderTime{
        let playerTime: AVAudioTime = self.playerTime(forNodeTime: nodetime)!
        let sampleRate = self.outputFormat(forBus: 0).sampleRate
        let newsampletime = AVAudioFramePosition(Int(sampleRate * Double(value)))
        let length = duration - value
        let framestoplay = AVAudioFrameCount(Float(playerTime.sampleRate) * length)
        self.stop()

        if framestoplay > 1000 {
            self.scheduleSegment(audioFile, startingFrame: newsampletime, frameCount: framestoplay, at: nil,completionHandler: nil)
        }
    }
    self.play()
}

然而,我的功能seekTo无法正常工作(我在函数之前和之后打印 currentTime 并且它始终显示负值〜= -0.02)。我做错了什么?我可以找到一种更简单的方法来更改播放器的 currentTime 吗?


我遇到了同样的问题。显然是framestoplay始终为 0,这是因为sampleRate。的价值playerTime.sampleRate在我的例子中始终为 0。

So,

let framestoplay = AVAudioFrameCount(Float(playerTime.sampleRate) * length)

必须替换为

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

Swift:尝试使用 UISlider 控制 AVAudioPlayerNode 中的时间 的相关文章

随机推荐

  • 在客户端上找不到 socket.io.js

    这个问题之前已经被问过 但在之前的回复中没有找到任何解决方案 Socket IO 给我带来了两个问题 服务器端给出了此错误 错误 监听 EACCES 我阅读了堆栈溢出并通过发出 sudo 命令来启动服务器来解决此问题 现在客户端似乎没有按照
  • Winform标签控件文本变化的地方

    我有一个 labelControl Text My name 结果是 My name 符号改变位置 如果我写 My name 结果是 My name 我如何阻止它改变位置 您需要设置RightToLeft属性正确 默认情况下这应该是Righ
  • Python 中的 Hot Deck 插补

    我一直在尝试找到允许我替换数据框列中缺失值的 Python 代码 我的分析重点是生物统计学 因此我不习惯使用平均值 中位数 众数来替换值 我想申请 热甲板插补 方法 我无法在网上找到任何采用数据帧列并使用 Hot Deck Imputati
  • 将应用程序更新到 iPhone 的 appStore 时出现图标错误?

    我正在尝试使用应用程序加载器更新我的应用程序 当我提交存档文件时 我收到此错误 icon specified in the info plist not found under the top level app wrapper icon5
  • Mongodb 服务器启动警告

    我见过其他人有启动警告 但我似乎在这个上找不到任何内容 一些注意事项我在 Ubuntu 14 04 上运行 我的 mongo 版本是 3 0 5 我也尝试过 3 0 6 但有类似问题 我尝试停止 重新启动但无济于事 它似乎正在寻找一个不存在
  • 动态语言 IDE 中的自动补全,特别是 PyDev 中的 Python

    我是 Python 新手 具有静态类型语言 包括大量 Java 背景 在检查了功能 受欢迎程度等之后 我决定在 Eclipse 中使用 PyDev 作为 IDE 我很惊讶自动完成功能似乎无法正常工作于内置程序 例如 如果我在以下之后尝试对数
  • 在 C# 中转换日期时间格式

    如何从网络服务转换此日期时间格式 日期时间值为 timestamp 2014 04 18T14 45 00 02 00 我不想将其转换为 dd mm YYYY hh mm ss 你需要使用 yyyy MM dd T HH mm ssK 格式
  • SELECT、foreach 选项中的 knockoutjs 无容器模板不适用于 Internet Explorer

    我有一个测验 调查应用程序 但在使用 knockoutjs 填充下拉列表时遇到问题 请用 Firefox 或 Chrome 检查这个小提琴 然后用 Internet Explorer 9 或 IE8 或 IE7 knockout 说与 IE
  • 在 VB.Net 中使用 Enter 键的 Tab 键功能

    I have a form with nearly 20 Textbox and 5 Combobox and one control in dependent on the other Now I want to write the co
  • 通过数据映射器处理集合模式中的项目

    我的问题与更新部分有关 特雷斯科的回答于 谁应该处理复杂查询中的条件 数据映射器还是服务层 下面是代码供参考和方便 category new Category category gt setTitle privacy list new Ar
  • Info.plist:操作无法完成。 (XCBUtil.PropertyListConversionError 错误 0。)

    我在调试构建过程中收到此错误 无法从文件读取属性列表 Users TestApp FastApp ios FastApp Info plist 操作无法完成 XCBUtil PropertyListConversionError 错误 0
  • 我可以将 Java 编译为本机代码吗?

    有没有什么方法可以在不需要 JVM 的情况下从 Java 编译为独立 或库 机器代码 曾经有一个名为 GCJ 的工具 它是 GCC 的一部分 但它现在已被删除 现在 GCC 站点中的所有链接都重新定向到其非 GCJ 等效链接 注意 所有评论
  • 从 Angular JS 中的 Web api 下载 csv 文件

    我的 API 控制器返回一个 csv 文件 如下所示 HttpPost public HttpResponseMessage GenerateCSV FieldParameters fieldParams var output new by
  • 确定程序集是否是 GUI 应用程序

    我正在尝试确定 C 程序集是 GUI 还是控制台应用程序 以便构建一个可以自动重新创建丢失的快捷方式的工具 目前 我有一个例程 它递归地步进 Program Files 中的所有目录 以及 x86 目录 对于找到的每个 EXE 该工具都会调
  • 如何从 .java 文件制作 JAR?

    我正在使用 Java 应用程序编写一个简单的程序 不是具有项目的应用程序 而是项目内的应用程序 java 具有单个框架 这两个文件都是 java所以我不能写manifestJAR 需要 The 我的应用程序 java像带有包的类一样开始 然
  • JavaScript:覆盖整个类的构造函数中定义的属性

    我试图覆盖一个类的功能 class MyClass constructor more code myFunction function console log not this can t change the code above MyC
  • 如何让身高真正达到100%

    在 CSS 中 当您将某些内容的宽度或高度设置为 100 时 它实际上只会将其设置为浏览器窗口的 100 有什么办法可以让它100 占整个页面吗 让我重新表述一下 我希望这个元素 div 占据整个页面 无论您滚动多少 让父元素具有 100
  • 如何在 iOS16 的 Swift 中用 NavigationLink(value:label:) 替换 init(destination:tag:selection:label:) ?

    我使用以下 Swift 代码在我的 iPhone 应用程序中执行两件事 调用方法somethingElse 单击按钮时 将视图更改为SecondView Code struct PrimaryView View State var butt
  • 当前帧的绘制时间(以秒为单位),点后仅 2 位数字

    我找不到用点后仅两位数来绘制当前帧的时间 以秒为单位 的方法 我尝试了 drawtext 它做得很好 但是它给出了或 int 秒 或带有许多数字的浮点数 Use the eif绘制文本中的函数 这可用于计算表达式的值并将其打印为指定位数的整
  • Swift:尝试使用 UISlider 控制 AVAudioPlayerNode 中的时间

    我正在使用一个AVAudioPlayerNode附加到一个AVAudioEngine播放声音 为了获取玩家的当前时间 我正在这样做 extension AVAudioPlayerNode var currentTime TimeInterv