Список изменений

Версия 0.9.2 (17.02.2025)

  • Оптимизация производительности с помощью Numba JIT (Адаптивное STFT): Вычислительный цикл адаптивного преобразования STFT _adaptive_stft_numba_loop полностью переведен на машинный код с использованием компилятора Numba (декоратор @jit(nopython=True, parallel=True, cache=True)). Генерация оконных функций Ханна для каждого кадра перенесена во внутреннюю JIT-функцию _numba_hanning_window_internal.
  • Сохранение энергии сигнала: Реализована автоматическая нормализация весов сгенерированных окон произвольной длины по сумме их квадратов непосредственно в JIT-цикле. Это гарантирует сохранение стабильной амплитуды аудиосигнала при переходе между окнами разной длины во времени.
  • Адаптивное 2D-сглаживание масок: Основной цикл Гауссова сглаживания масок с изменяемым во времени радиусом скомпилирован в высокопроизводительную функцию _numba_adaptive_gaussian_2d_jit, что позволило производить ресурсоемкую двумерную фильтрацию матриц высокого разрешения в реальном времени.
  • Повышение стабильности запуска: Инициализация глобального перехватчика необработанных исключений sys.excepthook перенесена на этап до создания экземпляра QApplication, что обеспечило надежный перехват и логирование ошибок на этапе запуска графической подсистемы Qt.
  • Устранение предупреждений компилятора в Softmax: В функции calculate_softmax_weights добавлено принудительное извлечение действительной части комплексных чисел (np_module.real) перед возвратом массивов во избежание предупреждений компилятора Numba о потере мнимой части при операциях со спектрограммами.

Версия 0.9.1 (15.02.2025)

  • Переработка архитектуры логирования (PrintLogger): Разработан легковесный логгер PrintLogger для замены стандартных файловых обработчиков. Функция setup_logging переопределена на вывод сообщений напрямую в системные потоки sys.stdout и sys.stderr с принудительным вызовом flush(). Это предотвратило блокировки файлов и сбои прав доступа в изолированных средах (сборки через PyInstaller).
  • Строгая типизация параметров и поддержка Enum в API: Функция generate_parameter_descriptions доработана для автоматического экспорта метаданных перечислений в API. Параметры, типизированные как Enum (например, StereoIPDSource или EMDMethod), теперь приводятся к базовым строковым значениям, исключая передачу невалидных параметров. В модуле typed_dicts.py проведено четкое разделение типов-литералов и классов перечислений.
  • Исправление математического описания кроссовера: В модуле dsp/filters/time_varying.py исправлен расчет полосы высоких частот. Формула H_hp[:, n] = (H_hp1 * H_hp2).astype(np.float32) приведена к математически корректному виду, обеспечивая полную комплементарность Линквица-Райли для трехполосной системы кроссовера и устраняя фазовые провалы в ВЧ-области.
  • Защита от вычислительных сбоев в граничных условиях: В функции process_band_adaptive_phase добавлены явные проверки размерностей входных матриц перед вызовами np.argpartition и np.squeeze. Это предотвратило падения по ошибкам IndexError/ValueError при обработке вырожденных спектрограмм (с одной частотной полосой или одним кадром).
  • Стабильность смешивания фаз на тихих участках: В функции calculate_blend_weights добавлено принудительное суммирование малого числа epsilon со знаменателем при нормализации весов Softmax, что предотвратило появление неопределенностей NaN в кадрах абсолютной тишины.
  • Контроль границ при обработке чанков: В параллельном воркере обработки аудио-чанков внедрен строгий контроль границ при слайсинге двумерных матриц частотных фильтров (H_lp_tf, H_bp_tf, H_hp_tf), что устранило падения на стыке последнего чанка из-за ошибок округления длин.
  • Обязательная зависимость от Numba: Библиотека numba переведена в статус обязательной зависимости (REQUIRED_PACKAGES), так как скомпилированные JIT-функции стали критически важны для обеспечения целевой производительности адаптивного STFT.

Версия 0.9.0 (11.02.2025)

  • Подавление вертикальных ВЧ-артефактов (Новый модуль DSP): Разработан алгоритм обнаружения и сглаживания локальных спектральных вспышек (транзиентных вертикальных полос в ВЧ-диапазоне) в модуле hf_peak_suppression.py. Порог детекции аномальных кадров рассчитывается динамически на основе медианы спектрального потока и среднеквадратичного отклонения.
  • Частотное 2D-сглаживание аномалий: Для обнаруженных проблемных кадров комплексные значения STFT-бинов сглаживаются одномерным Гауссовым фильтром вдоль оси частот отдельно для действительной и мнимой частей. Внедрен механизм защиты огибающей (Envelope Protection) для ограничения максимального ослабления и сохранения яркости звука.
  • Перевод стерео-параметров на Enums: Источник разности фаз STEREO_IPD_SOURCE переведен на строгое перечисление StereoIPDSource (значения MIX и DOMINANT). Алгоритмы LWS-смешивания и CoupledIPD-связывания фаз доработаны для безопасного приведения типов, исключая сбои при обработке.
  • Управление параметрами детектора в GUI: В «Редактор Параметров» интегрированы новые слайдеры управления алгоритмом подавления ВЧ-всплесков (активация, диапазон частот, чувствительность, сила сглаживания и степень сохранения огибающей).
  • Изоляция сбоев фильтрации каналов: В оркестраторе превью усовершенствован перехват исключений. В случае возникновения ошибок фильтрации Баттерворта на одном из аудиоканалов (из-за нехватки длины или нечисловых данных), воркер изолирует сбой, помечает канал как неактивный и продолжает обработку остальных каналов без аварийного завершения потока.
  • Адаптивное кеширование результатов полос: Спектрограммы и маски, вычисленные для каждой полосы в процессе предпросмотра, теперь принудительно сохраняются в оперативной памяти с уникальным хэш-ключом параметров маскирования. При изменении настроек EQ или Influence Map этот слой кеша используется повторно, снижая общую нагрузку на процессор.

