问题描述
我正在使用 SharpDX 的 xaudio2 在 C# 中开发一个应用程序。我知道它已经过时了,但它提供了更好的混响而不是 Cscore。目标本身很简单:加载一个 wav 文件(48khz,24 位,1 声道),通过 xaudio2 混响和几个混响预设进行播放。
我设法实现了正常播放的所有内容,并且还内置了混响。音频文件将使用默认混响设置播放,但是一旦我更改预设或更改特定值 (RoomFilterFreq),文件就不再可听,我不知道为什么会发生这种情况。有没有人有这方面的线索?我研究了几个仍然在线但找不到这种行为的原因的例子。
我正在使用 Net 4.7.2 在 Visual Studio 2019 下编码。代码如下:
xaudio2 = new xaudio2();
xaudio2.StartEngine();
var masteringVoice = new MasteringVoice(xaudio2,1,48000);
var stream = new SoundStream(File.OpenRead(soundFilepath));
SharpDX.Multimedia.WaveFormat waveFormat = stream.Format;
var buffer = new AudioBuffer
{
Stream = stream.ToDataStream(),AudioBytes = (int)stream.Length,Flags = BufferFlags.EndOfStream
};
stream.Close();
sourceVoice = new SourceVoice(xaudio2,waveFormat,true);
// Set Loop
if (f1.loopcheckBox.Checked == true)
{
buffer.LoopBegin = buffer.PlayBegin;
buffer.LoopLength = buffer.PlayLength;
buffer.LoopCount = AudioBuffer.LoopInfinite;
}
// Set Reverb
if (f1.reverbenableButton.BackColor == Color.LightGreen)
{
var reverb = new Reverb(xaudio2);
var reverbparameters = (ReverbParameters)ReverbI3DL2Parameters.Presets.Room;
var effectDescriptor = new EffectDescriptor(reverb);
if (waveFormat.Channels == 1)
{
effectDescriptor.OutputChannelCount = 1;
}
else if (waveFormat.Channels == 2)
{
effectDescriptor.OutputChannelCount = 2;
}
else
{
MessageBox.Show("Channelrate not supported!");
return sourceVoice = null;
}
sourceVoice.SetEffectChain(effectDescriptor);
sourceVoice.SetEffectParameters(0,reverbparameters);
sourceVoice.EnableEffect(0);
}
sourceVoice.SubmitSourceBuffer(buffer,stream.DecodedPacketsInfo);
sourceVoice.Start();
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)