Комментарии 26
ASIO рассчитан в первую очередь на профессиональные карты, с которыми идет драйвер для ASIO. В новых WIndows есть WASAPI, который также позволяет эксклюзивно работать с устройством в обход микшера. Не знаю, впрочем, как там с задержками.
Говорят, на нормальных аудиоинтерфейсах доистижима задержка в 2-5 мс.
такие задержки достижимы, но избыточны. опытным путём давно установлен «стандарт» — 7 миллисекунд. да, можно меньше, но тут либо страдает качество сэмплов, либо стоимость… проще самолёт купить, получить лётное свидетельство, улететь куда-нибудь на море, жить там пол года и вернуться обратно.
В Kernel Streaming (это то, поверх чего реализован WASAPI) программные задержки не превышают десятков-сотен микросекунд, все остальное определяется только железом.
В ASIO нет ничего, чего не было бы в WASAPI, но MS никогда не ставил перед собой задачи сделать удобный API для работы со звуком без лишних задержек. В конце 90-х они напряглись и сделали Kernel Streaming, который покрывает все мыслимые сценарии работы со звуком и видео, и имеет ничтожные задержки, но с ним достаточно сложно работать - как делать сам драйвер, так и писать клиентскую часть в user mode. Поэтому, с появлением WASAPI в Vista, прикладники стали осваивать в первую очередь его. Если бы MS захотел, они сделали бы WASAPI/Exclusive не менее (а то и более) эффективным, чем ASIO, но им это попросту неинтересно. В этой ситуации ASIO занял свою нишу не потому, что хорош или удобен, а просто потому, что ничего лучшего нет. :)
они так же делают и профессиональные звуковые… картами их назвать уже не получится, интерфесы наверное.
про WASAPI что-то слышал, но ничего про это не знаю, предпочитаю работать с простыми, но проверенными вещами. и кстати я не один такой, это как в авиации — работает десятилетиями, но машина сама себя не полетит, ей лётчик нужен.
www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1386r0.pdf
Если что гитхаб страничка базовой реализации, от одного из авторов:
github.com/stdcpp-audio
Я так понимаю, ASIO это довольно стандартная вещь.
У меня есть хорошая звуко
Про программирование Рига ничего сказать не могу. Большой проект, большой компании с большой аудиторией программируется штабом опытных разработчиков в течение долгого времени. Поддерживает как ASIO, так и WASAPI.
Если для вас Guitar Rig — это только «комбик с эффектами», то простое подобие этого можно написать и самому, используя средства, перечисленные в статье.
ASIO - не технология, а лишь программный интерфейс (API). Чтобы сделать драйвер ASIO для любой звуковой железки, нужно реализовать предусмотренный спецификацией COM-интерфейс. Никаких требований к железу в ASIO нет.
Вообще, вокруг ASIO наворочено не меньше мифов, чем вокруг астрологии или гомеопатии. :) В отличие от них, ASIO таки работает и вполне справляется со своей задачей. Но ничего "профессионального" или "высокотехнологичного" там нет - это простенький и довольно кривой интерфейс, явно сделанный наскоро и ненадолго, но зависший в этом состоянии почти на тридцать лет просто потому, что никому не интересно было вдумчиво делать что-то более серьезное.
Просто если железо поддерживает — это будет работать. Нет — с ASIO4ALL также будет.
Железо не может "поддерживать" или "не поддерживать" ASIO, Kernel Streaming, DirectSound или любой другой программный интерфейс - любой из этих интерфейсов может быть реализован для любого железа.
Другое дело, что какое-то железо просто удобнее для реализации отдельных интерфейсов. Например, железо с кольцевым буфером в памяти удобнее для реализации RT Audio в Kernel Streaming, а на железе со scatter-gather DMA его нужно имитировать, но это не принципиально, и не влияет на эффективность, задержки и прочее.
Ещё одна статья уровня "Я нашёл библиотеку, которая делает всю работу за меня" вместо того, чтобы разобраться в реальных принципах работы с ASIO напрямую и на примерах их доходчиво здесь изложить. Заголовок не соответствует содержанию.
Только прочитав про электрогитару, я понял, что речь не про тот ASIO :-D
Но в тему, а есть годные доки по ASIO, но с другой стороны, со стороны драйверописателя? Какие API можно вытянуть, какие кастомные контроллы (просто есть на чём пощупать, но не совсем Windows погромист).
В основном я пользовался только документацией к bass и тем, что смог найти где-то на сторонних форумах.
В ASIO, как таковом, нет никаких "кастомных контролов". :) Он весьма примитивен, как какой-нибудь MME/WinMM. Там есть только API, чтобы узнать количество каналов, задать частоту дискретизации, выделить буферы, запустить процесс, и периодически получать/отдавать данные.
А разные драйверы ASIO имеют различные/режимы параметры, показывая их в окне GUI. У каждого драйвера эти параметры свои, стандарта на них нет.
Приятное с полезным или разработка под ASIO на C++