Как стать автором
Обновить

Комментарии 26

Сначала подумал про boost::asio, и не мог понять, при чем тут гитары :)
я споткнулся до гитар, на потенциальном программисте

ASIO рассчитан в первую очередь на профессиональные карты, с которыми идет драйвер для ASIO. В новых WIndows есть WASAPI, который также позволяет эксклюзивно работать с устройством в обход микшера. Не знаю, впрочем, как там с задержками.

На моей ASUS Xonar Essence STX II можно получить задержку около 10 мс с использованием WASAPI (на ASIO в принципе так же, хотя у моей карты кривой драйвер). ASIO это все же про еще меньшие задержки. Говорят, на нормальных аудиоинтерфейсах доистижима задержка в 2-5 мс.
Говорят, на нормальных аудиоинтерфейсах доистижима задержка в 2-5 мс.

такие задержки достижимы, но избыточны. опытным путём давно установлен «стандарт» — 7 миллисекунд. да, можно меньше, но тут либо страдает качество сэмплов, либо стоимость… проще самолёт купить, получить лётное свидетельство, улететь куда-нибудь на море, жить там пол года и вернуться обратно.
Только все забывают, что эта задержка суммируется с кучей других задержек.
от комбика до уха гитариста звук по воздуху дольше идет ;) — поэтому нет практического смысла в таких маленьких задержках

В Kernel Streaming (это то, поверх чего реализован WASAPI) программные задержки не превышают десятков-сотен микросекунд, все остальное определяется только железом.

В ASIO нет ничего, чего не было бы в WASAPI, но MS никогда не ставил перед собой задачи сделать удобный API для работы со звуком без лишних задержек. В конце 90-х они напряглись и сделали Kernel Streaming, который покрывает все мыслимые сценарии работы со звуком и видео, и имеет ничтожные задержки, но с ним достаточно сложно работать - как делать сам драйвер, так и писать клиентскую часть в user mode. Поэтому, с появлением WASAPI в Vista, прикладники стали осваивать в первую очередь его. Если бы MS захотел, они сделали бы WASAPI/Exclusive не менее (а то и более) эффективным, чем ASIO, но им это попросту неинтересно. В этой ситуации ASIO занял свою нишу не потому, что хорош или удобен, а просто потому, что ничего лучшего нет. :)

ASIO в первую очередь рассчитан на пользователей звуковых карт и DAW от steinberg, которая этот «стандарт» и разработала.
они так же делают и профессиональные звуковые… картами их назвать уже не получится, интерфесы наверное.

про WASAPI что-то слышал, но ничего про это не знаю, предпочитаю работать с простыми, но проверенными вещами. и кстати я не один такой, это как в авиации — работает десятилетиями, но машина сама себя не полетит, ей лётчик нужен.

Ну, WASAPI существует уже пятнадцать лет, и давно является стандартом для мало-мальски серьезных звуковых приложений, которым не только проиграть/записать звук.

Читая заголовок подумал, что будет про разработку «под ASIO», оказалось, статья про работу со сторонней библиотекой, умеющей работать с ASIO. Так бы и писали, «использование библиотеки Bassasio».
В качестве примеров работы с ASIO можно посмотреть исходники проектов rtaudio и portaudio.
Прошу прощения за то, что ввел в заблуждение. В будущем буду ясней излагать мысли) Спасибо за ссылки на исходники, обязательно гляну позже.
Очень интересно!
Я так понимаю, ASIO это довольно стандартная вещь.
У меня есть хорошая звукокарточкакоробочка Focusrite с собственными драйверами, которые видимо много чего хорошего позволяют в т.ч. и задержку до 3-5 мс. Все программы — включая Гитар Риг видят карту с её драйверами и нормально работают. Как это программируется? Никогда не возился со звуком в программном смысле, но хочется попробовать.
ASIO — это не конкретный драйвер, а технология, на основе которой пишется софт для железяк отдельно, учитывая особенности каждой — это как раз те самые собственные драйвера звукокарточек. Именно поэтому весь софт, о котором идет речь, корректно воспринимает карту и ее дровишки, ведь для софта это устройство ASIO. Я это так понимаю, поправьте, если ошибаюсь.
Про программирование Рига ничего сказать не могу. Большой проект, большой компании с большой аудиторией программируется штабом опытных разработчиков в течение долгого времени. Поддерживает как ASIO, так и WASAPI.
Если для вас Guitar Rig — это только «комбик с эффектами», то простое подобие этого можно написать и самому, используя средства, перечисленные в статье.

