Дайджесты новостей
Иллюстрация архитектуры аудиоконвертера Кедр: двухэтапный конвейер извлечения DSD из SACD ISO и фильтрация ультразвукового шума ресемплером SoX в FLAC.

Кедр: архитектура macOS-конвертера SACD в FLAC на связке Electron и Python

Меломаны и аудиофилы хорошо знакомы с форматом Super Audio CD (SACD). Разработанный на рубеже веков компаниями Sony и Philips в рамках спецификации Scarlet Book, он обещал эталонное звучание благодаря технологии Direct Stream Digital (DSD). В отличие от привычной импульсно-кодовой модуляции (PCM), используемой в обычных Audio CD и файлах FLAC, однобитный DSD оцифровывает звук на гигантской частоте 2,82 МГц (DSD64), фиксируя лишь изменение плотности импульсов.

Однако на современных компьютерах образы таких дисков (SACD ISO) часто становятся «мертвым грузом». Их невозможно просто открыть в плеере или скопировать на смартфон: стандартный швейцарский нож медиаобработки ffmpeg не умеет монтировать проприетарную файловую структуру SACD и распаковывать дорожки, сжатые закрытым алгоритмом Direct Stream Transfer (DST).

Разработчик Павел Джагриев создал открытое приложение «Кедр» (Kedr) для macOS и Windows. Проект интересен не только решением редкой задачи конвертации DSD в PCM, но и своей архитектурой: это наглядный кейс того, как современные ИИ-ассистенты вроде Cursor помогают связывать разнородный системный стек — графическую оболочку на Electron, бэкенд на Python и низкоуровневые C-библиотеки.

Двухэтапный конвейер: извлечение и подавление шума

Прямая конвертация «из ISO во FLAC» в один шаг невозможна. «Кедр» разделяет процесс на две независимые стадии:

  1. Демультиплексирование через sacd_extract: специализированная утилита на Си сканирует секторы диска, читает оглавление (TOC) стерео- или 5.1-зоны, на лету выполняет декомпрессию DST и извлекает выбранные дорожки во временные файлы формата DSF (DSD Stream File).
  2. Транскодирование через ffmpeg с фильтрами SoX: Python-бэкенд подхватывает DSF-файлы и конвертирует однобитный сигнал в 24-битный PCM с частотой 176,4 кГц или 88,2 кГц.

Именно на втором этапе кроется главная акустическая ловушка. В однобитном DSD-потоке шум квантования сдвинут в область ультразвука (выше 25–30 кГц). При наивном преобразовании этот мощный высокочастотный шум попадает в звуковой спектр, вызывая интермодуляционные искажения и раздувая размер итоговых FLAC-файлов. Чтобы звук оставался кристально чистым, пайплайн «Кедра» применяет аудиофильский ресемплер SoX и обрезает ультразвук фильтром нижних частот (lowpass на 40 кГц).

# pipeline.py: Управление sacd_extract и конвейером транскодирования
import subprocess
import os

def convert_sacd_track(iso_file: str, track_idx: int, out_folder: str, target_hz: int = 176400):
    # Шаг 1: Извлечение трека из ISO в промежуточный DSF с метаданными
    extract_args = [
        "sacd_extract",
        "-2",                 # Выбор двухканальной стерео-зоны
        "-s",                 # Стереофонический режим
        "-c",                 # Сохранение тегов исполнителя и альбома
        "-t", str(track_idx),
        "-i", iso_file
    ]
    subprocess.run(extract_args, check=True)

    dsf_file = f"track_{track_idx:02d}.dsf"
    flac_file = os.path.join(out_folder, f"track_{track_idx:02d}.flac")

    # Шаг 2: Аудиофильский ресемплинг SoX с подавлением ультразвукового шума
    # -map 0:a:0 строго выбирает аудиопоток, игнорируя встроенные обложки альбомов
    filters = (
        f"aresample=resampler=sox:precision=28:osr={target_hz},"
        f"lowpass=f=40000:p=2,"
        f"volume=6dB"
    )

    ffmpeg_args = [
        "ffmpeg", "-y",
        "-i", dsf_file,
        "-map", "0:a:0",
        "-af", filters,
        "-sample_fmt", "s32",
        "-bits_per_raw_sample", "24",
        "-compression_level", "8",
        flac_file
    ]
    subprocess.run(ffmpeg_args, check=True)

    if os.path.exists(dsf_file):
        os.remove(dsf_file)

Приложение функционирует как через интуитивный интерфейс, так и напрямую из командной строки:

# Просмотр структуры и треклиста SACD-образа в терминале
python3 -m kedr info "Classic_Album.iso"

# Запуск конвертации в Hi-Res FLAC (24 бит / 176.4 кГц) со срезом на 40 кГц
python3 -m kedr convert "Classic_Album.iso" \
  --output ~/Music/HiRes \
  --mode stereo \
  --rate 176400 \
  --lowpass 40000

Инженерные грабли: когда ИИ встречает низкоуровневый C-код

В процессе сборки проекта автор столкнулся с классической проблемой вайбкодинга: нейросети вроде Cursor превосходно генерируют код интерфейса на Electron и связующие скрипты, но мгновенно теряются при встрече с низкоуровневыми багами библиотек C.

При тестировании на свежем FFmpeg 9.0 конвертация регулярно падала с загадочными ошибками:

  • Конфликт видеопотока: в DSF-файлы вшиты графические обложки альбомов. FFmpeg определял их как видеодорожку и падал при попытке применить строгий аудиоформат -sample_fmt s24. Решением стало жесткое мапирование только первого аудиопотока -map 0:a:0.
  • Целочисленное переполнение SoX: при декодировании DSD64 в PCM на частоте 352,8 кГц ресемплер SoX возвращал фатальную ошибку code -22 (Invalid argument). Оказалось, что расчет фильтра упирался в целочисленное переполнение разрядной сетки, и коэффициенты потребовалось перевести в режим чисел с плавающей запятой двойной точности (double).

Практический вердикт

«Кедр» наглядно показывает, что современные ИИ-инструменты сокращают время создания прототипа в разы, но финальное качество и надежность продукта по-прежнему определяются готовностью инженера погружаться в системные логи, архитектурные контракты и особенности оборудования. Для пользователей macOS проект предлагает готовый, полностью открытый инструмент для возвращения раритетных записей в современный цифровой оборот.