Подтвердить что ты не робот

Обнаружение шума через микрофон во время воспроизведения песни на iPhone

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

Каким будет самый простой способ реализовать эту функциональность?

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

Вещи, которые я уже реализовал
Воспроизведение песни и запись звука одновременно.

Что я пробовал
ПРИМЕЧАНИЕ. Поскольку нам предлагается добавить то, что мы уже пробовали, я добавлю следующую часть. Но я ни в коем случае не говорю, что это правильный способ решить проблему, это просто то, что я пробовал.

Я взломал образец приложения aurioTouch2: то, что я сделал, это воспроизведение песни один раз и запись быстрых значений преобразования Фурье (при довольно низкой частоте дискретизации, чтобы поддерживать низкий уровень записанных данных). Затем, когда трек был воспроизведен снова, я бы в основном вычислил (за один временной интервал) коэффициент корреляции между выходными графиками, которые были построены с использованием живых данных fft и записанных данных fft (так что "squiggly" линии, которые вы видите, когда вы ставите приложение в режиме fft).
Этот "вид" работает. Коэффициент корреляции явно ниже, когда избыток звука/шума находится в комнате, но он не очень чувствителен и также зависит от уровня громкости, который использовался при записи данных fft. В конце концов, я думаю, что это не лучший подход.

Кто-нибудь думает, что это возможно? Если да, то какой будет лучший подход?
Пожалуйста, спросите, нужно ли вам больше разъяснений!

4b9b3361

Ответ 1

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

Ответ 2

Вы просто хотите знать, сколько шума в окружающей среде, и у вас есть два сигнала: оригинальный и записанный? Тогда ваше решение прекрасно. Вам нужно синхронизировать сигналы и найти некоторое количество, которое дает вам сходство. Вы даже можете избежать fft и использовать исходный сигнал (в правильной презентации).

Автосогласование - отличный способ синхронизировать ваши сигналы. Autocorellation-index - это число, которое дает вам сходство.

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

Другим решением было бы вычесть исходный сигнал из записанного сигнала, а затем вы должны получить шум как разность обоих сигналов. Тогда у вас также есть сила шума...