Десктопное приложение для воспроизведения аудиофайлов с 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
Класс отвечает за воспроизведение аудиофайлов. Использует паттерн Producer-Consumer:
- Producer Thread: читает данные из файла в кольцевой буфер
- Consumer Thread: применяет обработку (эквалайзер, эффекты) и выводит на аудиоустройство
Обрабатывает аудиосигнал через банк фильтров:
- Отдельные наборы фильтров для левого и правого канала
- Поддержка переключения между FIR и IIR режимами
- Регулировка усиления для каждой полосы
Содержит реализации цифровых фильтров:
- BiquadSection: одна секция второго порядка (SOS)
- SosFilter: каскад биквадратных секций (IIR)
- FirFilter: КИХ-фильтр с прямой свёрткой
- 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— массив конфигураций частотных полос
Интерфейс приложения включает:
- Панель управления: кнопки PLAY/STOP
- Переключатель фильтров: КИХ (FIR) ↔ БИХ (IIR)
- Слайдеры эквалайзера: 10 вертикальных ползунков для регулировки усиления
- Эффекты: чекбоксы и слайдеры для Reverb и Vibrato
- При запуске загружается конфигурация фильтров из JSON
- Пользователь выбирает аудиофайл (по умолчанию
input.wav) - При нажатии PLAY:
- Поток Producer читает семплы из файла
- Поток Consumer применяет обработку:
- Эквалайзер (суммирование выходов фильтров с учётом усиления)
- Reverb (опционально)
- Vibrato (опционально)
- Обработанные данные выводятся на аудиоустройство
Реализованы как каскад биквадратных секций (SOS). Формула разностного уравнения:
y[n] = (b0·x[n] + b1·x[n-1] + b2·x[n-2] - a1·y[n-1] - a2·y[n-2]) / a0
Реализованы через прямую свёртку с импульсной характеристикой:
y[n] = Σ h[k] · x[n-k]
- Reverb: параллельное соединение двух Comb-фильтров с последующим микшированием
- Vibrato: модуляция времени задержки синусоидальным LFO с линейной интерполяцией
Проект создан в рамках учебной работы НИРС.
Кафедра информационных технологий, программный проигрыватель с эквалайзером.