Ios Audiokit AKFFTTap在脱机渲染模式下生成0的数组

Ios Audiokit AKFFTTap在脱机渲染模式下生成0的数组,ios,swift,macos,fft,audiokit,Ios,Swift,Macos,Fft,Audiokit,我试图使用Audiokit及其AKFFTap来获取音频文件的fft数据 我设法在实时处理中获取它们,但只要我在脱机渲染模式下这样做,生成的数据就为0 所以我想知道是否可以通过离线渲染模式获得它 以下是我使用的代码: class OfflineProcessingClass { var tracker: AKFrequencyTracker! var fftTap: AKFFTTap! // .... private func process(audioFile: AKAud

我试图使用Audiokit及其AKFFTap来获取音频文件的fft数据

我设法在实时处理中获取它们,但只要我在脱机渲染模式下这样做,生成的数据就为0

所以我想知道是否可以通过离线渲染模式获得它

以下是我使用的代码:

class OfflineProcessingClass {

  var tracker: AKFrequencyTracker!
  var fftTap: AKFFTTap!

  // ....

  private func process(audioFile: AKAudioFile) throws {
    // Make connection
    let player = try AKAudioPlayer(file: audioFile)
    tracker = AKFrequencyTracker(player)
    fftTap = AKFFTTap(tracker)
    AudioKit.output = tracker

    // Setup offline rendering mode
    let timeIntervalInSeconds: TimeInterval = 0.1
    let sampleInterval = Int(floor(timeIntervalInSeconds * audioFile.sampleRate))

     try AudioKit.engine.enableManualRenderingMode(
      .offline,
      format: audioFile.fileFormat,
      maximumFrameCount: AVAudioFrameCount(sampleInterval)
    )

    // Setup buffer
    let buffer = AVAudioPCMBuffer(
      pcmFormat: AudioKit.engine.manualRenderingFormat,
      frameCapacity: AudioKit.engine.manualRenderingMaximumFrameCount
    )

    // Start processing
    try AudioKit.start()
    player.start()

    // Read file offline
    while AudioKit.engine.manualRenderingSampleTime < audioFile.length {
      let frameCount = audioFile.length - manualRenderingSampleTime
      let framesToRender = min(AVAudioFrameCount(frameCount), buffer.frameCapacity)

      try! AudioKit.engine.renderOffline(framesToRender, to: buffer)

      // track is good
      print("\(tracker.amplitude) dB - \(tracker!.frequency) Hz")

      // Array of 0
      print(fftTap.fftData) /////////////// <====== Error is here
    }

    // End processing
    player.stop()
    AudioKit.engine.stop()
  }

}
离线处理类{
var跟踪器:AKFrequencyTracker!
var fftTap:AKFFTTap!
// ....
私有func进程(音频文件:AKAudioFile)抛出{
//联系
let player=尝试AkaAudioPlayer(文件:audioFile)
跟踪器=AKFrequencyTracker(播放器)
fftTap=AKFFTTap(跟踪器)
AudioKit.output=跟踪器
//设置脱机渲染模式
设timeIntervalInSeconds:TimeInterval=0.1
让sampleInterval=Int(floor(timeIntervalInSeconds*audioFile.sampleRate))
尝试AudioKit.engine.EnableManualRendering模式(
.离线,
格式:audioFile.fileFormat,
最大帧数:AVAudioFrameCount(采样间隔)
)
//设置缓冲区
let buffer=AVAudioPCMBuffer(
PCM格式:AudioKit.engine.manualRenderingFormat,
帧容量:AudioKit.engine.ManualRendering最大帧数
)
//开始处理
试试AudioKit.start()
player.start()
//脱机读取文件
而AudioKit.engine.manualRenderingSampleTime打印(fftTap.fftData)////是的,我认为点击在脱机渲染中有效。查看它。是的,我认为点击在脱机渲染中有效。查看它。