¿Cómo comparo 2 archivos de audio, devolviendo un porcentaje de diferencia

12

¿Hay alguna manera de comparar 2 archivos de audio, mediante el cual se devolverá un porcentaje de diferencia? Estoy usando C # VS08 , .net framework 3.5.

Editado: diferencia en el sonido (como por ejemplo, Audio 1:, "HELP"Audio 2:, "HELP ME PLEASE"devolverá la diferencia en porcentaje entre este audio 2).

Actualmente estoy guardando archivos grabados en formato wav, y su velocidad de bits y calidad también serán las mismas que las que se grabarán y se compararán. Deseo preguntar si hay una manera de comparar el sonido (no solo los binarios) en 2 archivos de audio de las mismas propiedades y el mismo formato (WAV), y mostrar la diferencia porcentual entre los 2 sonidos en los 2 archivos de audio.

La ayuda será muy apreciada.

Jav_Rock
fuente
77
Lo que está describiendo está en el dominio del procesamiento de señales digitales. En pocas palabras, si necesita preguntar cómo hacerlo, no está en condiciones de hacerlo. Dudo mucho que .NET tenga algo tan sofisticado incorporado.
Recientemente he visto un trabajo de investigación sobre el tema: Algoritmo de búsqueda de audio de potencia industrial (PDF). Comparan los espectros de frecuencia. La técnica se utiliza en una aplicación popular para iPhone, Shazam .
3
Para responder la pregunta necesitaremos una definición cuidadosa y precisa de lo que significa "similar". ¿Qué crees que significa "similar" en el contexto de los archivos wav?
1
Estás intentando abordar un problema de reconocimiento de voz que los investigadores serios de todo el mundo han abordado durante décadas. Aunque es algo genial de hacer, no creo que sea manejable para una persona sin conocimiento previo de DSP, redes bayesianas, clasificadores, etc.
Phonon
2
¿Realmente quieres comparar la diferencia en audio, o simplemente en el texto transcrito? Eso es mucho más fácil una vez que superas el obstáculo inicial.
Emre

Respuestas:

8

¿Podría definir el "porcentaje de diferencia"?

Por ejemplo, díganos qué valor espera obtener:

  • ¿Entre dos versiones del mismo archivo codificado con diferentes configuraciones?
  • ¿Entre dos versiones del mismo archivo, excepto que una es ligeramente más rápida que la otra?
  • ¿Entre dos grabaciones de la misma entrada de audio, pero a través de diferentes equipos de grabación / micrófono?
  • ¿Entre dos grabaciones de la misma persona diciendo la misma palabra?
  • ¿Entre dos grabaciones de la misma persona diciendo la misma palabra, con una prosodia diferente (ritmo / melodía)?
  • ¿Entre dos grabaciones de diferentes personas que dicen la misma palabra?
  • ¿Entre dos grabaciones de la misma persona diciendo la misma oración, excepto por unas pocas palabras?
  • ¿Entre la grabación de una persona y la de una vaca?
  • ¿Entre una grabación de un avión y música?

¿Qué quieres medir? El contenido del discurso (palabras)? La melodía, el ritmo? La similitud de audio en general? ¿Diferencias en el equipo de codificación / grabación?

pichenettes
fuente
3
No contengamos la respiración; la pregunta tiene dos años y el OP es AWOL.
Emre
1
Vaya, solo he notado la fecha (reciente) de migración.
pichenettes
3

Eche un vistazo a ITU-T P.862 . Es una forma estandarizada de PESQ (Perceptual Evaluation of Speech Quality) , familia de estándares para evaluar la calidad del habla según la experiencia de un usuario de un sistema de telefonía.

Esto es solo alrededor del habla (no otra información de audio). Compara dos archivos de audio, fuente y degradado, y obtiene un valor en porcentaje o equivalente MOS.

JJPOMBAR
fuente
2
¡Bienvenido a DSP.stackexchange! Gracias por proporcionar respuestas, pero le sugiero que consulte las preguntas frecuentes para mejorar sus respuestas / preguntas. Se desaconsejan las firmas: de todos modos, "firma" con su identificador registrado. Además, proporcionar enlaces a material externo, ejemplos y aclaraciones para los enfoques que menciona en sus respuestas es una buena práctica :)
penelope
-3

Estoy usando una función de JavaScript para comparar el archivo de audio de remolque. Al usar la misma lógica, puede comparar cualquier archivo en cualquier idioma.

function compireAudio(){ 
var audio1 = "http://soundjax.com/reddo/86502%5Ealarm.mp3"; 
var audio2 = "http://soundjax.com/reddo/44368%5EALARME.mp3";
var i,j,d;
var matching = 0;
var t = 0;var i,j,d;
var matching = 0;
var t = 0;
var audio1Arr = Array();
var audio1Len = audio1.length;
for (i = 1; i<=audio1Len; i++)
{
    //reverse so its like a stack
    d = audio1.charCodeAt(audio1Len-i);
    for (j = 0; j < 8; j++) 
    {
        audio1Arr.push(d%2);
        d = Math.floor(d/2);
    }
}
var audio2Len = audio2.length;
for (i = 1; i<=audio2Len; i++)
{
    //reverse so its like a stack
    d = audio2.charCodeAt(audio2Len-i);
    for (j = 0; j < 8; j++) 
    {
        if(d%2 == audio1Arr[t])
        {
            matching++;
        }
        d = Math.floor(d/2);
        t++;
    }
}
var avarage = Number(matching)/((Number(t)+Number(audio1Arr.length))/Number(2))*Number(100);
alert('The Matching with the two audio is '+avarage+' %.');

}

Punnoose áspero
fuente
3
La comparación directa de bytestream no funciona. Dos grabaciones pueden ser perceptiblemente indistinguibles, pero se codifican en dos canales diferentes con un 0% de coincidencia de acuerdo con su código.
pichenettes