Skip to content

Commit 43f6f9a

Browse files
committed
Initial implementation of Silero VAD
1 parent e40ec8c commit 43f6f9a

5 files changed

Lines changed: 34 additions & 8 deletions

File tree

app/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ dependencies {
135135
implementation "org.bouncycastle:bcprov-jdk15to18:1.83"
136136
//lingua
137137
implementation "com.github.pemistahl:lingua:1.2.2"
138-
138+
// VAD
139+
implementation 'com.github.gkonovalov.android-vad:silero:2.0.10'
139140
//implementation 'androidx.core:core-ktx:1.10.0'
140141
implementation 'androidx.work:work-runtime:2.7.1'
141142
implementation 'androidx.exifinterface:exifinterface:1.3.7'

app/src/main/java/nie/translator/rtranslator/Global.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@
3636

3737
import com.downloader.PRDownloader;
3838
import com.downloader.PRDownloaderConfig;
39+
import com.konovalov.vad.silero.Vad;
40+
import com.konovalov.vad.silero.VadSilero;
41+
import com.konovalov.vad.silero.config.FrameSize;
42+
import com.konovalov.vad.silero.config.Mode;
43+
import com.konovalov.vad.silero.config.SampleRate;
3944

4045
import java.io.File;
4146
import java.util.ArrayList;
@@ -57,6 +62,7 @@
5762

5863
public class Global extends Application implements DefaultLifecycleObserver {
5964
public static final boolean ONLY_TEXT_TRANSLATION_MODE = false;
65+
6066
public enum RTranslatorMode {
6167
TEXT_TRANSLATION_MODE,
6268
WALKIE_TALKIE_MODE,
@@ -88,6 +94,7 @@ public enum RTranslatorMode {
8894
private final Object lock = new Object();
8995
private boolean useTatoeba;
9096
private boolean useTranslationDictionaries;
97+
private VadSilero vad;
9198

9299
@Override
93100
public void onCreate() {
@@ -118,6 +125,14 @@ public void initializeTranslator(Translator.GeneralListener initListener){
118125

119126
public void initializeSpeechRecognizer(NeuralNetworkApi.InitListener initListener){
120127
if(speechRecognizer == null) {
128+
vad = Vad.builder()
129+
.setContext(this)
130+
.setSampleRate(SampleRate.SAMPLE_RATE_16K)
131+
.setFrameSize(FrameSize.FRAME_SIZE_512)
132+
.setMode(Mode.NORMAL)
133+
.setSilenceDurationMs(300)
134+
.setSpeechDurationMs(50)
135+
.build();
121136
speechRecognizer = new Recognizer(this, true, initListener);
122137
}else{
123138
initListener.onInitializationFinished();
@@ -130,6 +145,10 @@ public void initializeBluetoothCommunicator(){
130145
}
131146
}
132147

148+
public VadSilero getVad() {
149+
return vad;
150+
}
151+
133152
public void restartTranslator(Translator.GeneralListener listener){
134153
getLanguages(false);
135154
SharedPreferences sharedPreferences = getSharedPreferences("default", Context.MODE_PRIVATE);

app/src/main/java/nie/translator/rtranslator/voice_translation/_conversation_mode/_conversation/ConversationService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,7 @@ private void sendMessage(ConversationMessage conversationMessage) {
256256
public void initializeVoiceRecorder() {
257257
if (Tools.hasPermissions(this, REQUIRED_PERMISSIONS)) {
258258
//voice recorder initialization
259-
super.mVoiceRecorder = new Recorder((Global) getApplication(), true, mVoiceCallback, new BluetoothHeadsetCallback());
259+
super.mVoiceRecorder = new Recorder((Global) getApplication(), true, mVoiceCallback, new BluetoothHeadsetCallback(), global.getVad());
260260
}
261261
}
262262

app/src/main/java/nie/translator/rtranslator/voice_translation/_walkie_talkie_mode/_walkie_talkie/WalkieTalkieService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,8 @@ public void onFailure(int[] reasons, long value) {
380380
public void initializeVoiceRecorder(){
381381
if (Tools.hasPermissions(this, REQUIRED_PERMISSIONS)) {
382382
//voice recorder initialization
383-
super.mVoiceRecorder = new Recorder((Global) getApplication(), false, mVoiceCallback, null);
383+
Global global = (Global) getApplication();
384+
super.mVoiceRecorder = new Recorder(global, false, mVoiceCallback, null, global.getVad());
384385
}
385386
}
386387

app/src/main/java/nie/translator/rtranslator/voice_translation/neural_networks/translation/LanguageDetector.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,8 @@ public void run() {
6363
return;
6464
}
6565
String normalizedText = TextTools.normalizeTextForLid(text);
66-
if (TextTools.countWords(normalizedText) < MIN_WORDS) {
66+
int wordsCount = TextTools.countWords(normalizedText);
67+
if (wordsCount < MIN_WORDS) {
6768
if(TextTools.countWords(normalizedText) == 1){
6869
//we use specialWordsLanguages mapping
6970
String langCode = identifySpecialWordLanguage(normalizedText);
@@ -91,10 +92,14 @@ public void run() {
9192
}
9293
}
9394
//we use FastText for detection
94-
long time = System.currentTimeMillis();
95-
String langCode = predictLanguage(nativePtr, text, confidenceThreshold);
96-
android.util.Log.i("lid_performance", "FastText language identification done in: " + (System.currentTimeMillis()-time) + "ms");
97-
listener.onSuccess(langCode);
95+
if(wordsCount <= 1) {
96+
long time = System.currentTimeMillis();
97+
String langCode = predictLanguage(nativePtr, text, confidenceThreshold);
98+
android.util.Log.i("lid_performance", "FastText language identification done in: " + (System.currentTimeMillis() - time) + "ms");
99+
listener.onSuccess(langCode);
100+
return;
101+
}
102+
listener.onSuccess("und");
98103

99104
} catch (Exception e) {
100105
e.printStackTrace();

0 commit comments

Comments
 (0)