Версия 0.8.3 (17.10.2024)

  • Интерактивное отображение координат и уровней (Tooltip): На холсте Matplotlib реализовано отслеживание движения курсора мыши в реальном времени. Координаты курсора динамически пересчитываются в индексы кадров и частотных бинов. Пользователю выводится плавающий тултип с указанием времени (с), частоты (Гц) и точного точечного значения уровня в децибелах (для спектрограмм) или линейного коэффициента вклада (для масок).
  • Кеш обработанных полос превью (RAM-кеширование): Внедрен оптимизационный слой для фонового предпросмотра. Перед запуском ресурсоемкой фильтрации генерируется хэш-ключ на основе путей к файлам, границ сегмента и значений параметров. При совпадении ключа спектрограммы и маски мгновенно извлекаются из ОЗУ, ускоряя переключение видов отображения СЧ/ВЧ-полос в GUI.
  • Интеграция параметров EMD на уровень профилей: Параметры эмпирической модовой декомпозиции (EMD) перенесены из глобальных настроек в профили редактора (секция «Пост-обработка: Фаза и EMD»). Это позволило применять индивидуальные параметры EMD-сглаживания для разных стадий в рамках одного пакета.
  • Новые параметры подавления артефактов: В редактор добавлен параметр SHARPNESS_REDUCTION_FREQ_START для регулировки частоты шельфа в плагине снижения резкости.
  • Смещение частотных порогов в ВЧ-область: Пороги HPSS-очистки перкуссии, сглаживания фазы и коррекции спектрального наклона смещены выше (в диапазон от 10000 Гц) для максимального сохранения прозрачности и деталей в области средних частот.
  • Безопасное транспонирование многоканального аудио: В модуле подготовки входов транспонирование массивов перенесено на этап строго после пиковой нормализации и спектральной балансировки, что устранило сбои выравнивания осей.
  • Фиксация длины массивов в A-взвешивании: Добавлен принудительный вызов librosa.util.fix_length для выравнивания массивов весов к текущему количеству кадров, предотвращая ошибки несовпадения размерностей на сложных шагах STFT.

Версия 0.8.2 (14.10.2024)

  • Бесшовное возобновление воспроизведения (A/B-тестирование): В AppState интегрирован атрибут playback_start_time. При переключении вкладок или изменении параметров эквалайзера программа рассчитывает текущую позицию воспроизведения, останавливает поток и мгновенно перезапускает его со смещением с точностью до сэмпла. Это позволяет осуществлять мгновенное бесшовное сравнение звука «до/после».
  • Адаптивное частотно-зависимое сглаживание перкуссии в HPSS: Реализован алгоритм частотно-зависимой генерации весов с поддержкой сигмоидного перехода. Сигнал перкуссии параллельно фильтруется двумя медианными фильтрами разного размера: в НЧ/СЧ-области сохраняются четкие недеформированные транзиенты, а в ВЧ-области применяется максимальный размер окна для подавления фазовых артефактов.
  • Декаплинг логики предпросмотра: Функция process_segment_for_preview переведена на использование структуры метаданных BatchGroupData и EditTarget вместо прямых строковых путей к файлам. Поиск путей к источникам слияния суперразрешения (AudioSR/FlashSR) теперь выполняется динамически внутри модуля предпросмотра.
  • Опциональное сохранение инструментального трека: В виджет группы добавлен чекбокс «Сохранить Инстр.». При его активации воркер сохранения параллельно запускает независимый конвейер финализации для накопленного инструментального аудиосигнала и экспортирует его отдельным WAV-файлом с суффиксом _INSTRUMENTAL.
  • Устранение комплексных значений в Softmax: В функции расчета весов добавлено принудительное извлечение действительной части np.real перед приведением к типу np.float32, что устранило предупреждения о потере мнимой части при смешивании амплитудных спектрограмм.

Версия 0.8.1 (13.10.2024)

  • Переход от ZIP-архивов к дисковым группам проектов: Концепция промежуточных ZIP-архивов в пакетном режиме упразднена для снижения накладных расходов на дисковый ввод-вывод. Класс MVSepZipWorker переписан в MVSepPrepWorker; файлы демикширования и конфигураций params_*.json теперь сохраняются напрямую в структурированные папки внутри директории Temp_SpectrogramMerger.
  • Автогенерация параметров при импорте папок: Кнопка импорта ZIP-архивов заменена на «Загрузить Группы...». При выборе папки программа сканирует структуру файлов и автоматически генерирует недостающие конфигурационные файлы параметров со значениями по умолчанию.
  • Сквозная WOLA-реконструкция спектрограмм и масок: Реализована система параллельного накопления исходных комплексных спектрограмм и вычисленных масок в OLA-буферы в процессе потоковой обработки чанков. По завершении потока выполняется точная нормализация на сумму квадратов окон синтеза по формуле WOLA.
  • Интеграция WOLA с Mask-Guided фазовой итерацией: Полномерные точные спектрограммы и маски теперь передаются напрямую в модуль финализации. Это позволило алгоритму итеративного уточнения фазы по маске работать с оригинальными, математически точными спектральными данными, полностью исключая необходимость их повторного расчета из готового временного сигнала.
  • Психоакустическая модель порога маскирования: Интегрирован новый алгоритм _calculate_masking_threshold_simplified_peaks. С помощью функции scipy.signal.find_peaks программа находит маскеры выше абсолютного порога слышимости (ATH) и рассчитывает индивидуальные пороги маскирования по шкале Bark на основе функции распространения возбуждения MPEG-1.
  • Предотвращение клиппинга при нормализации по LUFS: Алгоритм normalize_loudness доработан: если после приведения громкости к целевому уровню LUFS пиковое значение превышает 0 dBFS, коэффициент линейного усиления пропорционально снижается до безопасного предела во избежание жесткого ограничения.
  • Безопасный экспорт аудиоданных: В функцию записи аудио встроен блок перехвата ошибок при выполнении дизеринга и нойз-шейпинга. В случае сбоя алгоритм автоматически переключается в режим безопасного клиппинга исходных данных в диапазон [-1.0, 1.0], предотвращая порчу файлов на диске.

