Удалить эффект свинцового певца возможно на Android?

Я пытаюсь написать приложение для музыкального плеера для Android, которое позволит пользователю убрать вокалиста из песни.

Математика такова:

amount_of_removal * ((left * (balance)) - (right * (1 - balance))) + (1 - amount_of_removal)*(left + right)

Есть ли какой-нибудь возможный способ применить кастом AudioEffect в аудиопоток? Даже если я сам открою и расшифрую файл?

1 ответ

Решение

Хорошо, похоже, я упустил довольно важную информацию, когда я разместил этот вопрос.

Главным среди них является тот факт, что большинство музыкальных форматов являются так называемыми "потерями", потому что они не хранят все, что составляет звуковую форму волны. MP3Например, в основном разбирает форму волны на составляющие ее частоты, но хранит только самые громкие, отбрасывая более тихие.

Соедините это с тем фактом, что для нескольких стилей музыки вокалист является самой громкой частью (особенно когда они поют), и у вас есть некоторые проблемы с качеством звука, поскольку некоторые из более тихих частот теперь необходимы, теперь, когда солист не собирается это маскировать.

Это означает, что лучший формат для чтения - это формат без потерь, и, вероятно, один из самых простых - это древний WAV-файл.

В целом, шаги, необходимые для того, чтобы сделать то, что я хочу, возможно, примерно такие:

  1. Загрузить аудиофайл (используя класс WavFile, как указано в этом ответе)
  2. Примените пользовательский звуковой эффект к буферу, заполненному файлом за один раз.
  3. Выделите буфер, полный обработанного аудио, на звуковую карту (используя что-то вроде этого примера)

Единственный недостаток, который я вижу отсюда (пока еще не проверял), это, возможно, проблемы с производительностью, так как использование прямой Java может быть немного медленным.

Другие вопросы по тегам