Как найти смещение от двух аудиофайлов? один шумный, и один ясен

У меня один раз сценарий, в котором пользователь захватывает сцену концерта с аудио в реальном времени исполнителя, и в то же время устройство загружает потоковое вещание из аудио-вещателя device.later, я заменяю звук в реальном времени шумным (захваченным во время записи) с тот, который я потоковал и сохранил в своем телефоне (хорошее качество звука). Теперь я устанавливаю аудио смещение вручную с пробной и ошибочной базой при слиянии, чтобы я мог синхронизировать аудио и видео активность в точном положении.

Теперь то, что я хочу сделать, - автоматизировать процесс синхронизации звука. Вместо слияния видео с четким звуком при заданном смещении я хочу автоматически сгенерировать видео с четким звуком с правильной синхронизацией.

для этого мне нужно найти смещение, при котором я должен заменить шумный звук четким звуком. когда пользователь начнет запись и остановит запись, я возьму этот образец аудио в реальном времени и сравню с потоковым аудио в реальном времени и возьму точную часть этого звука от этого и синхронизирую в идеальное время.

Кто-нибудь знает, как найти смещение, сравнивая два аудиофайла и синхронизируя с видео.

Ответ 1

Вот краткий, ясный ответ.

• Это непросто - это потребует обработки сигналов и математики.
• Быстрый Google дает мне это решение, включая код.
• Существует более подробная информация о вышеупомянутой методике здесь.
• Я бы предложил получить хотя бы базовое понимание, прежде чем пытаться перенести его в iOS.
• Я бы предложил вам использовать Accelerate framework для iOS для быстрых преобразований Фурье и т.д.
• Я не согласен с другим ответом о том, как это сделать на сервере - в наши дни устройства очень мощные. Пользователь не возражал бы за несколько секунд обработки для чего-то вроде магии.

Edit

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

Что, если вместо усложнения обработки сигнала, там другой путь? После некоторой мысли, может быть. Если вы встретитесь все следующие условия:

• Вы контролируете серверный компонент (аудио-вещатель устройство)
• Радиовещатель знает о записи "реального звука" латентность
• Передатчик и приемник взаимодействуют таким образом что позволяет точную синхронизацию времени

... тогда задача вычисления смещения звука становится разумно тривиальный. Вы можете использовать NTP или другое более точное время синхронизации, так что существует глобальная точка ссылки На время. Тогда это так же просто, как вычисление разницы между временные коды аудиопотока, где временные коды основаны на глобальном контрольное время.

Ответ 2

Это может оказаться трудной проблемой, так как даже если сигналы имеют одно и то же событие, наличие шума делает сравнение более сложным. Вы могли бы подумать о том, чтобы выполнить некоторую пост-обработку, чтобы уменьшить шум, но шумоподавление в нем является обширной нетривиальной темой.

Другая проблема может заключаться в том, что сигнал, захваченный двумя устройствами, может сильно различаться, например, звук хорошего качества (я думаю, вывод из консоли live mix?) будет довольно отличаться от версии в реальном времени (что является предположением выходит из мониторов/FOH-системы, захваченных телефонным микрофоном?)

Возможно, самым простым способом начать было бы использовать кросс-корреляцию для анализа временной задержки.

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

Ответ 3

Я не знаю много о предмете, но я думаю, что вы ищете "звуковую отпечатку пальца". Похожие вопросы здесь

Альтернативный (и более подверженный ошибкам) ​​способ запускает оба звука через текстовую библиотеку речи (или API) и соответствующую соответствующую часть. Это было бы, конечно, не очень надежным. Предложения часто повторяются в песнях и концертах, возможно, инструментальные.

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

Удачи.