AKAmplitudeTracker 幅度使用 audioKit 获得 0.0
Posted
技术标签:
【中文标题】AKAmplitudeTracker 幅度使用 audioKit 获得 0.0【英文标题】:AKAmplitudeTracker amplitude getting 0.0 using audioKit 【发布时间】:2020-06-04 07:25:38 【问题描述】:我想获取 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
【问题讨论】:
【参考方案1】:看了一眼,好像你按照基本的设置,你似乎没有正确地跟踪及时生成的数据!在从麦克风获取的计算的时间段内提供幅度数据,因此要查看时间线中的情况,您可以使用计时器,如下所示:
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
引擎的要求;我还注意到在其他一些人的代码中调用了AKAmplitudeTracker
中的方法.start
,如下:
akMicrophoneAmplitudeTracker.start()
最后,请记住,如果您通过Simulator
对其进行测试,请查看您的主机的麦克风设置,并预计振幅可能与实际硬件不同。
【讨论】:
以上是关于AKAmplitudeTracker 幅度使用 audioKit 获得 0.0的主要内容,如果未能解决你的问题,请参考以下文章