Salut à tous le monde,

J'ai récupéré sur Internet un code source qui permet, en théorie, de fournir les coefficients LPC qui caractérisent un locuteur. Seulement je n'arrive pas à le faire fonctionner. Donc je vous mets le code, et dites moi s'il faut des imports particuliers (autres que ceux présents), installer des bibliothèques pour l'audio, ou autre chose. Je sais que je dois importer cette classe dans une autre classe (audio) qui lit les fichiers .wav pour faire la reconnaissance du locuteur, le problème c'est comment fait appeler cette classe (LPC) ?

Voici le lien où j'ai trouvé ce code:

http://svn.assembla.com/svn/roots/js...speex/Lpc.java

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
package org.xiph.speex;
 
/**
 * LPC- and Reflection Coefficients
 *
 * The next two functions calculate linear prediction coefficients
 * and/or the related reflection coefficients from the first P_MAX+1
 * values of the autocorrelation function.
 * 
 * Invented by N. Levinson in 1947, modified by J. Durbin in 1959.
 */
public class Lpc
{
  /**
   * Returns minimum mean square error
   * @param lpc - float[0...p-1] LPC coefficients
   * @param ac -  in: float[0...p] autocorrelation values
   * @param ref - out: float[0...p-1] reflection coef's
   * @param p
   */
  public static float wld(float[] lpc, float[] ac, float[] ref, int p)
  {
    int i, j;
    float r, error = ac[0];
 
    if (ac[0] == 0) 
    {
      for (i=0; i<p; i++)
        ref[i] = 0;
      return 0;
    }
 
    for (i = 0; i < p; i++) 
    {
      /* Sum up this iteration's reflection coefficient. */
      r = -ac[i + 1];
      for (j = 0; j < i; j++) r -= lpc[j] * ac[i - j];
      ref[i] = r /= error;
      /*  Update LPC coefficients and total error. */
      lpc[i] = r;
      for (j = 0; j < i/2; j++) 
      {
        float tmp  = lpc[j];
        lpc[j]     += r * lpc[i-1-j];
        lpc[i-1-j] += r * tmp;
      }
      if ((i % 2) != 0)
        lpc[j] += lpc[j] * r;
      error *= 1.0 - r * r;
    }
    return error;
  }
 
  /**
   * Compute the autocorrelation
   *         ,--,
   * ac(i) = >  x(n) * x(n-i)  for all n
   *         `--'
   * for lags between 0 and lag-1, and x == 0 outside 0...n-1
   * @param x - in: float[0...n-1] samples x
   * @param ac - out: float[0...lag-1] ac values
   * @param lag
   * @param n
   */
  public static void autocorr(float[] x, float[] ac, int lag, int n)
  {
    float d;
    int i;
    while (lag-- > 0) 
    {
      for (i=lag, d=0; i<n; i++)
        d += x[i] * x[i-lag];
      ac[lag] = d;
    }
  }
}
Dans la méthode: public static float wld(float[] lpc, float[] ac, float[] ref, int p) comment je peux entrer les données du tableau lpc puisque le résultat final c'est de les trouver ?

Merci pour toute aide et suggestions.