En ce qui concerne Speech et Android, la plate-forme Google est la meilleure solution. Le problème est qu'il nécessite un appel à la plate-forme. Il y a une version hors ligne que je n'ai pas essayée: Offline Speech Recognition In Android (JellyBean) Quant à la plate-forme Google, il y a des plugins bon marché pour 20 $ dans Asset Store. Problème principal, ils ne fournissent pas de détection continue, vous devez déclencher l'enregistrement et l'arrêter pour être envoyé. Peut-être que cela vous convient. Le problème est que si vous obtenez beaucoup d'utilisateurs, seulement 1h est gratuit par mois et vous finissez par payer l'utilisation du serveur. Je pense que c'est environ 0,015 $/minutes. D'autre part, il a plus de 80 langues de travail, y compris les accents locaux.
CMUSphynx est une autre solution. Les capacités opensource et offline en font un bon choix. Nous avons dû créer notre propre plugin Android pour Unity mais nous avons eu de mauvais résultats qui nous ont obligés à abandonner l'usage (avant de le demander, non, nous ne pouvons malheureusement pas fournir le plugin ... NDA impliqué). En outre, les langues sont limitées.
Il existe d'autres solutions comme Nuance, beaucoup mieux mais aussi beaucoup plus cher (très probablement hors de portée pour un jeu de démonstration). Leur API est beaucoup plus avancée et régulièrement utilisée dans des situations professionnelles comme la voix sur téléphone pour la redirection automatique. Il est également utilisé sur les appareils Vuzix. Étant donné que vous essaieriez Google Speech, oui, vous pouvez contrôler les données.
Fondamentalement, vous enregistrez un fichier audio, l'envoyez au serveur et le serveur répond avec un objet json contenant une liste de mots reconnus avec probabilité de succès.
Vous récupéreriez le premier et analyser le contenu. Considérant que vous souhaitez obtenir une action de mouvement et le résultat serait:
// This is the result from GSP
string str = "Move player one unit";
if(str.Length == 4)
{
// Parse
string action = str[0];
string actor = str[1];
string amountStr = str[2];
string unit = str[3];
// Convert
float amoutFl = ParseAmount(amountStr);
// Check
if(hashSetActor.Contains(actor) == false){ // error }
if(hashSetUnit.Contains(unit) == false){ // error }
if(actionDictionary.Contains(action))
{
// Act
actionDictionary[action](actor, amountFl,unit);
}
}
le lien fourni est pour OSX pas pour android. –