我想使用 Swift 在 CoreAudio 中实现音量电平表

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

我研究过在

installTap
中使用
AVAudioNode
,但是如何在
installTap
中实时获取音量级别?

player.installTap(onBus: 0, bufferSize: 1024, format: player.outputFormat(forBus: 0)) { (buffer, when) in
    print(buffer.floatChannelData![0])
}

floatChannelData
是一个指向数据的指针,但如何访问实际值?

swift core-audio
1个回答
0
投票

通过取消引用 floatChannelData 指针来使用它,然后访问各个样本。

player.installTap(onBus: 0, bufferSize: 1024, format: player.outputFormat(forBus: 0)) { (buffer, when) in
    let floatData = buffer.floatChannelData![0]
    let frameCount = Int(buffer.frameLength)
    
    // Calculate the RMS volume level
    var rms: Float = 0.0
    for i in 0..<frameCount {
        let sample = floatData[i]
        rms += sample * sample
    }
    rms = sqrt(rms / Float(frameCount))
    
    // Now, 'rms' contains the RMS volume level in real-time
    print(rms)
}

代码会迭代,进行数学计算以给出一小段时间的 RMS。为了随着时间的推移获得更平滑的 RMS,请累积并进行移动平均。

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