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

До выхода бетки 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 комментариев

  1. mdimon

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

Добавить комментарий