J'utilise pocketsphinx pour reconnaître les mots dans l'application Android quand quelqu'un parle. Je veux mettre en œuvre des fonctionnalités pour renvoyer une amplitude maximale d'une voix que l'enregistrement de pocketsphinx. Si je parle n'importe quel mot j'ai besoin d'obtenir un niveau sonore en retour (l'un ou l'autre mot identifie ou non du décodeur). Qu'est-ce que je l'ai fait: je regarde dans le code de pocketsphinx -> SpeechRecognizer actuellement commenté dans le fichier source:Comment obtenir l'amplitude de la voix de pocketsphinx
/* while (!interrupted()
&& ((timeoutSamples == NO_TIMEOUT) || (remainingSamples > 0))) {
int nread = recorder.read(buffer, 0, buffer.length);
if (-1 == nread) {
throw new RuntimeException("error reading audio buffer");
} else if (nread > 0) {
decoder.processRaw(buffer, nread, false, false);
int max = 0;
for (int i = 0; i < nread; i++) {
max = Math.max(max, Math.abs(buffer[i]));
}....
Je semble être que cette valeur max calcule à partir d'un tampon Comment puis-je calculer cela de complète enregistrement. Quelqu'un peut-il me donner un indice?
Voici comment je calculais un niveau de bruit à partir d'une classe de reconnaissance vocale et renvoyais à mon service (incapable de se formater sous le code): double somme = 0, amplitudeDb = 0; pour (int i = 0; i 0) { double amplitude finale = somme/nread; amplitudeDb = (int) Math.sqrt (amplitude); MainHandler.post (nouvel AmplitudeEvent (amplitudeDb)); –
Ok, ça a l'air correct –