VocalClear — это профессиональное Android-приложение для разделения аудиодорожек на вокальную и инструментальную части с уникальной возможностью посекционного редактирования извлечённого вокала. Приложение работает как в онлайн-режиме (с использованием серверной обработки), так и полностью офлайн на устройстве пользователя.
VocalClear предоставляет два режима обработки аудио для максимальной гибкости использования. Онлайн-режим использует серверную обработку через REST API, что обеспечивает высокое качество разделения благодаря мощным серверным вычислениям и продвинутым алгоритмам машинного обучения. Данный режим идеально подходит для пользователей с быстрым интернет-соединением, которым важно получить максимальное качество результата. Офлайн-режим работает непосредственно на устройстве с использованием Android MediaCodec API, позволяя обрабатывать аудио без подключения к интернету. Этот режим обеспечивает полную конфиденциальность данных пользователя и независимость от внешних сервисов.
Уникальной особенностью VocalClear является встроенный редактор вокальных секций, который позволяет нарезать извлечённую вокальную дорожку на отдельные фрагменты. Пользователь может создавать новые секции вручную, указывая время начала и конца каждого фрагмента, или использовать функцию автоматического определения секций на основе анализа амплитуды waveform. Система автоматически обнаруживает участки с вокалом, разделяя их от тишины и фоновых шумов. Каждая созданная секция визуально выделяется на waveform-дисплее уникальным цветом, что упрощает навигацию и управление материалом. Пользователь может экспортировать отдельные секции в независимые аудиофайлы или создать архив со всеми фрагментами для удобного хранения и передачи.
Приложение построено с использованием современного Jetpack Compose UI framework и следует принципам Material Design 3. Пользовательский интерфейс включает интуитивно понятную панель выбора аудиофайлов с предварительным просмотром метаданных, визуальный waveform-дисплей для точного позиционирования при нарезке секций, а также информативные индикаторы прогресса обработки в реальном времени. Поддерживаются как светлая, так и тёмная темы оформления, адаптирующиеся под системные настройки устройства. Все элементы управления оптимизированы для работы на сенсорных экранах различного размера.
VocalClear разработан с использованием Clean Architecture — современного подхода к проектированию программного обеспечения, который обеспечивает чёткое разделение ответственности между компонентами системы. Архитектура разделена на три основных слоя: доменный слой содержит бизнес-логику и модели данных, слой данных реализует работу с источниками данных и внешними сервисами, а презентационный слой отвечает за отображение информации и взаимодействие с пользователем. Между слоями используется принцип инверсии зависимостей через абстракции, что делает код более тестируемым и поддерживаемым.
В качестве паттерна презентационного слоя используется MVVM (Model-View-ViewModel), который является стандартом для современных Android-приложений. ViewModel управляет состоянием UI и обрабатывает пользовательские действия, обеспечивая разделение логики представления от компонентов пользовательского интерфейса. Состояние UI моделируется с использованием Kotlin Flow и StateFlow, что обеспечивает реактивное обновление интерфейса при изменении данных.
Приложение использует Kotlin как основной язык программирования, что позволяет писать лаконичный и безопасный код с поддержкой корутин для асинхронного программирования. Для построения пользовательского интерфейса применяется Jetpack Compose — декларативный UI toolkit от Google, который значительно упрощает разработку и поддержку интерфейса. Hilt используется для управления зависимостями и обеспечивает автоматическую генерацию кода для внедрения зависимостей в соответствии с лучшими практиками Android-разработки.
Для сетевого взаимодействия в онлайн-режиме применяется связка Retrofit и OkHttp — стандартные библиотеки для работы с REST API на Android. Coroutines обеспечивают асинхронное выполнение операций ввода-вывода, сетевых запросов и аудиообработки без блокировки основного потока. Офлайн-обработка аудио реализована с использованием нативного Android MediaCodec API, что обеспечивает высокую производительность и совместимость со всеми устройствами Android.
VocalClear/
├── app/src/main/
│ ├── java/com/vocalclear/app/
│ │ ├── domain/ # Доменный слой (бизнес-логика)
│ │ │ ├── model/ # Модели данных
│ │ │ │ ├── Models.kt # AudioFile, ProcessingConfig, VocalSection
│ │ │ │ └── SectionEditorState.kt
│ │ │ ├── repository/ # Интерфейсы репозиториев
│ │ │ │ └── Repositories.kt
│ │ │ └── usecase/ # Сценарии использования
│ │ │ └── UseCases.kt
│ │ ├── data/ # Слой данных
│ │ │ ├── datasource/ # Источники данных
│ │ │ │ └── VocalSectionDataSource.kt
│ │ │ ├── local/ # Локальные источники
│ │ │ │ ├── LocalAudioDataSource.kt
│ │ │ │ ├── OfflineAudioProcessor.kt
│ │ │ │ └── ArchiveManager.kt
│ │ │ ├── remote/ # Удалённые источники
│ │ │ │ ├── RemoteAudioProcessor.kt
│ │ │ │ └── VocalClearApi.kt
│ │ │ └── repository/ # Реализации репозиториев
│ │ │ └── RepositoryImpl.kt
│ │ ├── presentation/ # Презентационный слой
│ │ │ ├── ui/ # Компоненты UI
│ │ │ │ ├── MainActivity.kt # Главная активность
│ │ │ │ ├── sections/ # Редактор секций
│ │ │ │ │ └── VocalSectionEditor.kt
│ │ │ │ └── theme/ # Тема оформления
│ │ │ │ ├── Theme.kt
│ │ │ │ └── Type.kt
│ │ │ └── viewmodel/ # ViewModels
│ │ │ └── MainViewModel.kt
│ │ ├── di/ # Dependency Injection
│ │ │ └── AppModule.kt
│ │ └── VocalClearApp.kt # Application класс
│ └── res/ # Ресурсы
│ ├── values/ # Строки, цвета, темы
│ └── xml/ # Конфигурация FileProvider
├── build.gradle.kts # Конфигурация проекта
└── gradle/ # Gradle Wrapper
Главный экран приложения содержит все необходимые элементы управления для работы с аудиофайлами. Верхняя панель навигации отображает название приложения и обеспечивает доступ к дополнительным настройкам. Центральная часть экрана содержит карточку выбора входного файла с возможностью просмотра имени и размера выбранного аудио. Ниже расположена карточка выбора режима обработки с переключателем между онлайн и офлайн режимами и кратким описанием каждого режима. Карточка управления процессом отображает текущее состояние обработки и предоставляет кнопки для запуска и отмены операций.
Редактор секций представляет собой визуальный интерфейс для работы с вокальными фрагментами. Верхняя часть редактора содержит waveform-дисплей с визуализацией амплитуды аудиосигнала и цветными маркерами созданных секций. Под waveform отображается таймлайн с текущей позицией воспроизведения и общей длительностью трека. Ниже расположен список созданных секций с возможностью выбора, редактирования и экспорта каждого фрагмента. Панель управления редактором предоставляет доступ к функциям автоматического определения секций, добавления новых фрагментов, экспорта всех секций и очистки списка.
Приложение использует модальные диалоговые окна для ввода данных и подтверждения действий. Диалог добавления секции позволяет указать название фрагмента, время начала и конца в секундах с автоматической валидацией введённых значений. Диалог редактирования обеспечивает изменение параметров существующих секций. Диалог выбора режима предлагает пользователю выбрать между онлайн и офлайн обработкой после загрузки файла.
На текущий момент реализован полный базовый функционал приложения. Разработана архитектура Clean Architecture с разделением на доменный, data и presentation слои. Реализован пользовательский интерфейс на Jetpack Compose с поддержкой Material Design 3 и адаптивных тем. Созданы модели данных для аудиофайлов, конфигурации обработки и вокальных секций. Реализован слой данных с поддержкой работы с локальными файлами через ContentResolver и FileProvider. Разработана офлайн-обработка аудио с использованием MediaCodec API для разделения вокальных и инструментальных партий. Создан редактор вокальных секций с визуальным waveform-дисплеем, функциями создания, редактирования и экспорта секций. Реализована интеграция Hilt для управления зависимостями и Retrofit для сетевого взаимодействия в онлайн-режиме.
В дальнейшем планируется расширение функционала в нескольких направлениях. В области обработки аудио планируется улучшение алгоритмов разделения вокала с использованием нейросетевых моделей для офлайн-режима, добавление дополнительных фильтров и эффектов для обработки вокальных дорожек, а также поддержка экспорта в различных аудиоформатах. В области пользовательского интерфейса планируется добавление предварительного прослушивания секций перед экспортом, реализация функции редактирования waveform с возможностью точной настройки границ секций и улучшение производительности при работе с большими аудиофайлами.
Для сборки приложения требуется Android Studio Hedgehog (2023.1.1) или более новая версия. Необходим JDK 17 для компиляции проекта. Целевая версия Android SDK — 34 (Android 14), минимальная поддерживаемая версия — API 24 (Android 7.0). Gradle версии 8.2 или выше входит в комплект поставки проекта через Gradle Wrapper.
# Клонирование репозитория
git clone https://github.com/Leostrange/Vocal-Remover.git
cd Vocal-Remover/VocalClear
# Сборка debug-версии APK
./gradlew assembleDebug
# Сборка release-версии APK
./gradlew assembleRelease
# Запуск unit-тестов
./gradlew test
# Очистка проекта
./gradlew cleanДля удобства сборки в репозитории присутствуют скрипты автоматизации:
# Linux/macOS
chmod +x build_apk.sh
./build_apk.sh
# Windows PowerShell
.\build_apk.ps1Приложение использует типизированные модели данных для представления информации о процессах обработки. Класс AudioFile инкапсулирует метаданные выбранного аудиофайла, включая URI, имя, размер и длительность. ProcessingConfig содержит настройки процесса обработки: режим работы, силу фильтрации и формат вывода. VocalSection представляет вокальную секцию с уникальным идентификатором, названием, временными границами и цветом для визуального отображения.
Доступ к функциям обработки аудио осуществляется через интерфейсы репозиториев, что обеспечивает гибкость и тестируемость кода. AudioRepository предоставляет методы для работы с аудиофайлами: загрузка метаданных, копирование в кэш и получение потоков ввода-вывода. OfflineProcessorRepository определяет интерфейс для локальной обработки аудио с использованием алгоритмов центрального канала. OnlineProcessorRepository обеспечивает взаимодействие с сервером обработки через REST API. VocalSectionRepository управляет операциями с вокальными секциями: нарезка, экспорт и архивация.
Бизнес-логика приложения инкапсулирована в классы use cases, которые инкапсулируют отдельные сценарии использования. ProcessAudioUseCase координирует весь процесс обработки аудиофайла от начала до получения результата. CutVocalSectionUseCase выполняет нарезку вокальной дорожки на указанные временные фрагменты. ExportVocalSectionsUseCase обеспечивает экспорт нескольких секций в отдельные файлы или архив. AutoDetectSectionsUseCase анализирует waveform и автоматически определяет границы вокальных сегментов на основе амплитуды сигнала.
Приложение запрашивает следующие разрешения для полноценной работы:
READ_MEDIA_AUDIO— доступ к аудиофайлам на устройстве (Android 13+)READ_EXTERNAL_STORAGE— доступ к аудиофайлам (Android 10 и ниже)INTERNET— сетевое взаимодействие для онлайн-обработкиACCESS_NETWORK_STATE— проверка состояния сетевого подключения
Все разрешения запрашиваются динамически во время выполнения с использованием современного ActivityResult API, обеспечивая плавный пользовательский опыт.
MIT License
MiniMax Agent
Проект использует следующие технологии и библиотеки:
- Jetpack Compose — современный UI toolkit для Android
- Hilt — dependency injection для Android-приложений
- Retrofit — HTTP-клиент для REST API
- Coroutines — асинхронное программирование на Kotlin
- Android MediaCodec — нативный API для обработки медиа
- Material Design 3 — система дизайна от Google
VocalClear — профессиональный инструмент для работы с вокальными дорожками в вашем кармане.


