Skip to content

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

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages