Как выводить разные волновые сигналы через внешние динамики ПК с 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 и примерами некоторое время и посмотрите, как у вас получается.