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

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

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

2

Решение

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

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

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

1

Другие решения

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

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

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

0

По вопросам рекламы [email protected]