我想获取AKAmplitudeTracker的音量,但要获取-inf我有什么毛病请帮忙。
AKAudioFile.cleanTempDirectory()
AKSettings.audioInputEnabled = true
AKSettings.bufferLength = .medium
AKSettings.defaultToSpeaker = true
AKSettings.playbackWhileMuted = true
AKSettings.enableRouteChangeHandling = true
AKSettings.enableCategoryChangeHandling = true
AKSettings.enableLogging = true
do {
try AKSettings.setSession(category: .playAndRecord, with: .allowBluetoothA2DP)
} catch {
print("error \(error.localizedDescription)")
}
microphone = AKMicrophone()!
tracker = AKAmplitudeTracker(microphone)
booster = AKBooster(tracker, gain: 0)
AudioKit.output = booster
try AudioKit.start()
=================
extension AKAmplitudeTracker {
var volume: Decibel {
return 20.0 * log10(amplitude)
}
}
=================
输出打印(跟踪器振幅)
0.0
最佳答案
快速浏览一下,似乎您遵循了基本设置,但是您似乎无法正确地跟踪及时生成的数据!在一段时间内会提供振幅数据,用于从麦克风进行的计算,因此可以使用计时器来查看其在时间轴上的外观,如下所示:
func reset() throws {
do {
self.timer.invalidate()
self.timer = nil
} catch {
throw error
}
}
func microphoneTracker() {
guard self.timer == nil else { return }
self.watcher()
let timer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { _ in
log.info(self.akMicrophoneAmplitudeTracker.amplitude)
}
self.timer = timer
}
将
withTimeInterval
更改为想要检查振幅的频率。我认为我为您准备的内容可读性很强,但我将用几句话来分解一下:
AKAmplitudeTracker
的引用,在这里我将其命名为akMicrophoneAmplitudeTracker
.amplitude
logger
,它显示.amplitude
.invalidate
方法停止timer
您可能需要仔细检查代码的其他几件事是,确保跟踪器是信号链的一部分,因为这是
AVAudioEngine
引擎的要求。我还注意到在其他人的代码中,对.start
中的AKAmplitudeTracker
方法的调用如下:akMicrophoneAmplitudeTracker.start()
最后,请记住,如果要通过
Simulator
测试它,请查看主机的麦克风设置,并期望其振幅可能与实际硬件不同。