Версия 0.8.0 (11.10.2024)

  • Архитектурная реорганизация (Модульный рефакторинг): Кодовая база проекта полностью разделена на изолированные пакеты (выделены структуры core/band_processor/, dsp/features/, dsp/hpss/, dsp/masking/, dsp/phase/, dsp/postprocessing/, gui/creation/tabs/, io/, utils/).
  • Базовый класс фоновых воркеров: Создан абстрактный класс BaseWorker для фоновых потоков QThread. Интегрирован класс logging.LoggerAdapter, автоматически добавляющий уникальный идентификатор задачи task_id во все строки лога для упрощения отладки многопоточных операций.
  • Адаптивное смешивание фаз по TF-признакам: Разработан алгоритм process_band_adaptive_phase. На основе покадрового анализа тональности и SNR вычисляются веса пригодности для различных методов реконструкции фазы (LWS, RTISI-LA, Bregman, Complex, Blend), после чего фазы-кандидаты геометрически смешиваются во временной области.
  • Новые методы восстановления фазы:
    • ExplicitRelation: восстановление фазы на основе явных математических соотношений между производными логарифма магнитуды и фазы по времени и частоте с 2D-интегрированием методом наименьших квадратов через БПФ (решение уравнения Пуассона).
    • SPSI: метод Single Pass Spectrogram Inversion с квадратичной интерполяцией спектральных пиков для точного определения мгновенной частоты.
    • Bregman Projections: оптимизация фазы с поддержкой обобщенных дивергенций Брегмана для разных значений бета (Itakura-Saito, Kullback-Leibler, Frobenius).
    • Mask-Guided Phase Iteration: итеративное подтягивание фазы смеси к фазе доминирующего источника с весами, пропорциональными уверенности масок.
  • NMF-HPSS разделение сигналов: Реализован алгоритм разделения на гармоники и перкуссию на основе неотрицательной матричной факторизации (NMF) с мультипликативными шагами обновления и L2-регуляризацией временной гладкости активаций гармоник.
  • 10-этапный каскад постобработки микса (finalizer.py): Внедрен скоординированный конвейер улучшения финального микса:
    1. Spectral Tilt Correction: выравнивание наклона ВЧ-области по отношению к целевому наклону в дБ/октаву с плавным переходом через функцию ошибок.
    2. HPSS Refinement: дополнительное разделение микса и сглаживание гармоник по времени (Гаусс) и перкуссии по частоте (медиана) для устранения фазового дребезга.
    3. HF Envelope Smoothing: 1D временное сглаживание огибающей ВЧ-бинов.
    4. Phase Local Smoothing: локальное 2D сглаживание фазы в ВЧ-области (Гаусс/медиана) для снижения шероховатости звука.
    5. Resonance Suppression: обнаружение свистящих пиков по их добротности и стабильности фазы с применением адаптивных режекторных фильтров.
    6. Envelope Transplantation: экстраполяция огибающей НЧ/СЧ диапазона (LPC или кепстральный метод) на ВЧ-диапазон с последующей коррекцией магнитуды.
    7. Perceptual Masking: ослабление спектральных компонент, лежащих ниже психоакустического порога маскирования (модель MPEG-1).
    8. Phase Retrieval: итеративное восстановление фазы с ограничением на сглаженную Гауссом магнитуду.
    9. Post-filtering: фильтрация границ полос кроссовера фильтрами Линквица-Райли.
    10. Peak Normalization: финальное приведение пикового уровня к 0 dBFS.
  • Дисковое кеширование операций ввода-вывода: Чтение аудиоданных оптимизировано с помощью декоратора @lru_cache с размером кеша в 16 сегментов, что значительно снизило нагрузку на накопитель при частом пересчете графиков в GUI. Дизеринг и нойз-шейпинг вынесены в отдельный модуль dithering.py.

