Здравствуйте, vdimas, Вы писали:
V>Но в теме о реалтайме это оффтоп, ИМХО.
Если бы. Всегда ж у нанимателя есть выбор — искать квалифицированного и опытного разработчика, или взять первого мало-мальски подходящего.
ЕМ>>И кто ж их охрененно-то вылижет?
V>Разработчики в этой области, вестимо.
V>Область-то специфическая. ))
Я Вас умоляю.

Работаю в этой области уже три десятка лет, реально вылизанный софт встречается очень редко. Даже у самих MS в звуковой подсистеме полно косяков и откровенных багов, которые не правятся десятилетиями, поскольку мало кого сильно напрягают — в большинстве случаев можно как-то выкрутиться.
V>DirectShow, DirectSound или всякие speex вылизаны очень даже неплохо.
V>Оно ж всё вылизывалось еще для техники 90-х
Сам движок DirectShow действительно не слишком поменялся, но его никогда не позиционировали именно на
реактивность. Его главное назначение — собрать граф, который будет гнать непрерывный стабильный поток, не предполагающий более быстрых изменений, чем ручные регулировки. Типовая задержка от входа до выхода там обычно в сотни миллисекунд, тщательной настройкой можно стабилизировать на нескольких десятках, но сгородить на нем ту же обработку голоса, при которой не слышно задержки, на стандартных фильтрах не получится.
Ну а DirectSound в Vista и вовсе превратился в тыкву, и теперь работает даже не через более-менее приличный WASAPI, а через самый древний и тормозной MME, поэтому даже для эффектов в играх годится едва-едва.
V>Ес-но, из блоков DirectShow блок эффектов не собирают. ))
Я про законченную конструкцию, в виде ящика с динамиком, в который втыкается гитара.
V>весь блок эффектов представляет из себя один узел фильтра DirectShow.
V>Задача этого фильтра — обработать порцию данных по входу, положив результат по выходу.
Вот
типичный фильтр DirectShow использует буферизацию в десятки-сотни миллисекунд, и это чаще всего не управляется.
V>ASIO — это дыра не через софтовый драйвер, а через нагромождения в железе.
ASIO — это прежде всего API, примитивный и убогий. Через что он будет работать, определяется исключительно реализацией. Но даже самые лучшие реализации ASIO работают через софтовые драйверы, ибо напрямую к железу их никто не пустит.
Есть реализации ASIO даже поверх MME, чтоб хоть как-то завести ASIO-only софт с адаптером, для которого нет драйвера ASIO. А есть реализации MME непосредственно через драйвер ядра, минуя промежуточные уровни звуковой подсистемы.
V>Ведь основные фильтры/микшеры/массивы_микрофонов и прочие приблуды живут в DSP звуковых микросхем, поэтому ASIO был придуман, чтобы обойти именно этот аппаратно-программный конвейер
Кому Вы это объясняете?

ASIO появился, когда я уже довольно плотно работал со звуком на PC, поэтому я хорошо помню всю эту историю. Единственной целью его разработки была тупо
альтернативная работа с железом в обход стандартной виндовой звуковой подсистемы, которая тогда была чуть менее убога, и ориентирована прежде всего на обычный потоковый звук без выкрутас. К тому времени уже был DirectSound, но он был почти полностью заточен под воспроизведение, ибо предназначался в первую очередь для игр и эффектов, а запись в нем была предельно примитивная — возможно, ее предусмотрели просто "на всякий случай", без явных перспектив.
К тому времени чуть не каждый производитель мало-мальски серьезных звуковых карт городил для них свой API, с которым работали "родные" программы и некоторые "дружественные", но этот зоопарк никого не устраивал. Так что единственное, чем отличался API от Steinberg — это простота, достаточно полная документация, и доступный SDK. По уровню сложности ASIO примерно на том же уровне, что и плагины для WinAMP или Foobar2000. Но это было единственное, что на тот момент имелось сколько-нибудь универсального, и индустрия быстро на него подсела (явно не без содействия Steinberg). Ну а потом что-то переделывать было уже поздно, да никто и не горел желанием.
V>получив данные прямо от, считай АЦП (или из пакетов USB 3.0) и отправив их обратно в буфер ЦАП (или прямо в буфер пакетов USB 3.0)
Все это уже почти тридцать лет нетрудно проделать стандартными средствами KS, только удобнее.
V>минуя всяческую обработку ср-вами ОС и драйвера
А вот хрен-то там. Типичный звуковой адаптер обрабатывает поток, состоящий из кадров, в которых отсчеты всех каналов идут подряд, ибо это естественное представление цифрового потокового многоканального звука. В потоках ASIO подряд идут отсчеты каждого из каналов. Поэтому ASIO эффективно работает только с адаптерами, которые сами работают с набором одноканальных потоков, а не с одним многоканальным. Когда драйвер ASIO работает с типичным адаптером, он сам перекладывает отсчеты туда-сюда в промежуточной памяти. Сейчас это, конечно, не занимает столько времени, сколько в 90-х, а тогда это было вполне ощутимым при малых размерах буферов.
V>как оно есть для ЛЮБЫХ подключенных звуковых устройств.
Что значит "для любых"?
V>Не зря ASIO — это опциональная фича драйвера конкретной звуковой микросхемы или платы (в т.ч. внешней).
В каком смысле "не зря"? Написали драйвер ASIO — фича появилась, не написали — ее нет. В этом нет никакой философии, не стоит воспринимать это все с таким восторгом.
V>И не зря эта фича достаточно редка в "обычном" железе.
В железе "этой фичи" вообще нет, и быть не может. Максимум, что может быть в железе — это та самая аппаратная обработка совокупности одноканальных потоков, чтоб избавить от этого драйвер.
V>Устройства ввода и вывода в полноценном ASIO захватываются в исключительном режиме и не доступны аудио-системе Windows
Устройства KS, внезапно, ведут себя точно так же, но при этом являются
стандартными для Windows.
V>Это как бы параллельная вселенная, не связанная с подсистемой аудио виндов
Господи, что за пафос... Как же вам всем засрали мозги, подавая примитивное поделие под видом революции...
V>оно может крутиться независимо друг от друга, что я и делал — проигрывал музыку заднего фона обычными проигрывателями Windows, а гитару подключал через внешнюю USB-картейку по входу и выходу, и далее на выходе простой микшер, куда подключен обычный звуковой выход компа и звуковой выход внешней картейки, а с микшера уже на усилок.
То же самое, внезапно, Вы могли бы сделать с любыми стандартными устройствами Windows, только задержки были бы побольше — за счет той самой универсальности и "невылизанности".