Как сравнить 2 аудиофайла, возвращая процентную разницу


12

Есть ли способ сравнить 2 аудиофайла, в результате чего будет возвращен процент разницы? Я использую C # VS08 , .net Framework 3.5.

Отредактировано: разница в звуке (как, например, для Audio 1:, "HELP"Audio 2:, "HELP ME PLEASE"будет возвращена разница в процентах между этими 2 аудио.)

В настоящее время я сохраняю записанные файлы в формате WAV, и его скорость передачи данных и качество также будут такими же, что и для записи и сравнения. Я хотел бы спросить, есть ли способ сравнить звук (не только двоичные файлы) в 2 аудиофайлах с одинаковыми свойствами и одинаковым форматом (WAV) и показать процентную разницу между 2 звуками в 2 аудиофайлах.

Помощь будет принята с благодарностью.


7
То, что вы описываете, находится в области цифровой обработки сигналов. Говоря прямо, если вам нужно спросить, как это сделать, вы не готовы сделать это. Я очень сомневаюсь, что в .NET есть что-то настолько сложное встроенное.

Недавно я видел исследовательскую работу по этому вопросу: Алгоритм промышленного поиска аудио (PDF) Они сравнивают частотные спектры. Техника используется в популярном приложении для iPhone Shazam .

3
Чтобы ответить на вопрос, нам нужно тщательно и точно определить, что означает «похожий». Что, по вашему мнению, означает «подобное» в контексте файлов wav?

1
Вы пытаетесь приблизиться к проблеме распознавания речи, которой серьезные исследователи во всем мире занимались десятилетиями. Несмотря на то, что это крутая вещь, которую можно сделать, я не думаю, что она может быть пригодна для одного человека без предварительного знания DSP, байесовских сетей, классификаторов и так далее.
Фонон

2
Вы действительно хотите сравнить разницу в аудио или просто в транскрибированном тексте? Это намного проще, когда вы преодолеете первоначальное препятствие.
Эмре

Ответы:


8

Не могли бы вы определить «процентную разницу»?

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

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

Что вы хотите измерить? Содержание речи (слова)? Мелодия, ритм? Общее сходство звука? Отличия кодирования / записи оборудования?


3
Давайте не будем задерживать дыхание; Вопросу два года, а ОП - АВОЛ.
Эмре

1
К сожалению, я заметил только (недавнюю) дату миграции.
pichenettes

3

Пожалуйста, ознакомьтесь с ITU-T P.862 . Это стандартизированная форма PESQ (Воспринимаемая оценка качества речи) , семейство стандартов для оценки качества речи, с которыми сталкивается пользователь телефонной системы.

Это только речь (не другая аудиоинформация). Вы сравниваете два аудиофайла, исходный и ухудшенный, и получаете значение в процентах или MOS-эквиваленте.


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

-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% в соответствии с вашим кодом.
pichenettes
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.