¿Hay alguna manera de comparar programáticamente dos archivos de sonido para determinar si son idénticos o casi idénticos? Estos no son archivos mp3 y no tienen ningún ID3 u otros metadatos, sino archivos wav. Comparar los valores de la suma de comprobación puede no funcionar ya que pueden no ser completamente idénticos.Comparación de archivos de sonido si no es completamente idéntica
Respuesta
El wikipedia article on acoustic fingerprinting menciona una serie de productos, incluido el opensource libfooid. Básicamente, estás buscando entrar en el dominio de la frecuencia, tomando niveles aproximados en un número relativamente pequeño de bandas (digamos 32), para darte una cadena que represente algo así como 25 ms de sonido, haciendo eso para todo el archivo, luego haciendo un comparación fuzzing de esas cadenas para diferentes archivos. Es bastante complejo, pero necesita hacerlo; comparar las muestras reales no te llevará a ninguna parte, ya que algo tan simple como un cambio de volumen en un pequeño porcentaje arrojará la coincidencia completa.
Puede comparar los dos archivos WAV muestra por muestra y calcular una diferencia promedio por muestra. Para agilizar las cosas, puede usar el mismo método, pero compare cada décima muestra o cada 100 muestra y obtenga esencialmente el mismo valor (dos archivos que no son iguales o incluso cercanos tendrán una gran diferencia promedio por muestra))
esto no funciona si un archivo tiene 1 segundo de silencio agregado al frente del mismo, pero por lo demás son idénticos. – rmeador
Necesita agregar el reconocimiento de patrones y luego tratar de alinearlos temporalmente antes de verificar las muestras –
Estoy de acuerdo con ambos puntos, pero eso lleva este problema del dominio de lo simple al reino de lo espantosamente complejo. – MusiGenesis
Una cosa que podría probar que le daría una huella digital bastante decente del archivo es tomar un Fourier transform y observar la distribución de las diferentes frecuencias presentes en el archivo. Todavía es muy posible crear dos archivos de sonido muy diferentes que tengan la misma transformada de Fourier, pero eso es algo improbable si sus archivos provienen de un origen no artificial ...
Entonces, para comparar archivos encuentro la correlación entre 2 ffts?(suponiendo que esto me dará resultados no tan precisos) – Talha
El proceso para comparar un conjunto de sonidos para similitudes se denomina Audio basado en contenido Indexing, Retrieval y Fingerprinting en la investigación en ciencias de la computación.
Un método para hacer esto es:
1) ejecutar varios bits de procesamiento de la señal en cada archivo de audio para extraer características, tales como el tono con el tiempo, el espectro de frecuencia, autocorrelación, rango dinámico, transitorios, etc.
2) Poner todas las características para cada archivo de audio en una matriz multi-dimensional y volcar cada matriz multidimensional en una base de datos
3) Utilizar técnicas de optimización (como gradient descent) para encontrar la mejor combinación para un archivo de audio dado en su base de datos multidimensionales.
El truco para hacer bien este trabajo es el que cuenta con
Hay varios proyectos que hacen este tipo de cosas, incluyendo MusicBrainz y EchoNest.
Echonest tiene una de las simplest APIs que he visto en este espacio. Muy fácil de empezar
P.S. No, no trabajo para Echonest, ni conozco a nadie que trabaje allí.
- 1. Utilidad de comparación de archivos
- 2. Comprobando si el archivo está completamente escrito
- 3. Ramas, aparentemente, han divergido, pero la historia es idéntica cometer
- 4. Idéntica construcción en diferentes sistemas
- 5. ¿Es alloca completamente reemplazable?
- 6. ¿Cuál es una manera eficiente de saber si un mapa de bits es completamente negro?
- 7. Dos archivos .c tienen una configuración de compilación idéntica: VC++ no informa ningún error y no compila ninguno
- 8. Android: el oyente graba sonido si se produce algún sonido
- 9. Biblioteca de sonido C++ multiplataforma que no es GPL/LGPL?
- 10. android.R.color.transparent no completamente transparente
- 11. ¿Cómo se elimina y libera completamente la memoria de un archivo de sonido OpenAL?
- 12. decodeURI no funciona completamente
- 13. Comparación de fechas para buscar archivos antiguos
- 14. Uso de diff y supresión de archivos completamente diferentes
- 15. Mezcla de archivos de sonido en un iPhone
- 16. Cómo comprobar si un archivo está completamente copiado en .NET
- 17. No entiendo completamente JavaScript Threading
- 18. Comprueba si el sistema tiene sonido C#
- 19. FlexJSON no serializa completamente objetos de clase
- 20. Comparación de archivos mediante Byte Array issues
- 21. Comparación de archivos Docx con OOXML
- 22. Comparación de archivos enormes usando C++
- 23. Comparación de archivos XML en Eclipse
- 24. ¿Las funciones de NPP no están completamente optimizadas?
- 25. No hay sonido proveniente de Android Emulator
- 26. ¿Cómo usar la comparación y 'si no' en Python?
- 27. Control de versión para sonido, video y otros archivos binarios
- 28. ¿Cómo eliminar completamente MySQL con archivos de configuración y biblioteca?
- 29. Determinando si un formulario está completamente fuera de pantalla
- 30. Sonido de una bola rodante
Buen enlace. OQ parecía sugerir que los archivos podían ser idénticos o casi iguales, lo que indicaba que la comparación muestra por muestra podría funcionar. – MusiGenesis