ios - AudioKit,AKPlayer : How to play from Samples, 不是时间

标签 ios swift audiokit

我目前正在使用 FDWaveFormView非常成功地显示代表我从 AKMicrophoneAKAudioFile 录制的音频的波形。

我成功地突出显示了波形中的特定区域,FDwaveForm 返回了音频文件中的一系列样本。

我现在的问题是我无法在 AKPlayer 中找到合适的方法来让我从开始样本播放到结束样本。

我注意到 AKSamplePlayer 现在已被弃用,但它确实有一个方法:play(from: Sample, to: Sample)

我的猜测是我可以做一些数学运算来将样本位置转换为时间(作为 AKPlayer 中规定的 Double),但是我还没有找到执行此操作的适当数学或函数,有什么提示吗?

为了清楚地说明我正在尝试做什么,请引用下图:

How to get AKPlayer to play from start and end samples

请注意 对于任何可能看到此问题的 AudioKit 核心成员,我知道有多种 AudioKitUI 组件可以使这更容易,但是只有 FDWaveFormView 给出了我需要这个特定应用程序的功能,我很乐意进一步离线讨论,再次非常感谢。

编辑

我想出了一些我认为已经解决了它的代码:

let startingSampleIndex = self.waveformPlot.highlightedSamples!.min()
let endingSampleIndex = self.waveformPlot.highlightedSamples!.max()
let millisecondsPerSample : Double = 1000 / 44100

let startingDuration : Double = (startingSampleIndex! * millisecondsPerSample) / 1000
let endingDuration : Double = (endingSampleIndex! * millisecondsPerSample) / 1000

print("StartSample:\(startingSampleIndex!) | EndSample:\(endingSampleIndex!) | milliPerSample:\(millisecondsPerSample) | StartDuration:\(startingDuration) | EndDuration:\(endingDuration)")
player.play(from: startingDuration, to: endingDuration)

主要等式是 numberOfSamples * millisecondsPerSample = timeInMilliseconds 除以 1000 我可以将所有内容标准化为秒,这正是 AKPlayer 想要的。如果有人在这里看到有问题,我会喜欢这个建议,但我认为这已经解决了!抱歉,我对 DSP 还是个新手,非常感谢 AudioKit 成为这个世界的不可思议的牧羊人!

最佳答案

要将帧数转换为秒数,您应该除以音频文件的采样率,而不是硬编码的 44100 值:

    guard let frameRange = self.waveformPlot.highlightedSamples else { return }
    let startTime = frameRange.min() / audioFile.fileFormat.sampleRate
    let endTime = frameRange.max() / audioFile.fileFormat.sampleRate
    player.play(from: startTime, to: endTime)

关于ios - AudioKit,AKPlayer : How to play from Samples, 不是时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52249967/

相关文章:

ios - 方向方法不适用于 iPhone plus 设备

ios - 运行模拟器时的对齐问题

swift - 使用 Swift NSDate "timeIntervalSinceNow"时遇到问题

ios - Apple Watchkit 模拟器不可用

ios - 如何使用 Audiokit 对原始值而不是 midi 音符进行排序

swift - "retriggering"AudioKit 中的 Midi 音符

iOS:如何在没有 fps 下降的情况下播放音频?

ios - 适用于 iOS 14.5 的 SwiftUI NavigationLink 无法正常工作

objective-c - iOS:高效绘制多条独立线条

Swift 组合改变了一系列出版商