От ностальгии к алгоритмам
Помните мою прошлую статью, где мы гоняли один и тот же современный альбом на четырёх типах лент через трёхголовочную Kenwood KX-1100G? Тот эксперимент показал: аналоговый звук жив, но характер цифрового мастера и точность калибровки деки часто влияют на результат сильнее, чем разница между Type I и Type IV.
За кадром осталась другая проблема. Современный стриминговый релиз — это −8…−10 LUFS integrated, True Peak на 0 dBFS и выше, плотный верх, широкий стереобас и brickwall-лимитирование. Записать такой файл на ленту «как есть» — получить грязный верх, нестабильный уровень, клиппинг на записи и бас, который «гуляет» между каналами из‑за crosstalk.
После десятка вечеров с ручной подгонкой gain, bias и лимитеров под каждый трек я устал повторять одну и ту же работу. Так появился CassetteMaster — десктопное приложение на C++20 / JUCE 8, которое автоматически готовит цифровой звук к записи на физическую кассету.
Это не «ленточный эффект с шипением» и не винтажный дисторшн. Задача программы — сохранить digital fidelity: убрать только то, что физически конфликтует с магнитной лентой.

В чём физический конфликт цифры и ленты
Компакт-кассета работает в жёстких физических пределах ушедшей эпохи:
MOL/SOL — ограниченный выходной уровень на высоких частотах;
Self-erasure — избыточные ВЧ «стирают» соседние участки дорожки;
Crosstalk ~30–40 dB между каналами;
Head gap + 4.76 cm/s — естественный спад ВЧ к 14–16 kHz;
Wow/flutter, bias, azimuth — механические ограничения транспорта.
Современный мастеринг создаётся под стриминг и смартфоны. Магнитная лента — нет.
Параметр цифрового мастера | Ограничение ленты (Type I / II) | Что происходит при прямой записи |
|---|---|---|
Громкость −8…−10 LUFS | Насыщение магнитного слоя (MOL) | Глухой, грязный дисторшн |
Яркий, пережатый верх | Self-erasure | Лента «стирает» сама себя на ВЧ |
Широкий стереобас | Crosstalk | Фазовые проблемы, «гуляющий» бас |
True Peak ≥ 0 dBFS | Ограничение по пикам | Жёсткий аналоговый клиппинг |
Наша задача: не сделать lo-fi-плагин, а наоборот — сохранить цифровую точность, сняв исключительно то, что сломает запись на конкретной ленте и деке.
Интерфейс: три шага от FLAC до WAV
Workflow простой:
Add music — drag & drop файла или папки (WAV, FLAC, AIFF, OGG).
Prepare — офлайн-анализ и автоматический мастеринг в фоновом потоке.
Export — 32-bit float WAV, опционально с калибровочными тонами в начале.
Тип ленты (Type I / II / IV) и длина кассеты (C60/C90/C120) задаются до обработки. Дека в текущем UI зафиксирована на Kenwood KX-1100G — той самой, с которой мы проводили эксперимент.
Кнопки Before / After включают A/B-предпрослушивание фрагмента (~45 s). Waveform показывает LUFS, True Peak и маркеры обработки: limiter, HF reduction, de-esser, clip warning.

