Найти вхождение образца WAV в другой WAV? - PullRequest
6 голосов
/ 15 мая 2009

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

редактировать

(после получения двух ответов): Что если у меня есть библиотека всех известных звуков, которые могут быть в большом WAV, и я хочу найти вхождения каждого из них в этот WAV? Другими словами, я знаю каждый возможный звук, который можно микшировать в большой wav, и хочу найти их появление?

Ответы [ 4 ]

4 голосов
/ 13 июля 2009

Это зависит от того, что именно вы пытаетесь найти и в чем вы пытаетесь найти это.

  • Если вы ищете образец, точно такой же, как кусок большего файла WAV, побитовый, то вы можете искать значения напрямую.
  • Если это точно такой же звук, но не с точностью до семпла (например, при сопоставлении клипа MP3 с WAV той же песни), вы можете легко найти его, используя взаимная корреляция . Кросс-корреляция может быть значительно ускорена при использовании метода FFT вместо «наивного» метода, который явно умножает и суммирует выборки.
  • Если вы ищете короткий сэмпл, который был смешан с другими звуками, все еще возможно использовать взаимную корреляцию, но это зависит от того, влияют ли другие звуки на соответствие. Для цифрового пианино с простыми семплами и без эффектов, прямо в цифровой диктофон, это может сработать.
  • Если звук был подвергнут какой-либо фильтрации, переполюсовке или фазовому сдвигу, это не будет работать очень хорошо, поскольку формы волны будут изменены. Так что, если на пианино играли через динамики, а затем записывали с помощью микрофонов, это не жизнеспособное решение.

Что может быть лучше в этом случае, так это создать спектрограмму записи с использованием кратковременного преобразования Фурье (STFT) и спектрограмму того, что вы искать, а затем выполнить временную взаимную корреляцию двух изображений. Спектрограмма представляет собой двухмерное изображение амплитуды спектров звуков во времени, которое затем можно сопоставить. (Это, вероятно, окольный способ сделать что-то, для чего существуют более специализированные алгоритмы, но я не знаю, как это будет называться.);)

Можете ли вы загрузить где-нибудь аудиоклипы?

3 голосов
/ 16 мая 2009

Я предполагаю, что под точным значением пробы вы не подразумеваете. Если бы это было точное значение выборки, то было бы просто найти значения выборки, что было бы быстро и эффективно.

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

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

Надеюсь, это поможет.

0 голосов
/ 15 мая 2009

Если вы знаете точную природу сэмпла (длина в битах и ​​т. Д.), То это очень возможно. Если это как-то изменится, то сначала вам предстоит много работы.

Из-за способа кодирования файлов WAV (последовательно по дорожке - таким образом, вы получаете первую партию битов для первой дорожки, затем первую партию битов для второй дорожки, затем вторую партию битов из первой дорожки )

Это, очевидно, может повторяться для стольких треков. Если вы знаете, что WAV-файл, который вы ищете, специально закодирован в одну из этих дорожек, вы можете изолировать каждую дорожку и выполнять над ними операции.

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

0 голосов
/ 15 мая 2009

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

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

Ваш вопрос, вероятно, имеет отношение к определению, существуют ли образцы одной работы в другой, составной, работе. В общем, да, БПФ полезны для определения «сигнатуры» для данной волны и возможности извлечь эту «сигнатуру» из другой волны; они хороши для некоторых вещей (например, сдвиг частоты; это просто проявляется как смещение на БПФ), но не так хороши для других вещей (изменение частотной модуляции, для одной; высокая (или неравномерная) полоса сжатия оригинала сигнал). Другими словами: БПФ - хороший способ обнаружить «наивное» использование образцов, но определенный ресэмплер может изменить исходный образец, чтобы затруднить его обнаружение с помощью БПФ, если он знает, что это метод обнаружения.

...