【问题标题】: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 中重置标志。您不会实时停止,但可以根据音乐目的进行调整。注意:这个我没试过,你可以试试看。

标签: .net winapi beep


【解决方案1】:

Beep 在这里不是一个好的解决方案。生成所需频率的短波形文件,然后使用带有 SND_LOOP 标志的 PlaySound 函数播放它们,如下所示:

KeyDown: 
  PlaySound("wave440.wav", 0, SND_LOOP | SND_FILENAME | SND_ASYNC);
...
KeyUp: 
  PlaySound(NULL, 0, SND_PURGE);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    相关资源
    最近更新 更多