Архитектура: офлайн-процессор, а не realtime-эффект
CassetteMaster — легковесный офлайн-процессор. Вся тяжёлая работа идёт в worker thread, UI не блокируется. Ядро — статическая библиотека cassette_core, общая для GUI-приложения, опционального CassetteBurner и VST3/AU-плагина.
Поток при нажатии Prepare
AudioFileLoaderзагружает файл вAudioBuffer<float>.EssentiaAnalyzer::extractFeaturesстроит структуруAudioFeatures.CassetteProfile::forRecording(KenwoodKX1100G, tapeType)задаёт потолки LUFS/TP/HF.AdaptiveMasteringProcessor::processвызывает планировщик, опционально ODG loop, затемCassetteAutoMaster::processTrack.ProcessingDiagnosticsрисует маркеры на waveform и пишет лог.UI обновляет панель «After» и статус Ready to export.
Шаг 1. Офлайн-анализ
Когда вы перетаскиваете FLAC в окно, движок вычисляет карту параметров — не для красоты метров, а для принятия решений планировщиком.
Loudness и пики: integrated LUFS (EBU R128-подобный LoudnessMeter), True Peak с oversampling (TruePeakMeter), crest factor, loudness range.
Спектр: доли энергии LF/MF/HF, stereo correlation, LF stereo correlation, ширина стереобазы.
Психоакустика (PsychoacousticMetrics, 24 полосы Bark):
roughness — «грубость» верха (модуляция 20–300 Hz);
sharpness (DIN 45692);
hfAboveMaskingDb — энергия ВЧ выше порога маскирования;
streamingRingingIndex — «звонкость» стримингового мастера;
hfTamerStrength — рекомендуемая глубина HF prep (0…1).
Essentia подключается опционально (CASSETTE_BUILD_ESSENTIA); без неё работает встроенный fallback по BS.1770.
Шаг 2. Умный планировщик
Приложение не обрабатывает все треки одинаково. Класс CassetteMasteringPlanner — сердце автоматизации.
Сначала вычисляется Tape Threat Score (0…1): взвешенная сумма превышений LUFS/TP над потолком профиля, roughness, sharpness, HF above masking, ringing index, низкой LF correlation, высокого HF energy ratio, клиппинга.
Для Kenwood KX-1100G score умножается на (1 − autoPrepRelief), где autoPrepRelief = 0.18 — планировщик менее агрессивен, чем для «голых» профилей IEC.
Шаг 3. Цепочка DSP
Реализация — CassetteAutoMaster::processTrack. Сигнал проходит через кастомный граф обработки:
Инфра-HPF (~25 Hz)
Отрезаем суб-низкие частоты, которые дека всё равно не запишет, но которые бесполезно насыщают магнитный слой. В режиме hot/clean отключён — на peaky материале после HPF limiter давал заметное проседание LUFS.
Side LF mono
Переводим сигнал в Mid/Side. В канале Side отрезаем всё ниже ~120 Hz. Бас становится монофоническим — меньше crosstalk на кассетной головке.
Adaptive HF Tamer
Динамический эквалайзер в полосе 4.5–14 kHz. Если наступает критический пик энергии на ВЧ, который вызовет self-erasure, tamer мягко «присаживает» эту частоту. На спокойном материале прозрачен.
Roughness De-Esser
Борется со специфическим «звоном» цифровых лимитеров — без глобального low-pass.
True Peak Limiter + Post-chain loudness trim
Integrated LUFS и True Peak — два разных ограничения. На кассете важны оба.
Для hot/clean, когда горячие и LUFS, и TP, берётся менее агрессивный из двух gain — чтобы limiter не «съедал» лишние LU.
После limiter/HF chain измеряется LUFS. Если источник был «горячим», но выход ниже cap — makeup (до +4.5 dB). Если выше cap — лёгкий cut. Для тихих источников boost не применяется.
Итеративный цикл до 4 проходов с re-limit только на full prep path.
Физика → DSP
Физическое явление | Ответ CassetteMaster |
|---|---|
Насыщение ленты (Jiles–Atherton) | Gain staging к maxIntegratedLUFS, soft clip только Type I / lo-fi |
Self-erasure / HF bias | Adaptive HF Tamer, Side HF cut |
Crosstalk | Side LF mono (HPF Side < 120–150 Hz) |
Head gap + 4.76 cm/s | Side HF cut по профилю |
Inter-sample peaks | True Peak meter + limiter |
Профили ленты и Kenwood KX-1100G
Профили заданы в CassetteProfile. Для Kenwood — applyKenwoodKX1100GTuning: без эмуляции Dolby HX-Pro, расширенный HF headroom, повышенный biasReductionOnHf на Type II.
Kenwood + | max LUFS | TP ceiling |
|---|---|---|
Type I | −11.0 | −0.8 dBFS |
Type II | −11.5 | −0.5 dBFS |
Type IV | −11.0 | −0.2 dBFS |

Mixtape: папка → Side A / Side B
Перетащите папку с альбомом — программа сканирует аудио, сортирует имена natural sort, считает длительность с gap 2 s между треками.
Если материал не помещается на C60/C90/C120 — greedy packing на несколько кассет:
Каждый трек проходит per-track mastering, затем сводится на timeline стороны.
Тест на живом материале: Charli XCX
Для регрессии DSP — fixture прямо в CI: 90-секундный фрагмент Charli XCX — SS26 Rock Music.
Before | After | |
|---|---|---|
Integrated LUFS | −9.86 | −10.80 |
True Peak | +0.15 dBFS | −0.80 dBTP |
Plan | — | KX-1100G hot/clean |
Планировщик корректно выбрал hot/clean — только level + limiter, без HF prep. Результат укладывается в cap Kenwood Type I (−11 LUFS), TP строго на ceiling.
Почему это важно: в ранних версиях тот же трек «перегашивался» до ~−14 LUFS — limiter и infra-HPF работали в связке и съедали 3–4 dB энергии без необходимости. Новая архитектура устранила перегас, сохранив безопасные пики.
Заключение
CassetteMaster — специализированный tape-oriented mastering, а не универсальный loudness maximizer. Программа сочетает:
объективный и психоакустический анализ стриминговых мастеров;
автоматический выбор глубины обработки — от «только level + TP» до полного HF/LF prep;
профили ленты и деки с физически мотивированными потолками LUFS/TP/HF;
прозрачный DSP с post-chain loudness trim и защитой от двойного перегаса;
mixtape workflow для альбомов и папок;
verifiable quality через автотесты и fixture реального pop-трека.
Спасибо за чтение!

Денис Попков
KMP разработчик в «Black Bricks»
Если вы нашли неточности/ошибки в статье или просто хотите дополнить её своим мнением — то прошу в комментарии! Или можете написать мне в Telegram. Также подписывайтесь на мой ТГ-канал. Там пишу про свои будни, кассеты и винил :>





















