音频频谱分析与 VU 表处理组件,支持单声道/双声道分离处理、音量增益补偿等功能。
implementation("io.github.qytech:spectrum:0.2.1")
SpectrumVuProcessorStereoSpectrumVuProcessorfftSize = 4096 效果更好SpectrumVuProcessor 和 StereoSpectrumVuProcessor 改为单例,避免可能出现的节点占用情况SpectrumVuProcessor.getInstance(fftSize = 1024)
StereoSpectrumVuProcessor.getInstance(fftSize = 1024)
BaseSpectrumVuCapture 新增 setVolumeCompensationGain(gain: Double) 接口StereoSpectrumVuProcessor 用于处理左右声道分离的频谱显示class StereoSpectrumVuProcessor(
sampleRate: Int = 44100,
fftSize: Int = 1024,
windowType: WindowType = WindowType.HANNING,
muteThreshold: Double = 5e-4,
private val bandCount: Int = 128,
private val minFreq: Double = 50.0,
private val maxFreq: Double = 20000.0,
)
StereoSpectrumVuView(context).apply {
setBarCount(128)
}
private var spectrumVuProcessor: StereoSpectrumVuProcessor? = null
fun startRecord() {
spectrumVuProcessor = StereoSpectrumVuProcessor(bandCount = 128)
spectrumVuProcessor?.setStereoSpectrumListener(object : StereoSpectrumVuUpdateListener {
override fun onStereoSpectrumUpdated(
leftDbList: DoubleArray,
rightDbList: DoubleArray,
) {
_dbLeftList.value = leftDbList
_dbRightList.value = rightDbList
}
override fun onVuDataUpdated(vuData: VuData) {
_vuData.value = vuData
}
})
spectrumVuProcessor?.setCapturePriority(LoopbackPriority.PRIORITY_SOFTWARE_ONLY)
spectrumVuProcessor?.start()
}
fun stopRecord() {
spectrumVuProcessor?.removeStereoSpectrumListener()
spectrumVuProcessor?.stop()
spectrumVuProcessor?.release()
}
PRIORITY_AUTOenum class LoopbackPriority {
PRIORITY_AUTO,
PRIORITY_SOFTWARE_FIRST,
PRIORITY_HARDWARE_FIRST,
PRIORITY_SOFTWARE_ONLY,
PRIORITY_HARDWARE_ONLY
}
class SpectrumVuProcessor {
fun setCapturePriority(priority: LoopbackPriority)
}
LoopbackProcessor;如需库直接处理数据,请使用 SpectrumVuProcessorLoopbackProcessor 新增 release 方法,组件销毁时必须调用