Wenn es um Sprache und Android geht, ist Google-Plattform der beste Weg. Problem ist, dass es einen Aufruf an die Plattform erfordert. Es gibt eine Offline-Version, die ich nicht versucht habe: Offline Speech Recognition In Android (JellyBean) Wie für Google-Plattform gibt es einige billige Plugins für $ 20 in Asset Store.
Hauptproblem, sie bieten keine kontinuierliche Erkennung, müssten Sie die Aufzeichnung auslösen und stoppen Sie es gesendet werden. Vielleicht ist es für dich geeignet. Problem ist, dass, wenn Sie viele Benutzer bekommen, nur 1h pro Monat frei ist und Sie am Ende die Server-Nutzung bezahlen. Ich denke, es ist ungefähr $ 0.015/Minuten. Auf der anderen Seite hat es mehr als 80 Arbeitssprachen, einschließlich lokaler Akzente.
CMUSphynx ist eine andere Lösung. Opensource und Offline-Funktionen machen es zu einer guten Wahl. Wir mussten unser eigenes Android-Plugin für Unity entwickeln, aber wir hatten schlechte Ergebnisse, die uns dazu brachten, die Nutzung einzustellen (bevor Sie fragen, nein, wir können das Plugin leider nicht zur Verfügung stellen ... NDA beteiligt). Außerdem sind die Sprachen begrenzt.
Es gibt andere Lösungen wie Nuance, viel besser aber auch viel teurer (am ehesten für ein Demo-Spiel). Ihre API ist viel fortgeschrittener und wird regelmäßig in professionellen Situationen wie Voice-over-Telefon für die automatische Weiterleitung verwendet. Es wird auch auf Vuzix-Geräten verwendet.
In Anbetracht Sie würden Google Speech versuchen, ja Sie können Daten steuern. Im Grunde nehmen Sie eine Audiodatei auf, senden sie an den Server und der Server antwortet mit einem json-Objekt, das eine Liste von erkannten Wörtern mit Erfolgswahrscheinlichkeit enthält.
Sie würden die erste greifen und den Inhalt analysieren. Erwägen Sie bekommen würde eine Bewegungsaktion und das Ergebnis sein:
// 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);
}
}
der angegebene Link ist für OSX nicht für Android. –