Я работаю над аудиоприложением, записанным в C. Я должен обеспечить живое воспроизведение звука в соответствии с Windows. Я должен решить который аудио API использовать. Я планирую использовать основной waveOut API, но я хотел проверить для наблюдения то, что здесь рекомендует сообщество.
Я хочу код, который будет Просто Работать над любой последней версией Windows без потребности установить библиотеки; и я хочу минимальную задержку.
Я не нуждаюсь или хочу любые "эффекты", я просто должен искренне играть любые волновые образцы, которые генерирует приложение.
Мое понимание - то, что большинство профессиональных аудиоприложений в Windows использует ASIO, который дает превосходную низкую задержку, но я не хочу ASIO, потому что я хочу, чтобы мой код Просто Работал, и у большинства людей нет ASIO предварительно установленным на их компьютерах. (Позднее я могу возвратиться и также добавить ASIO как опцию, но я иду для самого общего решения сначала.)
Есть ли что-нибудь там, которое было бы лучше, чем waveOut для моих целей, или это - лучший выбор?
Это зависит от того, что вы пытаетесь сделать. Базовый waveOut аудио API лучше подходит для потокового аудио. Он позволяет ставить в очередь несколько буферов и автоматически проигрывать их последовательно. Но если аудио проигрывается и вы хотите изменить его или добавить что-то к нему, это относительно сложно.
Аудио DirectX лучше подходит для событийного аудио. Вы можете воспроизводить несколько вещей одновременно, без необходимости микшировать их самостоятельно. Вы можете легко добавлять или удалять маленькие фрагменты аудио - например, воспроизводить звук, когда пользователь нажимает на курок своего пистолета. Но потоковое воспроизведение (т.е. проигрывание 1 буфера за буфером) сложнее. Функция waveOut
waveOut предназначена для облегчения воспроизведения звука, который является постоянным, как, например, .mp3-файл. DirectX предназначен для аудио, которое является прерывистым, как обратная связь в игре.
ASIO похож на худший из waveOut и DirectX с точки зрения сложности программирования. И он не настолько стабилен. Приложения обычно не могут совместно использовать аудиоустройство. Но это дает минимальную задержку доступа к этому аудио оборудованию.
ASIO также дает возможность синхронизировать воспроизведение на нескольких устройствах.
Если Вам не нужно иметь возможность изменять то, что будет воспроизводиться непосредственно перед воспроизведением, и Вам не нужно синхронизировать несколько устройств, тогда Вам не нужно ASIO.
] в дополнение к опциям, упомянутым Джоном Кноллером, есть []WASAPI[], который позволяет гораздо меньше задержек, чем WaveOut, но, к сожалению, доступен только из Windows Vista и далее. [
]Написав потоковое приложение DirectSound самостоятельно, я, конечно же, рекомендую его для малой латентности и простоты использования. Кроме того, оно позволяет установить более качественный формат для воспроизведения на старых версиях Windows.