Когда у тебя настроение "DJ"

Вот и добрался я до панели звуковых эффектов: эхо, реверберация, хорус, фланжер, подъём баса, скорость, темп и тональность.
В AIMP, с которого я всё срисовываю, они есть, и я их делал по немногу параллельно с какими-то другими задачами достаточно долго.

Решил немного отойти от визуального представления данной панели - вместо обычных ползунков в три колонки, сделал круглые ручки. Каждая с маленькой точкой сбоку. Точка эта - выключатель конкретного эффекта, отдельный от того, на сколько ручка выкручена. Смысл в том, что можно выключить эффект, а потом включить обратно ровно туда же, откуда выключил, а не крутить заново.

Две штуки оказались интереснее, чем выглядели: "стереобаза", от которой звук становится шире и "подавление голоса", убирающее то, что записано ровно посередине, а посередине обычно вокал.
Готового кирпичика для этого в BASS нет вообще. Всё, что там есть, умеет каналы складывать, а тут надо вычитать. Пришлось писать эту арифметику руками. Заодно оказалось, что оба эффекта это одна формула с разными числами.

Как работает каждый эффект, я рассказывать не буду, иначе статья будет просто огромной простынёй наполненая какими-то техническими терминами, которые скорей всего никому не нужны. Единственное, расскажу немного про фланжер. Он работает немного по другому, чем в АIMP, а именно то, как гребенка во времени ползет по спектру частоты. У себя я реализовал классическое движение.

Реализация тональности, темпа и скорости заставили меня вообще переделать тот слой, который отвечает за открытие файлов ((, а на старом способе висело всё, что уже работало: сведение треков, торможение пластинки при остановке, часы, полоса позиции.

В этот раз без "отсебятины" тоже не обошлось. ))
Я не знаю, почему-то в AIMP не завезли сдвоенный фильтр (LPF/HPF) который является де-факто давно уже стандартом для всего диджейского оборудования. В общем, добавить его было вообще не сложно. Я его добавил. Крутилка называется просто "Фильтр" и стоит по умолчанию на 12 часов.

В общем, опять видосик с демонстрацией, как работают эффекты. А я дальше пошел готовиться к выпуску первой беты. Посты, которые я пишу, намного запаздывают от реального реализованного функционала. У меня физически не хватает времени на всё.

Демонстрация работы эффектов

На написание селф-тестов мне кажется ушло больше 50% потраченного времени чем на саму реализацию всего функционала. Если что, я для каждой фичи пишу тестирование с записью замера референсов по различным аспектам работы плейера (например что кроссфейд действительно сводит два трека, а не обрывает первый, что громкость доезжает до звуковой карты, а не только до ползунка, что плейлист переживает перезапуск и т.д.) в том числе анализ звукового тракта. Потому что последний стал очень громостким, где каждый кирпичик зависит от других, и включение/выключение каждого кирпичика может сказаться на общем результате. Поэтому каждый кусок, каждый функционал покрыт автотестами. На данный момент реализовано 180 пунктов автотестов, которые по времени выполняются приблизительно 5 минут. Уже не раз меня спасали, когда где-то добавив какой-то новый кирпичик, полный прогон функционала фейлился уже на чём-то реализованном и ранее рабочем.

2