使用NAudio和C#

问题描述

我有一些文件,其中包含我想在按键按下时播放(和循环播放)的音频片段。当按下两个不同的键时,我想同时播放它们各自的片段。我关注了这些博客文章

https://www.markheath.net/post/looped-playback-in-net-with-naudio

https://markheath.net/post/mixing-and-looping-with-naudio

这些帖子中都有LoopStream和WavePlayer类。在KeyDown事件中,每个键都有以下代码

case Keys.H:
    {
        if (!currentlyPlayed[(int)Frequency.A])
        {
                mixer.AddInputStream(WavePlayers.A.Channel);
                currentlyPlayed[(int)Frequency.A] = true;
        }
        break;
    }

在发生KeyUp事件时,我再次为每个键输入以下代码

case Keys.H:
    {
        mixer.RemoveInputStream(WavePlayers.A.Channel);
        currentlyPlayed[(int)Frequency.A] = false;
        break;
    }

mixer被定义为mixer = new MixingWaveProvider32();WavePlayers一个类,其中包含定义如下的WavePlayer对象实例: public static readonly WavePlayer A = new WavePlayer("a.wav");currentlyPlayed是一系列布尔值,用于跟踪正在播放哪个音频片段。如果我删除支票,则会产生很多噪音-我认为这是因为代码段一直都在重置为开始。

如果我足够快地按一个键并且从不释放所有键,则该解决方案有效。当我在表单加载后等待太长时间(大约1秒钟)之后再按任何按钮时,按键什么都不做。当我全部松开它们,然后再次按一个键时,没有声音播放。

我认为它实际上只能使用相同的代码工作一次,但是我无法重现它,因此我可能会记错它。

我缺少一些重要方面吗?我该如何解决这个问题?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)