Лучший API для аудио низкого уровня в Windows?

Я работаю над аудиоприложением, записанным в C. Я должен обеспечить живое воспроизведение звука в соответствии с Windows. Я должен решить который аудио API использовать. Я планирую использовать основной waveOut API, но я хотел проверить для наблюдения то, что здесь рекомендует сообщество.

Я хочу код, который будет Просто Работать над любой последней версией Windows без потребности установить библиотеки; и я хочу минимальную задержку.

Я не нуждаюсь или хочу любые "эффекты", я просто должен искренне играть любые волновые образцы, которые генерирует приложение.

Мое понимание - то, что большинство профессиональных аудиоприложений в Windows использует ASIO, который дает превосходную низкую задержку, но я не хочу ASIO, потому что я хочу, чтобы мой код Просто Работал, и у большинства людей нет ASIO предварительно установленным на их компьютерах. (Позднее я могу возвратиться и также добавить ASIO как опцию, но я иду для самого общего решения сначала.)

Есть ли что-нибудь там, которое было бы лучше, чем waveOut для моих целей, или это - лучший выбор?

16
задан steveha 6 January 2010 в 01:26
поделиться

3 ответа

Это зависит от того, что вы пытаетесь сделать. Базовый waveOut аудио API лучше подходит для потокового аудио. Он позволяет ставить в очередь несколько буферов и автоматически проигрывать их последовательно. Но если аудио проигрывается и вы хотите изменить его или добавить что-то к нему, это относительно сложно.

Аудио DirectX лучше подходит для событийного аудио. Вы можете воспроизводить несколько вещей одновременно, без необходимости микшировать их самостоятельно. Вы можете легко добавлять или удалять маленькие фрагменты аудио - например, воспроизводить звук, когда пользователь нажимает на курок своего пистолета. Но потоковое воспроизведение (т.е. проигрывание 1 буфера за буфером) сложнее. Функция waveOut

waveOut предназначена для облегчения воспроизведения звука, который является постоянным, как, например, .mp3-файл. DirectX предназначен для аудио, которое является прерывистым, как обратная связь в игре.

ASIO похож на худший из waveOut и DirectX с точки зрения сложности программирования. И он не настолько стабилен. Приложения обычно не могут совместно использовать аудиоустройство. Но это дает минимальную задержку доступа к этому аудио оборудованию.

ASIO также дает возможность синхронизировать воспроизведение на нескольких устройствах.

Если Вам не нужно иметь возможность изменять то, что будет воспроизводиться непосредственно перед воспроизведением, и Вам не нужно синхронизировать несколько устройств, тогда Вам не нужно ASIO.

16
ответ дан 30 November 2019 в 21:19
поделиться
[

] в дополнение к опциям, упомянутым Джоном Кноллером, есть []WASAPI[], который позволяет гораздо меньше задержек, чем WaveOut, но, к сожалению, доступен только из Windows Vista и далее. [

]
4
ответ дан 30 November 2019 в 21:19
поделиться

Написав потоковое приложение DirectSound самостоятельно, я, конечно же, рекомендую его для малой латентности и простоты использования. Кроме того, оно позволяет установить более качественный формат для воспроизведения на старых версиях Windows.

2
ответ дан 30 November 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: