Pedalboard
|
Слушать несжатый PCM без компрессора — это как смотреть сварку без маски. |
||
| — Аудиофил | ||
|
Если программа падает с OOM-киллером, значит ты опять забыл про чанки, сынок. |
||
| — Бородатый сисадмин | ||
Pedalboard (он же Педалборд, спотифаевская примочка, DAW без мышки) — питоновская обертка над монструозным C++ фреймворком JUCE 6, выкатанная на мороз инженерами Spotify. Создана ради 1 цели: дать дата-саентистам и гитарным задротам возможность пакетом навешивать дилеи, компрессоры и VST3-плагины на терабайты аудио без запуска тяжелых графических секвенсоров.
Суть[править]
Обычный звукорежиссер живет в неповоротливых DAW вроде Ableton, Pro Tools или FL Studio. Там есть красивые крутилки, дорожки и кнопки. Но когда инженерам из лаборатории Spotify Audio Intelligence Lab понадобилось скормить в нейросети 1000000 треков с разной степенью искажения для обучения ИИ-диджея и автотюна, сажать толпу индусов кликать мышкой по кнопкам рендера оказалось накладно.
Существовавшие библиотеки на Питоне типа pySoX и librosa либо безбожно тормозили, либо падали при любой нестандартной ситуации. В итоге Питер Собот (Peter Sobot) сотоварищи взял стандарт индустрии — плюсовый движок JUCE 6, натянул на него `pybind11`, выкинул графический оверхед и выложил репозиторий на GitHub под лицензией GPLv3.
Матчасть[править]
Цифровой звук устроен до безобразия примитивно:
- Микрофон переводит колебания воздуха в электрическое напряжение.
- АЦП делает 44100 (или 48000) замеров амплитуды в секунду (частота дискретизации).
- В памяти это превращается в обычный массив чисел `float32`, где 0.0 — тишина, а 1.0 и -1.0 — предельная громкость.
Если число превышает 1.0, наступает клиппинг — цифровая перегрузка, превращающая музыку в противный скрежет.
Грабли[править]
Попытка крутить звук на голом Питоне всегда упирается в 2 классических косяка:
Тормоза[править]
1 минута стереофайла с частотой 44100 Гц содержит 5292000 значений.
- Обычный цикл `for sample in audio:` с математикой из модуля `math` обрабатывает 1 минуту звука за 8 секунд.
- Тот же алгоритм на C++ через Pedalboard или векторизованный NumPy выполняет операцию за 23 миллисекунды (в 338 раз быстрее).
Память[править]
Форматы MP3 и OGG жмут тишину почти в 0. Если файл `silence.ogg` весит 3.9 Мб, наивный быдлокодер попытается прочитать его целиком в память. При распаковке 12 часов сжатых нулей превратятся в 14.2 Гб несжатого массива в ОЗУ, после чего процесс моментально прибивает Linux OOM-Killer.
Правильный подход — потоковая обработка порциями по 512, 1024 или 16384 сэмпла за итерацию.
Арсенал[править]
В комплекте идет пачка встроенных обработчиков:
Динамика[править]
- Compressor: Давит пики, поднимает тихие звуки, участвует в войне за громкость.
- Limiter: Срезает все, что выше порога, предотвращая клиппинг.
- Gain: Просто умножает громкость на число в дБ.
- NoiseGate: Глушит дорожку, пока сигнал не превысит заданный уровень.
Грязь[править]
- Distortion: Сатурация через гиперболический тангенс (tanh).
- Clipping: Жесткое обрезание верхушек синусоиды.
- Bitcrush: Деградация звука до 8, 4 или 2 бит под саундтреки Dendy и Game Boy.
- GSMFullRateCompressor: Звук мобильника Nokia 3310 из 2002 года с полосой 8000 Гц.
- MP3Compressor: Эмуляция пожатого MP3 с характерным бульканьем артефактов LAME.
Пространство[править]
- Chorus: 1980-е во все поля через модуляцию фазы.
- Phaser: 6-ступенчатый фазовый сдвиг.
- Delay: Классическое эхо.
- Reverb: Стереоревербератор на кодовой базе FreeVerb.
- Convolution: Математическая свертка с импульсным откликом (IR) реальных комнат и гитарных кабинетов.
Фильтры[править]
- LadderFilter: Эмуляция 4-полюсного лестничного фильтра Муга образца 1968 года с крутизной 12 или 24 дБ на октаву.
- HighpassFilter / LowpassFilter: Фильтры 1-го порядка со спадом 6 дБ/октава.
- PeakFilter / HighShelfFilter / LowShelfFilter: Параметрическая эквализация.
Время[править]
- PitchShift: Сдвиг тональности в полутонах.
- time_stretch: Растяжение и сжатие темпа без изменения высоты тона.
VST[править]
Самый жир библиотеки — загрузка бинарников VST3 (Windows, Linux, macOS) и Audio Unit (macOS):
- Любой параметр крутится через свойства объекта (`plugin.cutoff = 1200`).
- Метод `plugin.show_editor()` поднимает родной графический интерфейс плагина прямо из скрипта.
- Поддерживаются не только эффекты, но и виртуальные инструменты, принимающие на вход пачки MIDI-событий.
- Параметр `reset=False` отключает сброс внутренних буферов между чанками, не давая обрываться хвостам реверберации.
Голос бога[править]
Практическое применение для обработки бубнежа в дешевый микрофон без покупки студийного железа вроде Shure SM7B за 500 баксов. Делает из голоса школьника вещательного диктора:
- HighpassFilter(70 Гц): Вырезает грохот подставки и гул вентиляторов.
- PeakFilter(520 Гц, -8 дБ): Вырезает коробочный резонанс (эффект ведра).
- PeakFilter(140 Гц, +11 дБ) + PeakFilter(110 Гц, +4 дБ): Наваливает фундаментального низа, будто диктор выкурил 2 пачки Беломора.
- Distortion(6 дБ): Ламповый перегруз для склейки спектра.
- PeakFilter(2.8 кГц, +3.5 дБ): Подъем читаемости согласных.
- HighShelfFilter(8 кГц, +4 дБ): Добавляет верха и воздух.
- Compressor(-24 дБ, 5.5:1): Жестко трамбует динамику.
- Limiter(-0.5 дБ): Гарантирует отсутствие перегруза.