Версия 0.7.0 (05.10.2024)

  • Многомасштабный (Multi-Scale) анализ STFT: Внедрена система адаптивного разрешения STFT на основе локальной транзиентности сигнала. В оркестраторе рассчитывается список STFT с тремя размерами окон (12, 46 и 93 мс) и соответствующими шагами.
  • Динамическое смешивание шкал времени и частот: На основе глобальной меры транзиентности покадрово рассчитываются веса смешивания: alpha0 (для ВЧ/транзиентов — наименьшее окно), alpha2 (для НЧ/стационарных тонов — наибольшее окно) и alpha1 (промежуточное окно). Перед началом DSP-маскирования выполняется взвешенное суммирование комплексных матриц, что минимизирует временное размытие (pre-echo) на атаках при сохранении частотного разрешения на стационарных тонах.
  • Оценка меры транзиентности: В модуль features.py добавлена функция calculate_transience_measure для покадровой оценки степени транзиентности методами изменения спектральной плоскостности (FlatnessChange), спектральной энтропии (EntropyChange) или спектрального потока (SuperFlux).
  • Потоковый дизеринг и нойз-шейпинг (Квантование PCM): В функцию записи аудио интегрирован алгоритм треугольного дизеринга (TPDF) и формования спектра шума (Noise Shaping) первого порядка. При экспорте в целочисленные форматы PCM (16/24/32-bit) к сигналу подмешивается симметричный шум амплитудой в 1 LSB, а ошибка квантования фильтруется с обратной связью (коэффициент обратной связи 0.85), смещая шум в область высоких частот.
  • Принудительный экспорт во Float PCM: В функциях подготовки аудиосигналов задан принудительный экспорт во временный формат pcm_f32le (32-bit Float) через FFmpeg для минимизации потерь точности вычислений.
  • Произвольное чтение сегментов аудиофайлов: Функция чтения read_audio расширена параметрами start_frame и num_frames, реализуя прямое чтение произвольных участков файлов без необходимости загрузки всего трека в ОЗУ.
  • Безопасный парсер профилей параметров: Поля ввода списков, кортежей и словарей в GUI переведены на безопасный парсер литералов Python ast.literal_eval вместо стандартного вызова eval, что предотвратило риски выполнения стороннего кода при импорте конфигурационных файлов.

Версия 0.6.0 (01.10.2024)

  • Переход на архитектуру мультистадийных групп обработки (Stages): Программа полностью переведена со структуры ZIP-файлов на единый объединенный список проектов zip_list_combined. Разработан составной виджет FileGroupWidget для отображения единой группы файлов (проекта).
  • Индивидуальный статус стадий в GUI: На правой стороне виджета группы динамически создаются строки для каждого активного этапа обработки (Stage) в соответствии с типом группы (схемы: single_apollo, pair_apollo, single_sr, pair_sr). Каждая строка этапа содержит индивидуальную кнопку перехода в редактор и цветной статус-лейбл.
  • Новая система типов стадий (EditTarget): Внедрен тип EditTarget, описывающий стадии редактирования (результаты AudioSR, FlashSR и их слияние раздельно для вокала и инструментов). Состояние AppState переведено на отслеживание текущей редактируемой группы файлов и активной стадии.
  • Конвейер мультимодельного суперразрешения (SR Merge): Добавлены стадии слияния суперразрешения (sr_merge_instr, sr_merge_vocal) для объединения результатов работы двух разных моделей суперразрешения (AudioSR и FlashSR). Они работают напрямую с кешированными на диске промежуточными результатами в рамках одной группы.
  • Каскадный рендеринг групп (BatchSaveWorkerThread): При финальном экспорте группы типа pair_sr воркер последовательно запускает слияние AudioSR для музыки и вокала, слияние FlashSR для музыки и вокала, слияние результатов AudioSR + FlashSR по параметрам стадии sr_merge, суммирует полученные сигналы во временной области и применяет пиковую нормализацию.
  • Каскадное превью для SR Merge: Реализована логика быстрого предпросмотра для стадий sr_merge. Воркер PreviewWorker считывает 8-секундный сегмент исходных файлов, проводит слияние сегмента AudioSR по его параметрам, слияние сегмента FlashSR по его параметрам, а затем сливает промежуточные результаты по параметрам стадии sr_merge для отображения на холсте Matplotlib.
  • Исправление интерполяции онсетов: Внедрен блок автоматической интерполяции массива транзиентности transientness_degree_aligned к числу кадров текущей обрабатываемой полосы. Это исправило ошибки несовпадения размерностей (shape mismatch) при работе алгоритма временного переназначения (TR).
  • Оптимизация расчета Softmax-масок: Из функции calculate_softmax_weights удалена жесткая проверка равенства форм коэффициента k и спектрограммы, что позволило использовать одномерный массив k(t) (изменяющийся по времени) для корректного broadcasting-вычисления весов маски.
  • Устранение падений при SNR-модуляции: В функцию apply_weights_modulations при вызове оценки шума добавлен пропущенный аргумент n_fft и исправлен порядок аргументов, что устранило редкие падения потока обработки при включении SNR-маскирования.
  • Прямая синхронизация редактора параметров: Из слотов изменения параметров удалена блокировка сигналов. При изменении любого параметра в GUI статус активной стадии мгновенно переводится в положение [Отредактировано], а новые значения сразу записываются в соответствующий файл JSON на диске.
  • Оптимизация параметров по умолчанию: Порог отсечки временного переназначения TR_MAGNITUDE_THRESHOLD_REL изменен с 1e-4 на 1e-5 для точного позиционирования транзиентов. Целевой уровень LUFS установлен в -23.0 (стандарт EBU R128). Размер N_FFT_HIGH для высокой полосы увеличен до 4096 при шаге 512. Коэффициент штрафа за некогерентность повышен до 0.50.
  • Обязательная зависимость от coloredlogs и резервный GUI: Библиотека coloredlogs переведена в разряд обязательных. В main.py добавлена проверка доступности графического бэкенда PySide6 перед импортом GUI-модулей; в случае его отсутствия программа инициализирует резервное окно ошибки на базе Tkinter, предотвращая аварийное завершение процесса.

