Skip to content

yorickyeng/equalizer

Repository files navigation

Equalizer — Программный проигрыватель с эквалайзером

Десктопное приложение для воспроизведения аудиофайлов с 10-полосным эквалайзером и эффектами обработки звука.

📋 Описание

Приложение представляет собой программный аудиоплеер с возможностью тонкой настройки частотных характеристик звука через встроенный эквалайзер. Поддерживает два типа фильтров: КИХ (FIR) и БИХ (IIR), а также эффекты реверберации и вибрато.

🔧 Технологии

  • Язык: Kotlin 2.0
  • UI фреймворк: Jetpack Compose for Desktop
  • Сборка: Gradle (Kotlin DSL)
  • Аудио: Java Sound API (javax.sound.sampled)
  • Сериализация: kotlinx-serialization

🚀 Возможности

Эквалайзер

  • 10 частотных полос
  • Диапазон регулировки: -60 ... 0 дБ
  • Переключаемые режимы: КИХ (FIR) / БИХ (БИХ)

Звуковые эффекты

  • Reverb (Реверберация): эффект помещения с двумя линиями задержки (30 мс и 45 мс)
  • Vibrato (Вибрато): модуляция высоты тона с LFO (5 Гц)

Технические характеристики

  • Частота дискретизации: 48 кГц
  • Разрядность: 16 бит
  • Формат: WAV (стерео)
  • Порядок IIR фильтров: 4
  • Количество отсчётов FIR: 401

📦 Структура проекта

equalizer/
├── src/
│   ├── main/
│   │   ├── kotlin/
│   │   │   ├── Main.kt              # Точка входа, UI приложение
│   │   │   ├── AudioEngine.kt       # Движок воспроизведения аудио
│   │   │   ├── Equalizer.kt         # Логика эквалайзера
│   │   │   ├── DspEngine.kt         # Цифровая обработка сигналов
│   │   │   ├── Effects.kt           # Эффекты (Reverb, Vibrato)
│   │   │   ├── FilterModels.kt      # Модели данных конфигурации
│   │   │   └── ConfigLoader.kt      # Загрузчик конфигурации JSON
│   │   └── resources/
│   │       ├── filters_config.json  # Конфигурация фильтров
│   │       └── input.wav            # Тестовый аудиофайл
│   └── test/
├── build.gradle.kts                 # Конфигурация сборки
├── settings.gradle.kts
└── gradle.properties

🛠️ Архитектура

Компоненты

AudioEngine

Класс отвечает за воспроизведение аудиофайлов. Использует паттерн Producer-Consumer:

  • Producer Thread: читает данные из файла в кольцевой буфер
  • Consumer Thread: применяет обработку (эквалайзер, эффекты) и выводит на аудиоустройство

Equalizer

Обрабатывает аудиосигнал через банк фильтров:

  • Отдельные наборы фильтров для левого и правого канала
  • Поддержка переключения между FIR и IIR режимами
  • Регулировка усиления для каждой полосы

DspEngine

Содержит реализации цифровых фильтров:

  • BiquadSection: одна секция второго порядка (SOS)
  • SosFilter: каскад биквадратных секций (IIR)
  • FirFilter: КИХ-фильтр с прямой свёрткой

Effects

  • DelayLine: линия задержки с обратной связью (Comb-фильтр)
  • ReverbEffect: реверберация на основе двух линий задержки
  • VibratoEffect: вибрато с LFO-модуляцией задержки

🚀 Запуск

Требования

  • JDK 17 или выше
  • Gradle 8.x

Установка зависимостей

./gradlew build

Запуск приложения

./gradlew run

Сборка нативного дистрибутива

./gradlew package

Создаёт установочные пакеты для:

  • macOS (.dmg)
  • Windows (.msi)
  • Linux (.deb)

⚙️ Конфигурация

Параметры фильтров задаются в файле src/main/resources/filters_config.json:

{
    "sample_rate": 48000,
    "iir_order": 4,
    "fir_taps": 401,
    "bands": [
        {
            "band_number": 1,
            "range": "0-100 Hz",
            "type": "lowpass",
            "iir_sos": [...],
            "fir_h": [...]
        }
    ]
}

Параметры конфигурации

  • sample_rate — частота дискретизации (Гц)
  • iir_order — порядок IIR фильтров
  • fir_taps — количество отсчётов FIR фильтра
  • bands — массив конфигураций частотных полос

🎨 Интерфейс

Интерфейс приложения включает:

  1. Панель управления: кнопки PLAY/STOP
  2. Переключатель фильтров: КИХ (FIR) ↔ БИХ (IIR)
  3. Слайдеры эквалайзера: 10 вертикальных ползунков для регулировки усиления
  4. Эффекты: чекбоксы и слайдеры для Reverb и Vibrato

📝 Принцип работы

  1. При запуске загружается конфигурация фильтров из JSON
  2. Пользователь выбирает аудиофайл (по умолчанию input.wav)
  3. При нажатии PLAY:
    • Поток Producer читает семплы из файла
    • Поток Consumer применяет обработку:
      • Эквалайзер (суммирование выходов фильтров с учётом усиления)
      • Reverb (опционально)
      • Vibrato (опционально)
    • Обработанные данные выводятся на аудиоустройство

🔬 Технические детали

IIR фильтры (БИХ)

Реализованы как каскад биквадратных секций (SOS). Формула разностного уравнения:

y[n] = (b0·x[n] + b1·x[n-1] + b2·x[n-2] - a1·y[n-1] - a2·y[n-2]) / a0

FIR фильтры (КИХ)

Реализованы через прямую свёртку с импульсной характеристикой:

y[n] = Σ h[k] · x[n-k]

Эффекты

  • Reverb: параллельное соединение двух Comb-фильтров с последующим микшированием
  • Vibrato: модуляция времени задержки синусоидальным LFO с линейной интерполяцией

📄 Лицензия

Проект создан в рамках учебной работы НИРС.

👥 Авторы

Кафедра информационных технологий, программный проигрыватель с эквалайзером.

About

Desktop KMP Equalizer

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages