少年修仙传客户端代码仓库
xingchen Qiu
2019-04-10 b45f84d1a84cb768d0b136fe37ad18364d74af1f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
namespace NSpeex
{
    using System;
 
    internal class VQ
    {
        public static int Index(float ins0, float[] codebook, int entries)
        {
            float num2 = 0f;
            int num3 = 0;
            for (int i = 0; i < entries; i++)
            {
                float num4 = ins0 - codebook[i];
                num4 *= num4;
                if ((i == 0) || (num4 < num2))
                {
                    num2 = num4;
                    num3 = i;
                }
            }
            return num3;
        }
 
        public static int Index(float[] ins0, float[] codebook, int len, int entries)
        {
            int num3 = 0;
            float num4 = 0f;
            int num5 = 0;
            for (int i = 0; i < entries; i++)
            {
                float num6 = 0f;
                for (int j = 0; j < len; j++)
                {
                    float num7 = ins0[j] - codebook[num3++];
                    num6 += num7 * num7;
                }
                if ((i == 0) || (num6 < num4))
                {
                    num4 = num6;
                    num5 = i;
                }
            }
            return num5;
        }
 
        public static void Nbest(float[] ins0, int offset, float[] codebook, int len, int entries, float[] E, int N, int[] nbest, float[] best_dist)
        {
            int num4 = 0;
            int num5 = 0;
            for (int i = 0; i < entries; i++)
            {
                float num6 = 0.5f * E[i];
                for (int j = 0; j < len; j++)
                {
                    num6 -= ins0[offset + j] * codebook[num4++];
                }
                if ((i < N) || (num6 < best_dist[N - 1]))
                {
                    int index = N - 1;
                    while ((index >= 1) && ((index > num5) || (num6 < best_dist[index - 1])))
                    {
                        best_dist[index] = best_dist[index - 1];
                        nbest[index] = nbest[index - 1];
                        index--;
                    }
                    best_dist[index] = num6;
                    nbest[index] = i;
                    num5++;
                }
            }
        }
 
        public static void Nbest_sign(float[] ins0, int offset, float[] codebook, int len, int entries, float[] E, int N, int[] nbest, float[] best_dist)
        {
            int num4 = 0;
            int num6 = 0;
            for (int i = 0; i < entries; i++)
            {
                int num5;
                float num7 = 0f;
                for (int j = 0; j < len; j++)
                {
                    num7 -= ins0[offset + j] * codebook[num4++];
                }
                if (num7 > 0f)
                {
                    num5 = 1;
                    num7 = -num7;
                }
                else
                {
                    num5 = 0;
                }
                num7 += 0.5f * E[i];
                if ((i < N) || (num7 < best_dist[N - 1]))
                {
                    int index = N - 1;
                    while ((index >= 1) && ((index > num6) || (num7 < best_dist[index - 1])))
                    {
                        best_dist[index] = best_dist[index - 1];
                        nbest[index] = nbest[index - 1];
                        index--;
                    }
                    best_dist[index] = num7;
                    nbest[index] = i;
                    num6++;
                    if (num5 != 0)
                    {
                        nbest[index] += entries;
                    }
                }
            }
        }
    }
}