如何比较 2 个音频文件,返回差异百分比

信息处理 声音的 C#
2022-01-06 08:40:30

有没有办法比较 2 个音频文件,从而返回一定百分比的差异?我正在使用C# VS08,.net 框架 3.5。

编辑:声音的差异(例如,音频 1: "HELP",音频 2: "HELP ME PLEASE",它将返回这 2 个音频之间的百分比差异。)

我目前正在以 wav 格式保存录制的文件,其比特率和质量也将与录制和比较的相同。我想问是否有办法比较相同属性和相同格式 (WAV) 的 2 个音频文件中的声音(不仅仅是二进制文件),并显示 2 个音频文件中 2 个声音之间的百分比差异。

帮助将不胜感激。

3个回答

您能否定义“差异百分比”?

例如,请告诉我们您期望获得的价值:

  • 在使用不同设置编码的同一文件的两个版本之间?
  • 在同一个文件的两个版本之间,除了一个比另一个稍微快一点?
  • 在同一音频输入的两个录音之间,但通过不同的麦克风/录音设备?
  • 在同一个人说同一个词的两个录音之间?
  • 在同一个人说同一个词的两个录音之间,具有不同的韵律(节奏/旋律)?
  • 在两个不同人说同一个词的录音之间?
  • 在同一个人的两次录音之间,除了几个词外,说的是同一句话?
  • 在一个人的录音和一头牛的录音之间?
  • 在飞机录音和音乐之间?

你想测量什么?演讲内容(词)?旋律,节奏?整体音频相似度?编码/录音设备的区别?

请查看ITU-T P.862它是PESQ(语音质量感知评估)的标准化形式,是用于评估电话系统用户所体验的语音质量的标准系列。

这只是围绕语音(而不是其他音频信息)。您比较两个音频文件,文件和降级文件,并获得百分比或 MOS 等效值。

我正在使用一个 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+' %.');

}