以下是在给定输入流句柄 (streamHandle) 的情况下获取 db 级别的方法:
var peak = (double)Bass.BASS_ChannelGetLevel(streamHandle);
var decibels = 20 * Math.Log10(peak / Int32.MaxValue);
或者,您可以使用以下方法获取 RMS(平均)峰值。要获得 RMS 值,您必须将样本长度传入BASS_ChannelGetLevel
. 我在这里使用 20 毫秒,但您可以使用该值来查看哪个最适合您的需求。
var decibels = 0m;
var channelCount = 2; //Assuming two channels
var sampleLengthMS = 20f;
var rmsLevels = new float[channelCount];
var rmsObtained = Bass.BASS_ChannelGetLevel(streamHandle, rmsLevels, sampleLengthMS / 1000f, BASSLevel.BASS_LEVEL_RMS);
if (rmsObtained)
decibels = 20*Math.Log10(rmsLevels[0]); //using first channel (index 0) but you can get both if needed.
else
Console.WriteLine(Bass.BASS_ErrorGetCode());
希望这可以帮助。