Skip to content

Commit 3d44740

Browse files
olami-developersolami-developers
authored andcommitted
modify RecorderSpeechRecognizer, set default speex encoding to C++ lib
1 parent ade7f04 commit 3d44740

3 files changed

Lines changed: 29 additions & 7 deletions

File tree

lib/build.gradle

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ android {
88
minSdkVersion 17
99
targetSdkVersion 25
1010
versionCode 1
11-
versionName "2.5.0"
11+
versionName "2.5.1"
1212

1313
archivesBaseName = "olami-android-client"
1414
version = android.defaultConfig.versionName
15+
1516
externalNativeBuild {
1617
cmake {
1718
cppFlags "-std=c++11 -frtti -fexceptions"
@@ -36,12 +37,12 @@ android {
3637
}
3738
}
3839

40+
sourceSets { main { jni.srcDirs = ['src/main/jni', 'src/main/jni/'] } }
41+
3942
lintOptions {
4043
abortOnError false
4144
}
4245

43-
sourceSets { main { jni.srcDirs = ['src/main/jni', 'src/main/jni/'] } }
44-
4546
libraryVariants.all { variant ->
4647
variant.outputs.each { output ->
4748
def outputFile = output.outputFile

lib/src/main/java/ai/olami/android/KeepRecordingSpeechRecognizer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,10 @@ public class KeepRecordingSpeechRecognizer extends SpeechRecognizerBase {
8282

8383
private VoiceVolume mVoiceVolume = new VoiceVolume();
8484

85-
private RecognizeState mRecognizeState = null;
8685
private Codec mSpeexEncoder = null;
8786

87+
private RecognizeState mRecognizeState = null;
88+
8889
/**
8990
* Recognize process state
9091
*/

lib/src/main/java/ai/olami/android/RecorderSpeechRecognizer.java

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.util.concurrent.BlockingQueue;
3333
import java.util.concurrent.LinkedBlockingQueue;
3434

35+
import ai.olami.android.jni.Codec;
3536
import ai.olami.cloudService.APIConfiguration;
3637
import ai.olami.cloudService.APIResponse;
3738
import ai.olami.cloudService.CookieSet;
@@ -75,8 +76,10 @@ public class RecorderSpeechRecognizer extends SpeechRecognizerBase{
7576

7677
private VoiceVolume mVoiceVolume = new VoiceVolume();
7778

78-
private RecordState mRecordState;
79-
private RecognizeState mRecognizeState;
79+
private Codec mSpeexEncoder = null;
80+
81+
private RecordState mRecordState = null;
82+
private RecognizeState mRecognizeState = null;
8083

8184
/**
8285
* Recording state
@@ -482,7 +485,19 @@ private void doSending() throws Exception {
482485
byte[] audioData = (byte[]) mRecordDataQueue.take();
483486
mIsFinal = (isRecodingStopped() && (mRecordDataQueue.isEmpty()));
484487
length += ((audioData.length / getFrameSize()) * FRAME_LENGTH_MILLISECONDS);
485-
mRecognizer.appendAudioFramesData(audioData);
488+
if (getAudioCompressLibraryType() == AUDIO_COMPRESS_LIBRARY_TYPE_CPP) {
489+
if (mSpeexEncoder == null) {
490+
mSpeexEncoder = new Codec();
491+
mSpeexEncoder.open(1, 10);
492+
}
493+
byte[] encBuffer = new byte[audioData.length];
494+
int encSize = mSpeexEncoder.encodeByte(audioData, 0, audioData.length, encBuffer);
495+
mRecognizer.setAudioType(SpeechRecognizer.AUDIO_TYPE_PCM_SPEEX);
496+
mRecognizer.appendSpeexAudioFramesData(encBuffer, encSize);
497+
} else {
498+
mRecognizer.setAudioType(SpeechRecognizer.AUDIO_TYPE_PCM_RAW);
499+
mRecognizer.appendAudioFramesData(audioData);
500+
}
486501
if ((length >= getUploadAudioLengthMilliseconds()) || mIsFinal) {
487502
APIResponse response = mRecognizer.flushToUploadAudio(mCookie, mIsFinal);
488503
if (response.ok()) {
@@ -514,6 +529,11 @@ private void doSending() throws Exception {
514529
}
515530
}
516531

532+
if (mSpeexEncoder != null) {
533+
mSpeexEncoder.close();
534+
mSpeexEncoder = null;
535+
}
536+
517537
synchronized (mRecordDataQueue) {
518538
mRecordDataQueue.clear();
519539
mRecordDataQueue = null;

0 commit comments

Comments
 (0)