Версия 0.5.0 (06.09.2024)

  • Параллельные списки ZIP-архивов на вкладке пакета: Интерфейс вкладки «Пакет» разделен горизонтальным разделителем на два параллельных списка: «Музыка / Single» (zip_list_music) и «Вокал (Пара)» (zip_list_vocal).
  • Синхронизация выбора парных элементов: Реализован слот select_paired_item_slot для автоматической синхронизации выбора: при клике на музыкальный ZIP-архив в первом списке программа автоматически находит, выделяет и подсвечивает связанный вокальный ZIP-архив во втором списке (и наоборот).
  • Редактирование параметров в строке списка: Кастомный виджет BatchZipItemWidget интегрирован в строки списков ZIP. Он позволяет настраивать Жанр (genre), Акцент (accent), Качество (performance) и Цель для ИИ непосредственно в строке списка без перехода в основной редактор. Внедрена цветовая индикация статуса элемента: белый (ожидание), светло-голубой (проанализировано), светло-зеленый (отредактировано).
  • Упрощенный импорт MP3-элементов: Виджет Mp3ItemWidget переведен на использование одного чекбокса «Есть вокал» для упрощения первичной обработки при импорте в пакет.
  • Консолидация методов оценки шума: В dsp/features.py создана единая функция estimate_noise, объединившая в себе методы LocalMinStats, GlobalPercentile, MedianFilterTime и SpectralSubtractionAvg.
  • Отказоустойчивость расчета спектрального потока: Функция calculate_robust_spectral_flux переработана для обеспечения отказоустойчивости при отсутствии библиотеки SciPy с автоматическим откатом с метода LocalMedian на метод Max.
  • Поддержка SOCKS-прокси: В зависимости добавлена библиотека PySocks>=1.7.0. В настройки программы добавлены параметры USE_PROXY и PROXY_URL с возможностью маршрутизации запросов к внешним API через протоколы HTTP/HTTPS/SOCKS. В SettingsManager реализовано динамическое управление переменными окружения непосредственно перед инициализацией сетевых клиентов.

Версия 0.4.1 (03.09.2024)

  • Переносной текстовый конфигурационный файл (INI): Модуль SettingsManager полностью переписан. Вместо механизма QSettings (записывающего параметры в реестр ОС) программа хранит все глобальные настройки, включая API-ключи и шаблоны промптов, в текстовом файле merger_settings.ini в корневой директории приложения.
  • Служба ротационного логирования процессов: Внедрена стандартная библиотека logging с ротацией лог-файлов (ограничение 10 МБ, хранение до 5 резервных копий в папке /logs). Критические DSP-шаги, предупреждения и вызовы внешних API дублируются в файл spectrogram_merger.log с указанием модуля, функции и строки кода.
  • Улучшения интерфейса лога: Высота текстового поля лога status_text в правой части главного окна увеличена до 160 пикселей для удобства чтения подробных отчетов DSP-конвейера.
  • Тонкая настройка графики спектрограмм: Значение tight-паддинга холста Matplotlib уменьшено с 0.5 до 0.3 для более полного заполнения области окна спектрограммой. Скорректированы отступы (pad) и пропорции (aspect) для шкалы спектральных уровней (colorbar). Размер шрифта описаний параметров в редакторе уменьшен до 7pt для повышения плотности компоновки.

Версия 0.4.0 (01.09.2024)

  • Архитектура двухпотокового сохранения (Музыка + Вокал): Перестроена логика финального рендеринга в batch_save_worker.py. Если тип ZIP-архива определен как «Пара» (pair), воркер выполняет раздельное слияние:
    1. Загружает и нормализует оригинальные музыкальные WAV, вычисляя коэффициенты линейного усиления gain_music.
    2. Применяет эти коэффициенты к оригинальным вокальным WAV для сохранения баланса.
    3. Выполняет слияние спектрограмм музыки (без финализации) и спектрограмм вокала по их индивидуальным профилям параметров.
    4. Суммирует полученные временные сигналы музыки и вокала во временной области.
    5. Применяет финальный пиковый лимитер и записывает готовый микс в единый WAV.
  • Автоматический поиск репрезентативного сегмента аудио: Разработан алгоритм find_representative_segment в модуле audio_analysis.py. Программа считывает первые 300 секунд аудио, рассчитывает локальные огибающие RMS и спектральную плоскостность (Spectral Flatness) через БПФ. С помощью скользящего окна свертки определяется 8-секундный участок с наибольшей плотностью энергии и тональностью, исключая тишину и шумы. Этот сегмент используется по умолчанию для теста.
  • Коррекция границ теста пользователем: Параметры PREVIEW_START_SEC и PREVIEW_END_SEC удалены из глобальных настроек. На правую панель GUI добавлены спинбоксы коррекции сегмента (test_start_adjust_spinbox, test_end_adjust_spinbox), позволяющие пользователю вручную сместить автоматически найденные границы теста.
  • Гибридный метод фазы 'RTISI-LA-Hybrid': Реализована гибридная схема восстановления фазы: сначала рассчитывается опорный сигнал методом локально взвешенных сумм (LWS), затем его фаза используется в качестве начального приближения для итеративного алгоритма RTISI-LA с упреждением. Это повысило стабильность и минимизировало металлический призвук. Добавлены управляющие параметры RTISI_LA_BETA и RTISI_LA_ALPHA_SMOOTH_MS.
  • Частотное сглаживание маски: Добавлен параметр VERTICAL_SMOOTH_BLEND_FACTOR для плавного смешивания оригинальной маски и маски, сглаженной по частоте. Внедрена очистка имени полосы от технических суффиксов (например, удаления (Fast Recalc)), предотвращающая ошибки KeyError при быстром пересчете.
  • Раздельные списки ZIP и связывание пар: Вкладка «Пакет» разделена на два списка: «Музыка / Single» и «Вокал (Пара)». При выборе элемента в списке музыки программа находит и подсвечивает связанный вокальный ZIP в соседнем списке (и наоборот), загружая соответствующий профиль параметров.
  • Поддержка сетевых прокси: В настройки добавлены чекбокс USE_PROXY и поле ввода PROXY_URL (с поддержкой HTTP/SOCKS прокси).

