[AKAmplitudeTracker使用audioKit获得的振幅为0.0

问题描述 投票:0回答:1

我想获取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
swift audio audiokit akamplitudetracker akmicrophone
1个回答
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测试它,请查看主机的麦克风设置,并期望其振幅可能与实际硬件有所不同。

© www.soinside.com 2019 - 2024. All rights reserved.