C# 用C语言进行语音认证的最佳方法#

C# 用C语言进行语音认证的最佳方法#,c#,voice-recognition,C#,Voice Recognition,我正在建立一个语音认证系统,为此,我使用C#语音识别,它可以让我保存转换后的音频文件,并将其存储为wav文件 我有另一个wav文件,我在其中存储了我的声音 然后,我使用前面提到的FFT来比较2个wav文件,并使用来自的互相关码 我的openWav代码如下: public static void openWav(string filename, out double[] left, out double[] right) { var numArray =

我正在建立一个语音认证系统,为此,我使用C#语音识别,它可以让我保存转换后的音频文件,并将其存储为wav文件

我有另一个wav文件,我在其中存储了我的声音

然后,我使用前面提到的FFT来比较2个wav文件,并使用来自的互相关码

我的openWav代码如下:

 public static void openWav(string filename, out double[] left, out double[] right)
        {
            var numArray = File.ReadAllBytes(filename);
            int num1 = numArray[22];
            int index1;
            int index2;
            int num2;
            for (index1 = 12;
                numArray[index1] != 100 || numArray[index1 + 1] != 97 ||
                (numArray[index1 + 2] != 116 || numArray[index1 + 3] != 97);
                index1 = index2 + (4 + num2))
            {
                index2 = index1 + 4;
                num2 = numArray[index2] + numArray[index2 + 1] * 256 + numArray[index2 + 2] * 65536 +
                       numArray[index2 + 3] * 16777216;
            }
            var index3 = index1 + 8;
            var length = (numArray.Length - index3) / 2;
            if (num1 == 2)
                length /= 2;
            left = new double[length];
            right = num1 != 2 ? null : new double[length];
            var index4 = 0;
            while (index3 < numArray.Length)
            {
                left[index4] = bytesToDouble(numArray[index3], numArray[index3 + 1]);
                index3 += 2;
                if (num1 == 2)
                {
                    right[index4] = bytesToDouble(numArray[index3], numArray[index3 + 1]);
                    index3 += 2;
                }
                ++index4;
            }
        }
publicstaticvoidopenwav(字符串文件名,out-double[]左,out-double[]右)
{
var numArray=File.ReadAllBytes(文件名);
int num1=numaray[22];
int index1;
int index2;
int num2;
对于(index1=12;
努马拉[index1]!=100 | |努马拉[index1+1]!=97||
(努马拉[index1+2]!=116 | |努马拉[index1+3]!=97);
index1=index2+(4+num2))
{
index2=index1+4;
num2=numArray[index2]+numArray[index2+1]*256+numArray[index2+2]*65536+
努马拉伊[index2+3]*16777216;
}
var index3=index1+8;
变量长度=(numArray.length-index3)/2;
如果(num1==2)
长度/=2;
左=新的双精度[长度];
右=num1!=2?空:新的双精度[长度];
var index4=0;
而(index3
它工作正常,但每次我得到的答案都在0.6到0.8之间,即使不是我的声音


有人能告诉我哪里做错了,或者在C#中是否有其他方法可以做到这一点吗?

我很确定互相关不是正确的语音认证方法。那么你的建议是什么@DanielHilgarthI不知道,这超出了我的专业范围。问题是:互相关用于在另一个样本中找到一个样本。有些变化是可以的,但是当你进行身份验证时,你说话,所以每次都是不同的。我很确定互相关不是正确的语音身份验证方法。那么你的建议是什么@DanielHilgarthI不知道,这超出了我的专业范围。问题是:互相关用于在另一个样本中找到一个样本。有些变化是可以的,但当您进行身份验证时,您说话,所以每次都是不同的。