Версия 0.3.2 (24.07.2024)

  • Автоматическое временное выравнивание сигналов: Внедрена функция align_audio_signals(y1, y2, sr, max_shift_ms, ...) в модуле steps.py. Алгоритм вычисляет взаимную корреляцию моно-версий сигналов через быстрое преобразование Фурье (БПФ) с использованием метода scipy.signal.correlate(method='fft').
  • Сдвиг шкал времени для совпадения фаз: Добавлен расчет оптимального лага (сдвига) в пределах временного окна, заданного параметром MAX_ALIGNMENT_SHIFT_MS. Реализовано физическое выравнивание шкал времени: запаздывающий сигнал дополняется нулевым паддингом в начале, а опережающий обрезается на величину сдвига, обеспечивая совпадение фаз на всем протяжении трека.
  • Адаптивные параметры выравнивания в конфигурации: В конфигурацию и типы данных ProcessingParams добавлены параметры AUTO_ALIGN_AUDIO (флаг активации, по умолчанию False) и MAX_ALIGNMENT_SHIFT_MS (максимальное окно поиска сдвига, по умолчанию 50.0 мс).
  • Скрытие параметров выравнивания в GUI: Группа параметров выравнивания интегрирована во вкладку «Редактор Параметров» через фабрику виджетов и автоматически скрывается или отображается в зависимости от состояния чекбокса AUTO_ALIGN_AUDIO.
  • Учет автовыравнивания в прогрессе: Общее количество шагов прогресса в функции merge_spectrograms увеличено с 10 до 11 для учета фазы автовыравнивания. Добавлена логика автоматического обрезания длины треков до минимальной общей в случае отключенного выравнивания.

Версия 0.3.1 (23.07.2024)

  • Пакетная обработка на основе ZIP-архивов: Внедрен тип пакетных элементов — ZIP-архивы. ZIP-архив содержит внутри себя три файла: file1.wav, file2.wav и params.json. При добавлении файлов в очередь они опционально подготавливаются и упаковываются в архив в папку Output_Zips_SpectrogramMerger.
  • Изоляция временных файлов во избежание захламления диска: При добавлении ZIP-архива в пакет программа автоматически распаковывает его во временную подпапку Temp_SpectrogramMerger для последующего редактирования и тестирования сегментов, предотвращая появление разрозненных файлов.
  • Двухуровневый пакетный интерфейс (tabs.py): Вкладка «Пакетная обработка» разделена вертикальным разделителем QSplitter на две независимые секции:
    1. Верхняя секция («API -> ZIP»): список исходных файлов (с возможностью опциональной внешней демикширующей обработки перед упаковкой), кнопка запуска и прогресс-бар.
    2. Нижняя секция («ZIP Архивы»): список импортированных или созданных ZIP-файлов, кнопки запуска анализа и финального сохранения.
  • Интерактивный виджет строки ZIP-пакета: Создан кастомный виджет BatchZipItemWidget для отображения строк списка ZIP. Виджет содержит встроенные компактные комбобоксы (Жанр, Акцент, Качество) и спинбоксы времени теста, позволяя менять параметры прямо из списка пакетной обработки. Внедрена цветовая индикация статуса элемента: белый (ожидание), голубой (проанализировано), зеленый (отредактировано).
  • Поддержка Headless-режима работы DSP на серверах: Разработан вспомогательный модуль-заглушка qt_fallbacks.py, эмулирующий необходимые классы, сигналы, слоты и виджеты библиотеки PySide6. Это позволяет запускать весь DSP-конвейер программы в headless-режиме (без графической оболочки) или на серверах без установленных библиотек X11/Qt, исключая падение интерпретатора при импортах.
  • Математические уточнения в A-взвешивании: В функцию apply_a_weighting в модуле perceptual_models.py добавлено разделение частотной оси: A-взвешивание теперь рассчитывается для частот выше малого числа epsilon ($f > \epsilon$). Частота 0 Гц (DC-компонента) принудительно зануляется в дБ-шкале. Это предотвратило появление значений $-\infty$ или ошибок деления на ноль на первом частотном бине в некоторых версиях библиотеки librosa.

