Skip to content

Commit 911dd73

Browse files
committed
added new options to modify language, maxResults, to stop listening, and to display possible errors
1 parent d638a28 commit 911dd73

File tree

10 files changed

+3605
-572
lines changed

10 files changed

+3605
-572
lines changed
Binary file not shown.

UnitySpeechRecognizer/Assets/Plugins/SpeechRecognizer/Android/UnitySpeechRecognizer.aar.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

UnitySpeechRecognizer/Assets/Scripts/SpeechRecognizer.cs

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,56 @@
66
public class SpeechRecognizer : MonoBehaviour, ISpeechRecognizerPlugin
77
{
88
[SerializeField] private Button startListeningBtn = null;
9+
[SerializeField] private Button stopListeningBtn = null;
910
[SerializeField] private Toggle continuousListeningTgle = null;
11+
[SerializeField] private TMP_Dropdown languageDropdown = null;
12+
[SerializeField] private TMP_InputField maxResultsInputField = null;
1013
[SerializeField] private TextMeshProUGUI resultsTxt = null;
14+
[SerializeField] private TextMeshProUGUI errorsTxt = null;
1115

1216
private SpeechRecognizerPlugin plugin = null;
1317

14-
void Start()
18+
private void Start()
1519
{
1620
plugin = SpeechRecognizerPlugin.GetPlatformPluginVersion(this.gameObject.name);
1721

1822
startListeningBtn.onClick.AddListener(StartListening);
23+
stopListeningBtn.onClick.AddListener(StopListening);
1924
continuousListeningTgle.onValueChanged.AddListener(SetContinuousListening);
25+
languageDropdown.onValueChanged.AddListener(SetLanguage);
26+
maxResultsInputField.onEndEdit.AddListener(SetMaxResults);
2027
}
2128

2229
private void StartListening()
2330
{
2431
plugin.StartListening();
2532
}
2633

34+
private void StopListening()
35+
{
36+
plugin.StopListening();
37+
}
38+
2739
private void SetContinuousListening(bool isContinuous)
2840
{
2941
plugin.SetContinuousListening(isContinuous);
3042
}
3143

44+
private void SetLanguage(int dropdownValue)
45+
{
46+
string newLanguage = languageDropdown.options[dropdownValue].text;
47+
plugin.SetLanguageForNextRecognition(newLanguage);
48+
}
49+
50+
private void SetMaxResults(string inputValue)
51+
{
52+
if (string.IsNullOrEmpty(inputValue))
53+
return;
54+
55+
int maxResults = int.Parse(inputValue);
56+
plugin.SetMaxResultsForNextRecognition(maxResults);
57+
}
58+
3259
public void OnResult(string recognizedResult)
3360
{
3461
char[] delimiterChars = { '~' };
@@ -40,4 +67,22 @@ public void OnResult(string recognizedResult)
4067
resultsTxt.text += result[i] + '\n';
4168
}
4269
}
70+
71+
public void OnError(string recognizedError)
72+
{
73+
ERROR error = (ERROR)int.Parse(recognizedError);
74+
switch (error)
75+
{
76+
case ERROR.UNKNOWN:
77+
Debug.Log("<b>ERROR: </b> Unknown");
78+
errorsTxt.text += "Unknown";
79+
break;
80+
case ERROR.INVALID_LANGUAGE_FORMAT:
81+
Debug.Log("<b>ERROR: </b> Language format is not valid");
82+
errorsTxt.text += "Language format is not valid";
83+
break;
84+
default:
85+
break;
86+
}
87+
}
4388
}

UnitySpeechRecognizer/Assets/Scripts/SpeechRecognizerPlugin.cs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
public abstract class SpeechRecognizerPlugin
44
{
5+
protected bool isContinuousListening = false;
6+
protected string language = "en-US";
7+
protected int maxResults = 10;
58
protected string gameObjectName = "SpeechRecognizer";
6-
9+
710
protected SpeechRecognizerPlugin(string gameObjectName = null)
811
{
912
this.gameObjectName = gameObjectName;
@@ -26,13 +29,22 @@ public static SpeechRecognizerPlugin GetPlatformPluginVersion(string gameObjectN
2629
}
2730
}
2831

32+
public enum ERROR { UNKNOWN, INVALID_LANGUAGE_FORMAT }
2933
public interface ISpeechRecognizerPlugin
3034
{
3135
void OnResult(string recognizedResult);
36+
void OnError(string recognizedError);
3237
}
3338

3439
//Features
3540
protected abstract void SetUp();
3641
public abstract void StartListening();
37-
public abstract void SetContinuousListening(bool isContinuous);
42+
public abstract void StartListening(bool setContinuousListening = false, string language = "en-US", int maxResults = 10);
43+
public abstract void StopListening();
44+
45+
//Remember that all this modifier-methods will be applied when the last recognition ends...
46+
//...so only use them if continuous listening is enabled.
47+
public abstract void SetContinuousListening(bool isContinuousListening);
48+
public abstract void SetLanguageForNextRecognition(string newLanguage);
49+
public abstract void SetMaxResultsForNextRecognition(int newMaxResults);
3850
}

UnitySpeechRecognizer/Assets/Scripts/SpeechRecognizerPlugin_Android.cs

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,50 @@
22

