Jak porównać 2 pliki audio, zwracając procent różnicy


12

Czy istnieje sposób na porównanie 2 plików audio, przy czym zostanie zwrócony procent różnicy? Używam C # VS08 , .NET Framework 3.5.

Edytowane: różnica w dźwięku (jak np. Audio 1 "HELP":, Audio 2 "HELP ME PLEASE":, zwróci różnicę procentową między tymi 2 audio.)

Obecnie zapisuję nagrane pliki w formacie wav, a ich szybkość transmisji i jakość będą również takie same, jak w przypadku nagrań i porównania. Chciałbym zapytać, czy istnieje sposób na porównanie dźwięku (nie tylko plików binarnych) w 2 plikach audio o tych samych właściwościach i tym samym formacie (WAV), i pokazać różnicę procentową między 2 dźwiękami w 2 plikach audio.

Pomoc będzie bardzo mile widziana.


7
To, co opisujesz, należy do dziedziny cyfrowego przetwarzania sygnałów. Mówiąc wprost, jeśli musisz zapytać, jak to zrobić, nie jesteś w formie gotowej, aby to zrobić. Bardzo wątpię, że .NET ma coś tak zaawansowanego.

Ostatnio widziałem artykuł badawczy na ten temat: Algorytm przeszukiwania audio o sile przemysłowej (PDF) Porównują widma częstotliwości. Technika ta jest używana w popularnej aplikacji iPhone Shazam .

3
Aby odpowiedzieć na pytanie, potrzebujemy dokładnej i precyzyjnej definicji tego, co oznacza „podobny”. Co według Ciebie oznacza „podobny” w kontekście plików WAV?

1
Próbujesz podejść do problemu rozpoznawania mowy, z którym poważni badacze na całym świecie zmagają się od dziesięcioleci. Chociaż jest to fajna rzecz, którą można zrobić, nie sądzę, że jest to wykonalne dla jednej osoby bez wcześniejszej wiedzy na temat DSP, sieci bayesowskich, klasyfikatorów i tak dalej.
Phonon

2
Czy naprawdę chcesz porównać różnicę w dźwięku, czy tylko w transkrybowanym tekście? Jest to o wiele łatwiejsze, gdy miniesz początkową przeszkodę.
Emre

Odpowiedzi:


8

Czy mógłbyś określić „procent różnicy”?

Na przykład powiedz nam, jakiej wartości oczekujesz:

  • Między dwiema wersjami tego samego pliku zakodowanego przy użyciu różnych ustawień?
  • Między dwiema wersjami tego samego pliku, z wyjątkiem tego, że jedna jest nieco szybsza od drugiej?
  • Pomiędzy dwoma nagraniami z tego samego wejścia audio, ale za pomocą innego mikrofonu / urządzenia nagrywającego?
  • Między dwoma nagraniami tej samej osoby wypowiadającej to samo słowo?
  • Między dwoma nagraniami tej samej osoby wypowiadającej to samo słowo, z inną prozodią (rytm / melodia)?
  • Między dwoma nagraniami różnych osób mówiących to samo słowo?
  • Między dwoma nagraniami tej samej osoby wypowiadającej to samo zdanie, z wyjątkiem kilku słów?
  • Między nagraniem osoby a krową?
  • Między nagraniem samolotu a muzyką?

Co chcesz mierzyć? Treść mowy (słowa)? Melodia, rytm? Ogólne podobieństwo dźwięku? Różnice w kodowaniu / nagrywaniu?


3
Nie wstrzymujmy oddechu; pytanie ma dwa lata, a PO jest AWOL.
Emre

1
Ups, zauważyłem tylko (ostatnią) datę migracji.
fenenety

3

Proszę spojrzeć na ITU-T P.862 . Jest to znormalizowana forma PESQ (Percepcyjna ocena jakości mowy) , rodziny standardów oceny jakości mowy, jakiej doświadcza użytkownik systemu telefonicznego.

Dotyczy to tylko mowy (a nie innych informacji audio). Porównujesz dwa pliki audio, źródłowy i zdegradowany, i otrzymujesz wartość procentową lub ekwiwalent MOS.


2
Witamy w DSP.stackexchange! Dziękujemy za udzielenie odpowiedzi, ale sugeruję zapoznanie się z często zadawanymi pytaniami, aby poprawić swoje odpowiedzi / pytania. Podpisy są odradzane - i tak „podpisujesz” zarejestrowanym uchwytem. Również podanie linków do materiałów zewnętrznych, przykładów i wyjaśnień dotyczących podejść, o których wspominasz w swoich odpowiedziach, jest dobrą praktyką :)
penelope,

-3

Korzystam z jednej funkcji javascript do porównywania holowanego pliku audio. Korzystając z tej samej logiki, możesz porównać dowolny plik w dowolnym języku.

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
Bezpośrednie porównywanie strumienia bocznego nie działa. Dwa nagrania mogą być percepcyjnie nierozróżnialne, ale mogą zostać zakodowane w dwóch różnych strumieniach z 0% dopasowaniem według twojego kodu.
fenenety
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.