Дайте хоть я что по делу напишу.
Интерфейс ASIO документирован и прост как 5 копеек. Программа открывает аудиоинтерфейс (N-канальный), задает частоту дискретизации, далее для входов и выходов создается пара буферов заданного размера (т.е. двойная буферизация). С одной парой буферов для входа и выхода работает программа, другая пара взаимодействует с аудиоинтерфейсом. Для той пары, которая взаимодействует с аудиоинтерфейсом, аудиоданные синхронно со всех входов аудиоинтерфейса пишутся во входной буфер и одновременно данные выходного буфера выдаются в аудиоинтерфейс. По достижению конца буферов происходит одновременное синхронизированное переключение буферов, после чего те буферы, которые взаимодействовали с аудиоинтерфейсом переходят в распоряжение программы и наоборот.
Соответственно это позволяет организовывать ввод/вывод звука с гарантированной задержкой в размер буфера. Такая организация ввода-вывода приводит к тому, что ASIO-драйвер достаточно тесно работает с железом.
В отличии от этого в DirectX все эти задержки между каналами и вводом-выводом не фиксированы и имеют тенденцию разъезжаться. Кроме того, что встроенный в Windows микширующий драйвер вносит некую переменную задержку, он еще и имеет тенденцию менять и уровень звука и частоту дискретизации, которая иногда получается совершенно непредсказуемой (в Висте это заменили на даунсемплинг/апсемплинг всего в единую частоту, причем качество этого алгоритма вызывает у меня большие сомнения). Ну и с точки зрения программиста интерфейс DirectX сам по себе такой, что без стакана не разберешься.
Про основной минус ASIO, что аудиоинтерфейс окрывается в эксклюзивном режиме, уже сказали.
Еще есть минус, что в ASIO программа получает аудиоданные непосредственное в том формате, в котором их дает аудиоинтерфейс. Т.к. этих форматов множество, то запросто что-то может на некоторых аудиоинтерфейсах работать, а на некоторых - нет.