2009-05-15 5 views
6

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

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

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

+0

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

+0

@ ZomCoder: приложения WAV-to-MIDI ужасны, потому что это безумно сложная проблемная область, а не потому, что программисты, работающие над ней, не являются хорошими программистами. Даже если бы вы были лучшим программистом в мире (и я не говорю, что это не так), вам понадобится много времени и много усилий, чтобы добиться результатов лучше, чем того, что там есть. – MusiGenesis

+0

Если у вас есть библиотека всех возможных звуков, и они не сдвинуты с высоты тона, я думаю, что кросс-корреляция будет работать лучше всего. – endolith

ответ

3

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

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

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

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

+0

Это очень помогает. Моя цель - записать старые WAV-записи цифрового пианино, которые я сделал в MIDI. У этого цифрового пианино есть конечный набор образцов, которые он играет. Если бы я мог захватить все возможные образцы, которые он может играть, и использовать свертку со старыми записями, это звучит так, как будто я могу это сделать. Одно препятствие, о котором я могу думать, это то, что я записал в разных томах. Интересно, насколько это повлияло бы на меня? Мне на самом деле все равно, если он абсолютно идеальный, если он лучше, чем большинство приложений «sound to midi», которые являются TERRIBLE. Благодарю. – 2009-05-16 16:40:01

+0

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

+0

Для этой задачи вы должны использовать кросс-корреляцию, а не свертку. Очень похоже, но немного по-другому. – tom10

0

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

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

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

0

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

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

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

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

4

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

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

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

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

Смежные вопросы