Как воспроизвести тональный сигнал до тех пор, пока пользователь держит клавишу?

Ради интереса я написал музыкальную программу (на C#), которая работает с помощью P/Invoking Beep Функция с соответствующей частотой, когда пользователь нажимает клавишу.

Проблема с этим подходом заключается в том, что Beep требует, чтобы продолжительность была указана заранее, поэтому все заметки имеют одинаковую длину. Это довольно серьезное ограничение для музыкального инструмента.

Что бы я хотел сделать, начать воспроизведение заметки в событии KeyDown и прекратить ее воспроизведение в событии KeyUp. Предпочтительно таким образом, чтобы можно было играть несколько нот одновременно. Есть ли простой способ сделать это в.NET или Win32?

1 ответ

Звуковой сигнал не является хорошим решением здесь. Создайте файлы коротких сигналов для требуемых частот, а затем воспроизведите их, используя функцию PlaySound с флагом SND_LOOP, как показано ниже:

KeyDown: 
  PlaySound("wave440.wav", 0, SND_LOOP | SND_FILENAME | SND_ASYNC);
...
KeyUp: 
  PlaySound(NULL, 0, SND_PURGE);
Другие вопросы по тегам