Як порівнювати 2 аудіофайли, повертаючи відсоток різниці


12

Чи є спосіб порівняти 2 аудіофайли, за допомогою яких повернеться відсоток різниці? Я використовую C # VS08 , .net Framework 3.5.

Відредаговано: різниця в звуку (як, наприклад, аудіо 1:, "HELP"аудіо 2:, "HELP ME PLEASE"він поверне різницю в відсотках між цим 2 звуком.)

Зараз я зберігаю записані файли у форматі wav, і його швидкість передачі даних та якість також будуть такими ж, як і записи, які будуть записані та порівняні. Хочеться запитати, чи є спосіб порівняння звуку (не лише двійкових файлів) у 2 аудіофайлах однакових властивостей і того ж формату (WAV), і показати відсоткове різницю між двома звуками у 2 аудіофайлах.

Допомога буде дуже вдячна.


7
Те, що ви описуєте, - в області цифрової обробки сигналів. Відверто кажучи, якщо вам потрібно запитати, як це зробити, ви не готові це зробити. Я дуже сумніваюся, що .NET має щось настільки складне вбудоване.

Нещодавно я бачив науково-дослідний документ з цього питання: Алгоритм аудіо-пошуку в промисловості (PDF) Вони порівнюють частотні спектри. Ця методика використовується в популярному додатку для iPhone Shazam .

3
Щоб відповісти на запитання, нам потрібно ретельно і точно визначити, що означає "подібне". Що ви вважаєте, що "подібне" означає у контексті файлів wav?

1
Ви намагаєтеся підійти до проблеми розпізнавання мовлення, яку серйозні дослідники у всьому світі вирішують десятиліттями. Наскільки це класна річ, яку можна зробити, я не думаю, що це можна прослідкувати для однієї людини без попереднього знання DSP, байєсівських мереж, класифікаторів тощо.
Phonon

2
Ви дійсно хочете порівнювати різницю в аудіо, або просто в переписаному тексті? Це набагато простіше, як тільки ти пройдеш початкову перешкоду.
Емре

Відповіді:


8

Не могли б Ви визначити "відсоток різниці"?

Наприклад, скажіть, будь ласка, яке значення ви очікуєте отримати:

  • Між двома версіями одного файлу, закодованого з різними налаштуваннями?
  • Між двома версіями одного файлу, за винятком того, що одна трохи швидша за іншу?
  • Між двома записами одного і того ж аудіовходу, але через різні мікрофони / звукозаписні пристрої?
  • Між двома записами однієї і тієї ж людини, яка говорить одне і те ж слово?
  • Між двома записами однієї і тієї ж людини, яка вимовляє те саме слово, з різною просодією (ритм / мелодія)?
  • Між двома записами різних людей, які говорять одне і те ж слово?
  • Між двома записами однієї і тієї ж людини, яка говорить одне і те ж речення, за винятком кількох слів?
  • Між записом людини та короваю?
  • Між записом літака і музикою?

Що ти хочеш виміряти? Зміст мовлення (слова)? Мелодія, ритм? Загальна схожість звуку? Кодування / запису різниці обладнання?


3
Не будемо затримувати дихання; питання два роки, і ОП AWOL.
Емре

1
На жаль, я помітив лише (недавню) дату міграції.
пікенети

3

Будь ласка, подивіться на ITU-T P.862 . Це стандартизована форма PESQ (перцептуальна оцінка якості мови) , сімейство стандартів для оцінки якості мови, переживаних користувачем телефонної системи.

Це лише навколо мови (не іншої аудіоінформації). Ви порівнюєте два аудіофайли, вихідний та деградований і отримуєте значення у відсотках або MOS-еквіваленті.


2
Ласкаво просимо на DSP.stackexchange! Дякую за надання відповідей, але я пропоную переглянути FAQ, щоб покращити ваші відповіді / питання. Підписи відмовляють - ви все одно «підписуєтесь» зареєстрованою ручкою. Крім того, надання посилань на зовнішній матеріал, приклади та роз’яснення щодо підходів, які ви згадуєте у своїх відповідях, є хорошою практикою :)
penelope

-3

Я використовую одну функцію javascript для порівняння буксирного аудіофайлу. Використовуючи ту саму логіку, ви можете порівнювати будь-який файл будь-якою мовою.

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
Безпосереднє порівняння bytestream не працює. Два записи можуть бути невідмітними, але вони кодуються у два різні потоки з 0% відповідності відповідно до вашого коду.
пікенети
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.