2009-05-15 11 views
6

¿Es posible con FFT encontrar una ocurrencia de una pequeña muestra wav dentro de un wav más largo, si se sabe que existe esa muestra exacta en algún lugar del wav (pero puede mezclarse con otros sonidos)?¿Encuentra una ocurrencia de una muestra de WAV dentro de otra WAV?

edición

(después de recibir dos respuestas): ¿Qué pasa si tengo una biblioteca de todos los sonidos que pueden ser conocidos en el WAV más grande y desea conocer las ocurrencias de cada uno de ellos dentro de ese WAV? En otras palabras, sé cada posible sonido que se puede mezclar en el wav grande, y desea encontrar las apariciones de ellos?

+0

(después de recibir dos respuestas): ¿Qué sucede si tengo una biblioteca de todos los sonidos conocidos que pueden estar en el WAV más grande y deseo encontrar ocurrencias de cada uno de ellos dentro de ese WAV? En otras palabras, sé * cada * sonido posible que se puede mezclar en el wav grande, ¿y deseo encontrar ocurrencias de ellos? –

+0

@ZomCoder: las aplicaciones WAV a MIDI son terribles porque es un dominio de problemas increíblemente difícil, no porque los programadores que trabajan en él no sean buenos programadores. Incluso si fueras el mejor programador del mundo (y no estoy diciendo que no lo estés), te tomaría mucho tiempo y mucho esfuerzo producir resultados mejor que lo que hay afuera. – MusiGenesis

+0

Si tiene una biblioteca con todos los sonidos posibles, y no están desfasados, creo que la correlación cruzada funcionaría mejor. – endolith

Respuesta

3

Supongo que por exacto no quiere decir valor de muestra exacto. Si fuera exacto al valor de la muestra, sería una simple cuestión de buscar los valores de muestra, que es rápido y eficiente.

Si busca bits de sonido que contribuyan, lo mejor es utilizar un proceso matemático llamado "convolución". Básicamente, tome la muestra que está tratando de encontrar dentro de la muestra grande, colóquela junto a la muestra grande y correlacione. Haga esto para cada posición de muestra. A partir de esto obtendrás una curva que tendrá picos distintos en donde está la muestra. Es bastante computacionalmente intenso, pero las computadoras se han vuelto bastante rápidas, por lo que es factible.

Pero - esto es suponiendo que la muestra proviene de la misma grabación para ambos casos. Hacer sonar un sonido de batería, incluso el mismo sonido de batería, desde dos ubicaciones diferentes, no producirá una muy buena correlación.

Espero que ayude.

+0

Eso ayuda mucho. Mi objetivo es transcribir antiguas grabaciones WAV de un piano digital que he convertido en MIDI. Ese piano digital tiene un conjunto finito de muestras que reproduce. Si pudiera tomar todas las muestras posibles que pueda reproducir y usar la convolución con las grabaciones antiguas, parece que podría hacerlo. Un obstáculo en el que puedo pensar es que he grabado en diferentes volúmenes. Me pregunto cuánto me afectaría eso? De hecho, no me importa si es absolutamente perfecto, siempre y cuando sea mejor que la mayoría de las aplicaciones de "sonido a mediodía" que son TERRIBLES. Gracias. –

+0

El volumen más débil dará como resultado una correlación más débil. Sin embargo, un sonido sintonizado como el piano producirá muchos picos, ya que la nota se correlaciona a sí misma, más el desplazamiento de una longitud de onda. Por lo tanto, solo deberá utilizar el pico máximo local entre los demás picos. Tendrá que correlacionarse con cada nota que haya reproducido, por lo que podría ser un poco lenta. –

+0

Para esta tarea, usaría la correlación cruzada y no la convolución. Muy similar, pero un poco diferente. – tom10

0

No exactamente como lo ha definido, si está mezclado con otros sonidos, y esta es la razón; considere el efecto de una onda mezclada precisamente con su inversa; el resultado es una respuesta plana. La mezcla de ondas puede tener una función monótona, es decir, enmascarar eficazmente una onda con otra de manera que la primera no se puede recuperar.

Dicho esto, es probable que exista una manera de caracterizar la "firma" de una onda de modo que pueda estar presente en un archivo de onda compuesta resultante, pero esa firma dependería de la longitud del archivo de onda y de hasta cierto punto, qué tipo de combinaciones se esperaba que se hicieran en él.

Su pregunta probablemente tiene algo que ver con determinar si existen muestras de un trabajo dentro de otro, compuesto, trabajo. En general, sí, las FFT son útiles para determinar una "firma" para una ola determinada y para poder extraer esa "firma" de otra ola; son buenos para algunas cosas (como cambio de frecuencia, simplemente se muestra como un desplazamiento en la FFT), pero no tan bueno para otras cosas (modulación de frecuencia variable, para uno, compresión de ancho de banda alta (o desigual) del original señal). Para decirlo de otra manera: las FFT son una buena manera de detectar el uso "ingenuo" de muestras, pero un remuestreador determinado puede modificar la muestra original para dificultar su detección mediante FFT si sabe que esa es la técnica de detección utilizada.

0

Si conoce la naturaleza exacta de la muestra (longitud en bits, etc.), entonces es muy posible. Si se altera de alguna manera, entonces tendrás mucho trabajo que hacer primero.

Por la forma en que se codifican los archivos WAV (secuencialmente por pista, para obtener el primer lote de bits para la primera pista, luego el primer lote de bits para la segunda, luego el segundo lote de bits del primero pista)

Esto obviamente puede repetirse para tantas pistas. Si sabe que el archivo WAV que está buscando está codificado específicamente en una de estas pistas, puede aislar cada pista y realizar operaciones en ellas.

Obviamente, si su muestra difiere según la velocidad, el tempo, el tono, etc., entonces tendrá una firma de bit diferente, por lo que tendrá que normalizar las pistas.

4

Depende exactamente lo que estás tratando de encontrar y lo que estamos tratando de encontrar en.

  • Si lo que buscas es una muestra de que es exactamente lo mismo que un trozo de un mayor Archivo WAV, bit a bit, luego puede buscar los valores directamente.
  • Si es exactamente el mismo sonido, pero no exacto de muestra (por ejemplo, un clip de un MP3 a un WAV de la misma canción), puede encontrarlo fácilmente usando cross-correlation. La correlación cruzada se puede acelerar significativamente utilizando un método FFT en lugar de un método "ingenuo" que multiplica y suma explícitamente las muestras.
  • Si está buscando una muestra corta mezclada con otros sonidos, aún podría ser posible usar la correlación cruzada, pero depende de si los otros sonidos afectan la coincidencia. Para piano digital con muestras simples y sin efectos, directamente en una grabadora digital, esto podría funcionar.
  • Si el sonido ha pasado por algún tipo de filtrado, inversión de polaridad o cambio de fase, sin embargo, esto no funcionará muy bien, ya que las formas de onda se modificarán. Entonces, si el piano se toca a través de parlantes y luego se graba con micrófonos, esta no es una solución viable.

Lo que puede funcionar mejor en este caso es crear un spectrogram de la grabación con el short-time Fourier transform (STFT), y un espectrograma de lo que estés buscando, y luego hacer una correlación cruzada en tiempo prudente de las dos imágenes. El espectrograma es una imagen en 2D de la amplitud de los espectros de los sonidos a lo largo del tiempo, que luego puede igualar. (Esta es probablemente una forma indirecta de hacer algo, existen algoritmos más especializados, pero no sé cómo se llamaría);)

¿Puedes subir algunos clips de sonido a alguna parte?