Версия 0.3.0 (04.07.2024)

  • Интеграция алгоритма HPSS (Harmonic-Percussive Source Separation): Внедрен алгоритм разделения сигналов на гармоническую и перкуссионную составляющие (librosa.decompose.hpss). В случае активации режима HPSS оркестратор processing.py разделяет входные сигналы на гармоники и перкуссию, разделяя параллельные задачи (отдельно для каждой составляющей, полосы и канала).
  • Адаптивные параметры сглаживания для перкуссии: Для перкуссионной составляющей автоматически применяются адаптированные параметры сглаживания (сигма Гаусса умножается на специальный коэффициент, а длина кроссфейда корректируется). Это позволяет сохранить резкость транзиентов, избегая фазового размытия.
  • Временное переназначение (TR) с динамическим режимом: В reassignment.py удален статический параметр выбора режима аккумуляции. Выбор между 'magnitude' (магнитуда) и 'energy' (энергия) теперь происходит динамически на основе степени транзиентности конкретного кадра.
  • Динамические коэффициенты k(t) и alpha(t) во времени: Базовая кривизна Softmax ($k$) и баланс перцептивного взвешивания ($\alpha$) переведены из статических констант в разряд изменяющихся во времени массивов. Их значения рассчитываются покадрово на основе глобальной кривой онсетов (транзиентности).
  • Консолидация типов в config/types.py: Создан модуль types.py, содержащий определения литералов (MaskingMethod, PhaseMethod, NoiseEstimationMethod, ComponentType) и TypedDict структуру ProcessingParams для валидации параметров конфигурации. Из глобального словаря настроек удалены устаревшие и избыточные параметры (REASSIGNMENT_MODE, USE_TRANSIENT_PROCESSING).
  • Панель индивидуальной настройки элементов пакета: На вкладку «Пакетная обработка» добавлена новая группа виджетов «Настройки выбранного элемента». Пользователь может настраивать индивидуальный Жанр, Акцент, Качество (HPSS) и время теста для каждого файла в пакете отдельно, без необходимости открывать глобальный редактор параметров.

Версия 0.2.1 (29.04.2024)

  • Движок быстрого пересчета превью (fast_recalculation.py): Реализован алгоритм быстрого обновления спектрограммы на холсте Matplotlib при изменении слайдеров эквалайзера (EQ) или карты влияния. Алгоритм обходит тяжелые DSP-стадии (фильтрацию кроссовером, прямое STFT, наложение вторичных модуляций и обратное ISTFT), работая напрямую с кешированными спектрограммами СЧ-полосы и применяя изменения к магнитудам.
  • Динамическая фабрика виджетов теста: Спинбоксы времени теста (PREVIEW_START_SEC и PREVIEW_END_SEC) перенесены в структуру param_widgets и создаются динамически через общую фабрику виджетов.
  • Новые методы восстановления фазы (phase.py):
    • LWS (Локально-взвешенная фаза): реализован алгоритм реконструкции фазы, основанный на взвешенном суммировании комплексных экспонент фаз источников с весами, пропорциональными маскам смешивания.
    • RTISI-LA: добавлена сигнатурная функция-заглушка для итеративного метода восстановления фазы в реальном времени с упреждением.
    • Параметр PHASE_METHOD расширен опциями 'LWS' и 'RTISI-LA'.
  • Идеальные маски отношений IBM и IRM: В base_masks.py внедрены методы маскирования IBM (Идеальная бинарная маска) и IRM (Идеальная маска отношений), основанные на расчете вероятности доминирования первого источника по мощности.
  • Вычитание шума из маски Винера: В модуль base_masks.py интегрированы новые методы оценки шума, созданные в версии v0.2.0 (MedianFilterTime и SpectralSubtractionAvg), позволяющие вычитать шум из спектров мощности перед расчетом маски Винера.
  • Отказоустойчивость параллельной обработки (band_processor.py): Из сигнатур внутренних шагов обработки полос удалена проверка объекта stop_event при вызове из параллельного бэкенда joblib (loky). Это предотвратило потенциальные ошибки сериализации и десериализации межпроцессного взаимодействия Qt-объектов.

Версия 0.2.0 (26.04.2024)

  • Централизованная валидация и типы (utils/validation.py): Разработан единый реестр метаданных всех параметров приложения PARAMETER_METADATA, описывающий типы, диапазоны допустимых значений (min/max), шаги изменения и списки опций.
  • Очистка словаря параметров: Функции ограничения значений _clamp и _clamp_int перенесены из utils/common.py в модуль валидации. Реализованы функции validate_value (проверка одиночного значения) и sanitize_parameters (комплексная очистка словаря параметров с возвратом списка предупреждений и ошибок).
  • Интеграция валидации в пресеты и фабрику виджетов: Изменения пресетов в config/presets.py переведены на использование validate_value, исключая ручной хардкод лимитов в модификаторах. Динамическая фабрика виджетов gui/widgets/factory.py теперь запрашивает диапазоны, шаги и типы напрямую из PARAMETER_METADATA, предотвращая рассинхронизацию интерфейса с лимитами алгоритмов.
  • Медианная фильтрация во времени (Новый метод оценки шума): В dsp/features.py добавлена функция estimate_noise_median_filter_time. Метод оценивает локальный шум путем применения 1D медианного фильтра по оси времени к каждому частотному бину спектрограммы.
  • Средний спектр начального сегмента (Новый метод оценки шума): Добавлена функция estimate_noise_spectral_subtraction_avg. Метод рассчитывает средний профиль шума по начальному участку тишины (длительность задается параметром NOISE_EST_SS_START_SEC) и экстраполирует его на всю длину сигнала.
  • Интеграция методов оценки шума в фильтры: В конфигурацию добавлен параметр WIENER_NOISE_METHOD для фильтра Винера. Функции calculate_base_masks в base_masks.py теперь принимают параметры sr и hop_length для обеспечения работы метода спектрального вычитания. SNR-модулятор в modulations.py и фильтр Винера в base_masks.py теперь поддерживают 4 метода оценки шума (LocalMinStats, GlobalPercentile, MedianFilterTime, SpectralSubtractionAvg, а также значение None для Винера).
  • Адаптивное временное сглаживание масок (Раздельный кроссфейд): В конфигурацию добавлен параметр WEIGHT_CROSSFADE_FRAMES_TRANSIENT — длина временного кроссфейда для транзиентных (атакующих) участков. В dsp/masking/smoothing.py функция apply_mask_smoothing переведена на раздельный расчет кроссфейда: на стационарных кадрах применяется окно WEIGHT_CROSSFADE_FRAMES, а на кадрах, отмеченных маской транзиентов, — укороченное окно WEIGHT_CROSSFADE_FRAMES_TRANSIENT. Это позволяет избежать слухового размытия атак инструментов при сохранении плавности на стационарных тонах.
  • Информативность и логирование DSP-шагов: В dsp/masking/smoothing.py внедрена система аккумулирования и вывода примененных шагов сглаживания (например: *«Применены модуляции: Спектр.поток, SNR (LocalMinStats)...»*), отображающаяся в логе обработки. Функция apply_vertical_smoothing_crossfade теперь динамически запрашивает имя обрабатываемой полосы из параметров для формирования информативных логов.

