如何解决使用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 举报,一经查实,本站将立刻删除。