目前我正在使用FDWaveFormView来成功地显示从AKMicrophone
或AKAudioFile
录制的音频的波形。
我可以成功地突出显示波形中的特定区域,并且FDwaveForm
会返回音频文件的一系列样本。
我的问题是我找不到一个合适的方法在AKPlayer
中,让我从开始样本播放到结束样本。
我注意到AKSamplePlayer
现在已经过时了,但它确实有一个方法:play(from: Sample, to: Sample)
我想我应该能够进行一些数学计算,将样本位置转换为时间(作为Double
,如AKPlayer
中所述),但我没有找到适当的数学或函数来完成这个任务,有什么提示吗?
为了非常明确地阐述我要做的事情,请参见下面的图像:
注意对于任何可能看到这个问题的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成为这个世界中不可思议的引导者!