只要用户按住键,如何播放音调?
Posted
技术标签:
【中文标题】只要用户按住键,如何播放音调?【英文标题】:How to play a tone for as long as the user holds a key? 【发布时间】:2014-02-13 06:39:12 【问题描述】:为了好玩,我编写了一个音乐程序(用 C# 编写),它通过在用户按键时以适当的频率 P/Invoking Beep
函数来工作。
这种方法的一个问题是Beep
需要预先指定持续时间,因此所有音符都具有相同的长度。这对乐器来说是一个相当严重的限制。
我想做的是在 KeyDown 事件上开始播放音符,并在 KeyUp 事件上停止播放。优选地,以一种可以同时演奏多个音符的方式。有没有一种简单的方法可以在 .NET 或 Win32 中完成此任务?
【问题讨论】:
我能想到Beep
的一个选项是在keydown 上设置一个标志,开始循环播放检查keydown 标志,在keyup 中重置标志。您不会实时停止,但可以根据音乐目的进行调整。注意:这个我没试过,你可以试试看。
【参考方案1】:
Beep 在这里不是一个好的解决方案。生成所需频率的短波形文件,然后使用带有 SND_LOOP 标志的 PlaySound 函数播放它们,如下所示:
KeyDown:
PlaySound("wave440.wav", 0, SND_LOOP | SND_FILENAME | SND_ASYNC);
...
KeyUp:
PlaySound(NULL, 0, SND_PURGE);
【讨论】:
以上是关于只要用户按住键,如何播放音调?的主要内容,如果未能解决你的问题,请参考以下文章