ASIO - не технология, а лишь программный интерфейс (API). Чтобы сделать драйвер ASIO для любой звуковой железки, нужно реализовать предусмотренный спецификацией COM-интерфейс. Никаких требований к железу в ASIO нет.

Вообще, вокруг ASIO наворочено не меньше мифов, чем вокруг астрологии или гомеопатии. :) В отличие от них, ASIO таки работает и вполне справляется со своей задачей. Но ничего "профессионального" или "высокотехнологичного" там нет - это простенький и довольно кривой интерфейс, явно сделанный наскоро и ненадолго, но зависший в этом состоянии почти на тридцать лет просто потому, что никому не интересно было вдумчиво делать что-то более серьезное.

Круто!) Очень полезная статья!
Steinberg. А так вроде железо должно поддерживать ASIO, если нет, то это странные эмуляции, вроде вывших когда-то KX драйверов.
Если нет подходящего железа, то ставят ASIO4ALL. Это по сути тот же WASAPI… более того, это просто мост, между выходом ASIO и KS/WASAPI, но с дополнительными настройками буфера, задержек и т.д. Тык
Просто если железо поддерживает — это будет работать. Нет — с ASIO4ALL также будет.

Железо не может "поддерживать" или "не поддерживать" ASIO, Kernel Streaming, DirectSound или любой другой программный интерфейс - любой из этих интерфейсов может быть реализован для любого железа.

Другое дело, что какое-то железо просто удобнее для реализации отдельных интерфейсов. Например, железо с кольцевым буфером в памяти удобнее для реализации RT Audio в Kernel Streaming, а на железе со scatter-gather DMA его нужно имитировать, но это не принципиально, и не влияет на эффективность, задержки и прочее.

Ещё одна статья уровня "Я нашёл библиотеку, которая делает всю работу за меня" вместо того, чтобы разобраться в реальных принципах работы с ASIO напрямую и на примерах их доходчиво здесь изложить. Заголовок не соответствует содержанию.

Только прочитав про электрогитару, я понял, что речь не про тот ASIO :-D


Но в тему, а есть годные доки по ASIO, но с другой стороны, со стороны драйверописателя? Какие API можно вытянуть, какие кастомные контроллы (просто есть на чём пощупать, но не совсем Windows погромист).

Изначально я пробовал общаться с ASIO через SDK. У Stainberg с сайта можно скачать, там еще и примерчик есть и мануальчик. Но инфы было мало. По запросу "...asio… " то и дело я получал «boost.asio» или просто инфу про технологию. Потом узнал, что BASS может работать с asio и передумал использовать SDK.

В основном я пользовался только документацией к bass и тем, что смог найти где-то на сторонних форумах.
Прям даже интересно, почему вы так упрямо пишете «Stainberg», хотя даже ссылка в статье у вас «steinberg»
Невнимательность

В ASIO, как таковом, нет никаких "кастомных контролов". :) Он весьма примитивен, как какой-нибудь MME/WinMM. Там есть только API, чтобы узнать количество каналов, задать частоту дискретизации, выделить буферы, запустить процесс, и периодически получать/отдавать данные.

А разные драйверы ASIO имеют различные/режимы параметры, показывая их в окне GUI. У каждого драйвера эти параметры свои, стандарта на них нет.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации