AVAudioPCMBuffer浮点数据异常偏小,音频接口削波仍低于1.0的问题
问题:AVAudioPCMBuffer浮点数据峰值异常偏低,如何正确处理并绘制?
我从AVAudioPCMBuffer的浮点数据中提取数值,对比AudioKit的实现逻辑后发现和自己的代码一致,但复制AudioKit的代码后仍存在相同问题。
原代码如下:
guard let floatData = buffer.floatChannelData else { return } let channelCount = Int(buffer.format.channelCount) let length = UInt(buffer.frameLength) // n is the channel for n in 0 ..< channelCount { let data = floatData[n] if analysisMode == .rms { var rms: Float = 0 vDSP_rmsqv(data, 1, &rms, UInt(length)) amp[n] = rms } else { var peak: Float = 0 var index: vDSP_Length = 0 vDSP_maxvi(data, 1, &peak, &index, UInt(length)) amp[n] = peak } }
问题表现为:浮点数值始终过小,无法反映真实信号强度。即使将音频接口增益调至削波状态,数值仍低于1.0,且始终接近0。请问该如何正确处理这些数据并进行绘制?
更新:
将音频接口输入增益调至最大后,使用vDSP_maxvi检测到的峰值始终固定为0.7071067,测试代码如下:
let floatData = buffer.floatChannelData! let length = UInt(buffer.frameLength) var peak: Float = 0 var index: vDSP_Length = 0 vDSP_maxvi(floatData[0], 1, &peak, &index, UInt(length)) print(peak)
内容的提问来源于stack exchange,提问作者Kakhi Kiknadze
相关产品推荐
相关产品推荐

