我需要使用 BASS 规范播放音频流。为此,我遵循以下步骤:
- 播放流
- 从文件创建另一个流,并确定后台工作程序中的峰值
- 将具有适当增益值的DSP_Gain应用于正在播放的流。
我意识到规范化只会在工人完成任务后才会发生,这看起来很难看,但这不是重点。
麻烦的是,在确定流的峰值时,得到的值是0到32768之间的一个整数(值越大声音越大),但是DSP_Gain有两个用于设置放大值的变量,没有一个是整数。第一个是Gain - 0 和 1024 之间的双倍,第二个是Gain_dBV - -infinity 和 60 之间的双倍。尝试将峰值作为一个因素会导致播放流内部出现巨大的削波。我的问题是,如何将此峰值转换为 DSP_Gain 的正确参数?下面是获取峰值的代码:
int strm = Bass.BASS_StreamCreateFile(filename, 0, 0, BASSFlag.BASS_STREAM_DECODE);
//initialized stream for getting peak value
int peak=0; //This value will be between 0 and 32768
while (System.Convert.ToBoolean(Bass.BASS_ChannelIsActive(strm)))
{
//calculates peak from a 20ms frame and advances, loops till stream over
int level = Bass.BASS_ChannelGetLevel(strm);
int left = Utils.LowWord32(level); // the left level
int right = Utils.HighWord32(level); // the right level
if (peak < left) peak = left;
if (peak < right) peak = right;
}
应用 DSP_Gain:
DSPGain = new DSP_Gain();
DSPGain.ChannelHandle = stream; //this stream is the already playing one
DSPGain.Gain = *SOME VALUE*
DSPGain.Start();