Como faço para comparar 2 arquivos de áudio, retornando uma porcentagem da diferença


12

Existe uma maneira de comparar 2 arquivos de áudio, em que uma porcentagem da diferença será retornada? Estou usando o C # VS08 , .net framework 3.5.

Editado: diferença no som (como por exemplo: Áudio 1:, "HELP"Áudio 2 "HELP ME PLEASE":, retornará a diferença em porcentagem entre este 2 áudio.)

Atualmente, estou salvando arquivos gravados no formato wav, e sua taxa de bits e qualidade também serão as mesmas que serão gravadas e comparadas. Desejo perguntar se existe uma maneira de comparar o som (não apenas os binários) em 2 arquivos de áudio com as mesmas propriedades e o mesmo formato (WAV) e mostrar a diferença percentual entre os 2 sons nos 2 arquivos de áudio.

A ajuda será muito apreciada.


7
O que você está descrevendo está no domínio do processamento de sinal digital. Para ser franco, se você precisar perguntar como fazê-lo, não está em condições de fazê-lo. Eu duvido muito que o .NET tenha algo tão sofisticado embutido.

Recentemente, vi um trabalho de pesquisa sobre o assunto: um algoritmo de busca de áudio com força industrial (PDF) Eles comparam espectros de frequência. A técnica é usada em um aplicativo popular para iPhone Shazam .

3
Para responder à pergunta, precisaremos de uma definição cuidadosa e precisa do que "semelhante" significa. O que você acha que "semelhante" significa no contexto de arquivos wav?

1
Você está tentando abordar um problema de reconhecimento de fala que pesquisadores sérios em todo o mundo vêm enfrentando há décadas. Por mais que isso seja uma coisa legal de se fazer, não acho que seja tratável para uma pessoa sem conhecimento prévio de DSP, redes bayesianas, classificadores e assim por diante.
Phonon

2
Deseja realmente comparar a diferença de áudio ou apenas o texto transcrito? Isso é muito mais fácil, uma vez que você supera o obstáculo inicial.
Emre

Respostas:


8

Você poderia definir a "porcentagem de diferença"?

Por exemplo, diga-nos qual o valor que você espera obter:

  • Entre duas versões do mesmo arquivo codificado com configurações diferentes?
  • Entre duas versões do mesmo arquivo, exceto que uma é um pouco mais rápida que a outra?
  • Entre duas gravações da mesma entrada de áudio, mas através de diferentes equipamentos de microfone / gravação?
  • Entre duas gravações da mesma pessoa dizendo a mesma palavra?
  • Entre duas gravações da mesma pessoa dizendo a mesma palavra, com uma prosódia diferente (ritmo / melodia)?
  • Entre duas gravações de pessoas diferentes dizendo a mesma palavra?
  • Entre duas gravações da mesma pessoa dizendo a mesma frase, exceto por algumas palavras?
  • Entre a gravação de uma pessoa e a de uma vaca?
  • Entre uma gravação de um avião e música?

O que você quer medir? O conteúdo do discurso (palavras)? A melodia, ritmo? A semelhança geral de áudio? Diferenças nos equipamentos de codificação / gravação?


3
Não vamos prender a respiração; a pergunta tem dois anos e o OP é AWOL.
Emre

1
Ops, notei apenas a data (recente) da migração.
Pichenettes

3

Por favor, dê uma olhada no ITU-T P.862 . É a forma padronizada do PESQ (Perceptual Evaluation of Speech Quality) , uma família de padrões para avaliar a qualidade da fala, conforme experimentada por um usuário de um sistema de telefonia.

Isso é apenas em torno da fala (não outras informações de áudio). Você compara dois arquivos de áudio, origem e degradação, e obtém um valor em porcentagem ou equivalente ao MOS.


2
Bem-vindo ao DSP.stackexchange! Obrigado por fornecer respostas, mas sugiro consultar as Perguntas frequentes para melhorar suas respostas / perguntas. As assinaturas são desencorajadas - você "assina" com o identificador registrado de qualquer maneira. Além disso, oferece links para materiais externos, exemplos e esclarecimentos para o aproxima de você mencionar em suas respostas é uma boa prática :)
penelope

-3

Eu estou usando uma função javascript para comparar o arquivo de áudio de reboque. Usando a mesma lógica, você pode comparar qualquer arquivo em qualquer 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+' %.');

}


3
Comparar diretamente o bytestream não funciona. Duas gravações podem ser perceptivelmente indistinguíveis, mas são codificadas em dois fluxos de dados diferentes, com correspondência de 0% de acordo com o seu código.
Pichenettes #
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.