Версия 0.1.1 (23.04.2024)

  • Реорганизация вкладок левой панели: Вкладка «Слияние (Одиночное)» переименована в «Редактор Параметров». С вкладки редактора параметров удалены поля выбора файлов (le_file1, le_file2, le_output). Процесс работы переориентирован на список пакетной обработки.
  • Блокировка редактора: Вкладка «Редактор Параметров» заблокирована по умолчанию и активируется только при выборе готового к ревью или отредактированного элемента в пакете.
  • Улучшения правой панели (Превью): Удалена неиспользуемая кнопка запуска одиночной обработки. Кнопка «Тестировать» переименована в «Тестировать Сегмент». Спинбоксы времени теста (PREVIEW_START_SEC и PREVIEW_END_SEC) перенесены с панели превью в группу «Основные/Тест» на вкладку «Редактор Параметров» и теперь создаются динамически.
  • Адаптивная компоновка редактора: Сетка параметров в редакторе перестроена с 2-колоночной на более плотную 4-колоночную схему для экономии вертикального пространства. Группы параметров STFT для НЧ, СЧ и ВЧ объединены.
  • Поддержка готовых пар файлов в пакете: Кнопка «Добавить файлы...» разделена на две специализированные: «Добавить MP3...» (поддерживающая опциональное внешнее разделение) и «Добавить пару WAV...» (последовательный выбор двух локальных файлов).
  • Автоматизация редактирования: Удалена отдельная кнопка «Редактировать параметры...». Теперь при выборе элемента в списке пакета его индивидуальные параметры автоматически загружаются в «Редактор Параметров», а сама вкладка активируется.
  • Оптимизация кода: Модуль gui/slots/file_slots.py объявлен устаревшим и удален, так как логика ручного выбора файлов одиночного слияния упразднена. Обновлены менеджеры состояний виджетов (widget_state.py, profile_io.py) для блокировки и разблокировки вкладок и элементов управления в зависимости от статуса выбранного файла.

Версия 0.1.0 (18.04.2024)

  • Начальная версия программы: Закладывание фундамента для модульной структуры, асинхронной обработки и интеграции с внешними сервисами.
  • Разделение на слои (Архитектура): Создана базовая структура пакета, разделенная на модули конфигурации (config), ядра обработки (core), математических и DSP-операций (dsp), графического интерфейса (gui), ввода-вывода (io) и вспомогательных внешних сервисов (services).
  • Фоновая асинхронность (QThread): Реализована обработка тяжелых вычислений в фоновых потоках QThread (ProcessingWorker, PreviewWorker и др.) для исключения блокировки интерфейса. Внедрена базовая интеграция с внешними API для опционального предварительного разделения аудиоматериала.
  • Многовкладочный интерфейс (GUI): Левая панель содержит две вкладки: «Пакетная обработка», «Слияние (Одиночное)».
  • Редактор параметров на фабрике виджетов: Построен на основе динамической фабрики виджетов (factory.py), преобразующей типы данных конфигурации в интерактивные элементы управления.
  • Одиночное слияние: Вкладка «Слияние (Одиночное)» содержит поля ручного выбора двух входных WAV-файлов и пути сохранения результата.
  • Специализированные виджеты эквалайзера и карт влияния: Созданы кастомные графические эквалайзеры и карты влияния (Influence Map) на 12 полос с логарифмическим распределением частот.
  • Интеграция Matplotlib для визуализации: Интегрирован холст Matplotlib для отображения спектрограмм магнитуд и масок.
  • Дизайн кроссовер-фильтров Баттерворта: Реализован дизайн кроссовер-фильтров Баттерворта 5-го порядка (по умолчанию) для разделения сигнала на НЧ, СЧ и ВЧ полосы.
  • Базовые маски: Реализован расчет масок взвешивания (Softmax) и масок Винера.
  • Модуляции маски: Внедрены механизмы динамической модификации масок на основе спектральной плоскостности (flatness), фазовой когерентности, спектрального потока (spectral flux) и оценки SNR методом статистики локального минимума.
  • Реконструкция фазы: Реализовано комбинирование фаз (методы Complex, Dominant, Blend) и итеративный алгоритм Fast Griffin-Lim (FGLA).
  • Временное переназначение (TR): Интегрирован алгоритм Time Reassignment для повышения четкости транзиентов в спектрограмме.