Ios Audiokit AKFFTTap在脱机渲染模式下生成0的数组
我试图使用Audiokit及其AKFFTap来获取音频文件的fft数据 我设法在实时处理中获取它们,但只要我在脱机渲染模式下这样做,生成的数据就为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
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)////是的,我认为点击在脱机渲染中有效。查看它。是的,我认为点击在脱机渲染中有效。查看它。