Удалить эффект свинцового певца возможно на Android?
Я пытаюсь написать приложение для музыкального плеера для Android, которое позволит пользователю убрать вокалиста из песни.
Математика такова:
amount_of_removal * ((left * (balance)) - (right * (1 - balance))) + (1 - amount_of_removal)*(left + right)
Есть ли какой-нибудь возможный способ применить кастом AudioEffect
в аудиопоток? Даже если я сам открою и расшифрую файл?
1 ответ
Хорошо, похоже, я упустил довольно важную информацию, когда я разместил этот вопрос.
Главным среди них является тот факт, что большинство музыкальных форматов являются так называемыми "потерями", потому что они не хранят все, что составляет звуковую форму волны. MP3
Например, в основном разбирает форму волны на составляющие ее частоты, но хранит только самые громкие, отбрасывая более тихие.
Соедините это с тем фактом, что для нескольких стилей музыки вокалист является самой громкой частью (особенно когда они поют), и у вас есть некоторые проблемы с качеством звука, поскольку некоторые из более тихих частот теперь необходимы, теперь, когда солист не собирается это маскировать.
Это означает, что лучший формат для чтения - это формат без потерь, и, вероятно, один из самых простых - это древний WAV-файл.
В целом, шаги, необходимые для того, чтобы сделать то, что я хочу, возможно, примерно такие:
- Загрузить аудиофайл (используя класс WavFile, как указано в этом ответе)
- Примените пользовательский звуковой эффект к буферу, заполненному файлом за один раз.
- Выделите буфер, полный обработанного аудио, на звуковую карту (используя что-то вроде этого примера)
Единственный недостаток, который я вижу отсюда (пока еще не проверял), это, возможно, проблемы с производительностью, так как использование прямой Java может быть немного медленным.