Как выводить разные волновые сигналы через внешние динамики ПК с C++?

Для моего школьного проекта я хотел бы знать, может ли кто-нибудь помочь мне найти способ вывода звука в режиме реального времени через динамики моего ПК. Это должно быть сделано через мою звуковую карту при одновременном воспроизведении параметров воспроизводимого сигнала, таких как фаза, амплитуда, форма волны и т. Д.? Я бы предпочел библиотеку на языке C++, если это возможно, и на платформе Windows по практическим соображениям. Конечно, Linux также возможен.

Самое главное, что я также хотел бы посылать различные формы волны через каждый динамик для создания стационарных волн, как это можно увидеть в этом эксперименте: http://www.youtube.com/watch?v=T56waxJ7bB8

2 ответа

Одна интересная возможность - использовать JACK. Он работает под Linux, Windows и OSX и обеспечивает доступ к аудиовыходу с низкой задержкой. Это также позволяет произвольно перенаправлять вывод в какую-либо другую программу.

Модель программирования JACK очень проста - поддерживается только один тип данных - 32-битный канал floatТаким образом, вместо ручного чередования каналов данных вы можете вместо этого предоставить отдельные экземпляры левого и правого синусоидальных генераторов звука и направить каждый на соответствующий выходной канал.

Также, как второстепенный интерес, JACK2 написан на C++ (хотя внешний API по-прежнему C). Я бы порекомендовал начать с вики JACK и, возможно, изменить один из простых примеров клиентов, чтобы сделать то, что вы пытаетесь.

Для этого есть несколько API.

  • Для Windows XP и выше используйте DirectSound
  • Для Windows Vista/7/8 и выше используйте WASAPI
  • Есть несколько кроссплатформенных API, таких как OpenAL и SDL.

Поищите в Интернете несколько примеров. Поиграйте с этими API и примерами некоторое время и посмотрите, как у вас получается.

Другие вопросы по тегам