Зачем нам велосипед?

До выхода бетки AIMP3 остается все меньше и меньше времени, соответственно, появляется все больше и больше вопросов у пользователей, особенно после публикации последней новости на сайте об изменении планов (все-таки блог мало кто читает – тут мало полезной информации 🙂 )

Вопросов много, но самый, пожалуй, частый и наиболее “больной” для меня: “Зачем вам свой звуковой движок? Движков в интернете полно, самых разнообразных по функционалу и качеству, так зачем вам изобретать  велосипед?”. Все-таки на разработку движка ушло куча времени…

Итак, обо всем по порядку:

Зачем избавляться от BASS? Ведь есть BASS_ASIO, BASS_WASAPI!

  1. Когда я начинал заниматься движком этих аддонов не было.
  2. Главное слово в первом пункте – аддонов. Эти библиотеки реализованы как довесок к BASS -никаким образом они с ним не интегрируются. По сути эти “аддоны” представляют собой только систему вывода, на вход которой нужно ручками подавать данные. В то время как сам BASS этого не требует – получается как минимум нужно делать две ветки кода – для управления BASS и для управления аддонами.

Так ведь полно других движков, и даже же опенсурс!

  1. Другие движки – кто знает какие сюрпризы они нам преподнесут? Да, согласен, проблем, которые есть в BASS, в них может и не быть, но могут вылезти другие, причем не сразу, а спустя какое-то время.
  2. Касательно опенсурса, тут возникает два момента, с которыми я столкнулся, изучая вопрос: либо написано настолько говено, что хочется все выкинуть и написать заново, либо движок не совсем удовлетворяет требованиям – проблемы с гибкостью, архитектура выбрана не совсем удачно / оптимальна – как ни крути, а нужно разбираться и допиливать. Имхо,  а разбираться в чужом коде, особенно без документации, дело весьма не благодарное, да и времени потребуется не факт, что меньше.

Короче говоря, я посчитал, что сделать свое с нуля будет и полезнее, и быстрее.

Набросал на скорую руку две схемы: что было, что стало:

Основные минусы:

  1. Все крутится вокруг дескрипторов BASS-а (см. ниже)
  2. Из-за п.1 возникла куча проблем с прикручиванием Input-плагинов от Winamp-а. (Наверное, поэтому в AIMP2 своих Input-плагинов и не было)
  3. Самое неудобное место, на мой взгляд, DSP-Manager – часть звуковых эффектов реализуются BASSом, а часть – AIMPом.

Немного раскрою п.3: Причем для CustomDSP BASS предлагает два варианта: либо данные в процедуру приходят в формате 32float, либо в формате источника (я имею в виду только глубину дискретизации). Отсюда возникает: либо писать несколько процедур для каждого формата, либо смириться с тем, что данные будут перегоняться сначала в 32float, затем обратно в исходный формат (а вот тут может возникнуть “треск”, из-за клиппинга).

Да, BASS позволяет жестко указать, чтобы входящий поток конвертился в формат 32float, но это сугубо зависит от возможностей драйвера аудио карты.

Тут схема более красивая 🙂

  • BASS выступает просто как “еще один” декодер, хотя и имеет лидерство. (На данный момент стримминг так же выполняется через BASS)
  • “Аудио поток” конвертирует входящие данные во внутренний формат – 64float (опять же, речь только о глубине дискретизации). А обратное преобразование выполняется только в классе “устройство вывода” (и то, если оно нужно).

Выгоды вышло, может быть и не так много, как хотелось бы 🙂 Но самое главное – это свобода действий.

5 thoughts on “Зачем нам велосипед?

  1. Вадим

    Уххх статейка.Давно в блоге ничего нового не было. Ждемс AIMP3. Тут схема более красивая 🙂 – + адин 🙂

  2. mdimon

    Сильно в тонкости не влазил, новый звуковой движок даст конечному пользователю улучшение звука и удобство установки Винамповских звуковых плагинов? Или я что то не так понял?

  3. La Scorpio

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

  4. Lyuter

    Спасибо за пояснения. Надеюсь новый “велосипед” не подведет в самый ответственный момент. 🙂

Leave a Reply