微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SharpDX XAudio2 无音效参数

如何解决SharpDX XAudio2 无音效参数

我正在使用 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 举报,一经查实,本站将立刻删除。