33
public class SpeechRecognizerPlugin_Android : SpeechRecognizerPlugin
44
{
5-
public string javaClassPackageName = "com.example.eric.unityspeechrecognizerplugin.SpeechRecognizerFragment";
5+
public SpeechRecognizerPlugin_Android(string gameObjectName) : base(gameObjectName) { }
6+
7+
private string javaClassPackageName = "com.example.eric.unityspeechrecognizerplugin.SpeechRecognizerFragment";
68
private AndroidJavaClass javaClass = null;
7-
AndroidJavaObject instance = null;
9+
private AndroidJavaObject instance = null;
810

9-
public SpeechRecognizerPlugin_Android(string gameObjectName) : base(gameObjectName) { }
11+
protected override void SetUp()
12+
{
13+
Debug.Log("SetUpAndroid " + gameObjectName);
14+
javaClass = new AndroidJavaClass(javaClassPackageName);
15+
javaClass.CallStatic("SetUp", gameObjectName);
16+
instance = javaClass.GetStatic<AndroidJavaObject>("instance");
17+
}
1018

1119
public override void StartListening()
1220
{
13-
instance.Call("StartListening");
21+
instance.Call("StartListening", this.isContinuousListening, this.language, this.maxResults);
22+
}
23+
24+
public override void StartListening(bool isContinuous = false, string newLanguage = "en-US", int newMaxResults = 10)
25+
{
26+
instance.Call("StartListening", isContinuous, language, maxResults);
1427
}
1528

29+
public override void StopListening()
30+
{
31+
instance.Call("StopListening");
32+
}
33+
1634
public override void SetContinuousListening(bool isContinuous)
1735
{
36+
this.isContinuousListening = isContinuous;
1837
instance.Call("SetContinuousListening", isContinuous);
1938
}
2039

21-
protected override void SetUp()
40+
public override void SetLanguageForNextRecognition(string newLanguage)
2241
{
23-
Debug.Log("SetUpAndroid " + gameObjectName);
24-
javaClass = new AndroidJavaClass(javaClassPackageName);
25-
javaClass.CallStatic("SetUp", gameObjectName);
26-
instance = javaClass.GetStatic<AndroidJavaObject>("instance");
42+
this.language = newLanguage;
43+
instance.Call("SetLanguage", newLanguage);
2744
}
45+
46+
public override void SetMaxResultsForNextRecognition(int newMaxResults)
47+
{
48+
this.maxResults = newMaxResults;
49+
instance.Call("SetMaxResults", newMaxResults);
50+
}
2851
}

UnitySpeechRecognizer/Assets/Scripts/SpeechRecognizerPlugin_Editor.cs

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,48 @@
22

33
public class SpeechRecognizerPlugin_Editor : SpeechRecognizerPlugin
44
{
5-
private bool isContinuous = false;
6-
75
public SpeechRecognizerPlugin_Editor(string gameObjectName) : base(gameObjectName) { }
86

9-
public override void SetContinuousListening(bool isContinuous)
7+
private bool isContinuous = false;
8+
9+
protected override void SetUp()
1010
{
11-
this.isContinuous = isContinuous;
11+
Debug.LogWarning("<b>WARNING</b>: You are running this plugin on Editor mode. Real recognition only works running on mobile device.");
1212
}
1313

1414
public override void StartListening()
1515
{
1616
SpeechRecognizer speechRecognizer = GameObject.FindObjectOfType<SpeechRecognizer>();
17-
if(this.isContinuous)
17+
if (this.isContinuous)
1818
speechRecognizer.OnResult("continuous listening test~continuous listening test~continuous listening test");
1919
else
2020
speechRecognizer.OnResult("start listening test~start listening test~start listening test");
2121
}
2222

23-
protected override void SetUp()
23+
public override void StartListening(bool setContinuousListening = false, string newLanguage = "en-US", int newMaxResults = 10)
2424
{
25-
Debug.LogWarning("<b>WARNING</b>: You are running this plugin on Editor mode. Real recognition only works running on mobile device.");
25+
StartListening();
26+
}
27+
28+
public override void StopListening()
29+
{
30+
throw new System.NotImplementedException();
31+
}
32+
33+
public override void SetContinuousListening(bool isContinuous)
34+
{
35+
this.isContinuous = isContinuous;
36+
}
37+
38+
public override void SetLanguageForNextRecognition(string newLanguage)
39+
{
40+
Debug.Log("Language set: " + newLanguage);
41+
this.language = newLanguage;
42+
}
43+
44+
public override void SetMaxResultsForNextRecognition(int newMaxResults)
45+
{
46+
Debug.Log("Max results set: " + newMaxResults);
47+
this.maxResults = newMaxResults;
2648
}
2749
}

UnitySpeechRecognizer/Assets/SpeechRecognizer.prefab

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,9 @@ MonoBehaviour:
4444
m_Name:
4545
m_EditorClassIdentifier:
4646
startListeningBtn: {fileID: 0}
47+
stopListeningBtn: {fileID: 0}
4748
continuousListeningTgle: {fileID: 0}
49+
languageDropdown: {fileID: 0}
50+
maxResultsInputField: {fileID: 0}
4851
resultsTxt: {fileID: 0}
52+
errorsTxt: {fileID: 0}

0 commit comments

Comments
 (0)