C# NAudio-波形播放后单击

C# NAudio-波形播放后单击,c#,naudio,C#,Naudio,我听到每个wave文件末尾有一个简短的点击声。我的程序是一个在控制台窗口中运行的OpenGL游戏引擎,对不相关问题的回答建议在控制台应用程序中使用NAudio时使用函数回调,因此问题可能是在那里解决的,我不知道。有什么想法吗 我的用法是: Audio.play(“Music.wav”) 音频类: public class Audio { private NAudio.Wave.BlockAlignReductionStream stream = null; private NAu

我听到每个wave文件末尾有一个简短的点击声。我的程序是一个在控制台窗口中运行的OpenGL游戏引擎,对不相关问题的回答建议在控制台应用程序中使用NAudio时使用函数回调,因此问题可能是在那里解决的,我不知道。有什么想法吗

我的用法是:

Audio.play(“Music.wav”)

音频类:

public class Audio
{
    private NAudio.Wave.BlockAlignReductionStream stream = null;
    private NAudio.Wave.DirectSoundOut output = null;

    public static void Play(string file)
    {
        Audio audio = new Audio();
        audio.DisposeWave();

        string fullPath = @"Audio/" + file;

        if (fullPath.EndsWith(".mp3"))
        {
            NAudio.Wave.WaveStream pcm = NAudio.Wave.WaveFormatConversionStream.CreatePcmStream(new NAudio.Wave.Mp3FileReader(fullPath));
            audio.stream = new NAudio.Wave.BlockAlignReductionStream(pcm);
        }
        else if (fullPath.EndsWith(".wav"))
        {
            NAudio.Wave.WaveStream pcm = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(fullPath));
            audio.stream = new NAudio.Wave.BlockAlignReductionStream(pcm);
        }
        else throw new InvalidOperationException("Not a correct audio file type.");

        audio.output = new NAudio.Wave.DirectSoundOut();
        audio.output.Init(audio.stream);
        audio.output.Play();
    }

    private void DisposeWave()
    {
        if (output != null)
        {
            if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing) output.Stop();
            output.Dispose();
            output = null;
        }
        if (stream != null)
        {
            stream.Dispose();
            stream = null;
        }
    }
}

}

听起来像是在波形不为零的点停止播放。当波形被截断时,由于播放波形中的垂直边缘(即咔嗒声),这将引入可听见的咔嗒声。当你说“结束”时,这是否意味着“中途停止播放”?您确定您的音频文件在播放结束时收敛到零吗?如果播放静默音频文件,仍然单击?以上代码是我的音频“引擎”的全部内容。我只需调用
Audio.play(“file.wav”)
,它就会播放文件并在最后单击。作为一个肮脏的修复,我在文件末尾粘贴了一小段静默,将它们淡出以确保安全,然后重新导出它们,问题就解决了。虽然这有点麻烦,但我肯定会再次困扰我。其他输出方法(即非直接声音)也一样吗?你建议我试试什么?哈哈!那个老问题。这取决于你的目标受众是谁。MMAudio是老派的,应该在任何机器上工作,回到XP和以后。。。其他选择取决于Vista等。我不记得具体细节。我真正想做的就是消除对输出的选择。大约5年前,当我在《愤怒》中使用nAudio时,没有一个选择是完美的,结果是最好不断地向声卡输入(可能是无声的)数据,并将媒体混合到这个无声的输出流中。停止和启动是非常有害的,所以我几乎完全避免了它。