diff --git a/app/src/main/java/com/litongjava/whisper/cpp/android/java/demo/MainActivity.java b/app/src/main/java/com/litongjava/whisper/cpp/android/java/demo/MainActivity.java index d65faa0..3aa1faf 100644 --- a/app/src/main/java/com/litongjava/whisper/cpp/android/java/demo/MainActivity.java +++ b/app/src/main/java/com/litongjava/whisper/cpp/android/java/demo/MainActivity.java @@ -9,18 +9,21 @@ import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; +import com.blankj.utilcode.util.ThreadUtils; import com.litongjava.android.view.inject.annotation.FindViewById; import com.litongjava.android.view.inject.annotation.FindViewByIdLayout; import com.litongjava.android.view.inject.annotation.OnClick; import com.litongjava.android.view.inject.utils.ViewInjectUtils; import com.litongjava.jfinal.aop.Aop; +import com.litongjava.jfinal.aop.AopManager; +import com.litongjava.whisper.cpp.android.java.services.OutputTextViewService; import com.litongjava.whisper.cpp.android.java.services.WhisperService; +import com.litongjava.whisper.cpp.android.java.task.TranscriptionTask; import com.whispercppdemo.whisper.WhisperLib; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - @FindViewByIdLayout(R.layout.activity_main) public class MainActivity extends AppCompatActivity { @@ -28,7 +31,8 @@ public class MainActivity extends AppCompatActivity { private TextView tv; Logger log = LoggerFactory.getLogger(this.getClass()); - private WhisperService whisperService = Aop.get(WhisperService.class); + OutputTextViewService outputTextViewService; + private WhisperService whisperService; @RequiresApi(api = Build.VERSION_CODES.O) @Override @@ -36,6 +40,10 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.activity_main); ViewInjectUtils.injectActivity(this, this); + outputTextViewService = new OutputTextViewService(this.tv); + //add to aop container + AopManager.me().addSingletonObject(outputTextViewService); + whisperService= Aop.get(WhisperService.class); showSystemInfo(); } @@ -43,13 +51,21 @@ protected void onCreate(Bundle savedInstanceState) { @OnClick(R.id.loadModelBtn) public void loadModelBtn_OnClick(View v) { Context context = getBaseContext(); - whisperService.loadModel(context, tv); + whisperService.loadModel(); } @OnClick(R.id.transcriptSampleBtn) public void transcriptSampleBtn_OnClick(View v) { Context context = getBaseContext(); - whisperService.transcribeSample(context, tv); + String sampleFilePath = "samples/jfk.wav"; + ThreadUtils.executeByIo(new TranscriptionTask(context, tv, sampleFilePath)); + } + + @OnClick(R.id.transcriptLongSampleBtn) + public void transcriptLongSampleBtn_OnClick(View v) { + Context context = getBaseContext(); + String sampleFilePath = "samples/A1_APartyInvitation__lesson_1368784253.wav"; + ThreadUtils.executeByIo(new TranscriptionTask(context, tv, sampleFilePath)); } @@ -62,12 +78,12 @@ public void systemInfoBtn_OnClick(View v) { @RequiresApi(api = Build.VERSION_CODES.O) public void showSystemInfo() { String systemInfo = WhisperLib.getSystemInfo(); - tv.append(systemInfo + "\n"); + Aop.get(OutputTextViewService.class).println(systemInfo); } @OnClick(R.id.clearBtn) public void clearBtn_OnClick(View v) { - tv.setText(""); + Aop.get(OutputTextViewService.class).clear(); } @RequiresApi(api = Build.VERSION_CODES.O) diff --git a/app/src/main/java/com/litongjava/whisper/cpp/android/java/services/OutputTextViewService.java b/app/src/main/java/com/litongjava/whisper/cpp/android/java/services/OutputTextViewService.java new file mode 100644 index 0000000..3fe2782 --- /dev/null +++ b/app/src/main/java/com/litongjava/whisper/cpp/android/java/services/OutputTextViewService.java @@ -0,0 +1,19 @@ +package com.litongjava.whisper.cpp.android.java.services; + +import android.widget.TextView; + +public class OutputTextViewService { + private TextView tv; + + public OutputTextViewService(TextView tv) { + this.tv = tv; + } + + public void println(String text) { + tv.append(text + "\n"); + } + + public void clear(){ + tv.setText(""); + } +} diff --git a/app/src/main/java/com/litongjava/whisper/cpp/android/java/services/WhisperService.java b/app/src/main/java/com/litongjava/whisper/cpp/android/java/services/WhisperService.java index 0f06f49..96e43d3 100644 --- a/app/src/main/java/com/litongjava/whisper/cpp/android/java/services/WhisperService.java +++ b/app/src/main/java/com/litongjava/whisper/cpp/android/java/services/WhisperService.java @@ -6,6 +6,7 @@ import androidx.annotation.RequiresApi; +import com.litongjava.jfinal.aop.Aop; import com.litongjava.whisper.cpp.android.java.bean.WhisperSegment; import com.litongjava.whisper.cpp.android.java.media.WaveEncoder; import com.litongjava.whisper.cpp.android.java.single.LocalWhisper; @@ -22,34 +23,34 @@ public class WhisperService { private Logger log = LoggerFactory.getLogger(this.getClass()); - private final Object lock = new Object(); @RequiresApi(api = Build.VERSION_CODES.O) - public void loadModel(Context context, TextView tv) { + public void loadModel() { + String modelFilePath = LocalWhisper.modelFilePath; - String msg = "load model from :" + modelFilePath + "\n"; - outputMsg(tv, msg); + String msg = "load model from :" + modelFilePath ; + outputMsg(msg); long start = System.currentTimeMillis(); LocalWhisper.INSTANCE.init(); long end = System.currentTimeMillis(); msg = "model load successful:" + (end - start) + "ms"; - outputMsg(tv, msg); + outputMsg(msg); } - public void transcribeSample(Context context, TextView tv) { + public void transcribeSample(Context context, TextView tv, String sampleFilePath) { String msg = ""; long start = System.currentTimeMillis(); - String sampleFilePath = "samples/jfk.wav"; + File filesDir = context.getFilesDir(); File sampleFile = AssetUtils.copyFileIfNotExists(context, filesDir, sampleFilePath); long end = System.currentTimeMillis(); msg = "copy file:" + (end - start) + "ms"; - outputMsg(tv, msg); + outputMsg(msg); msg = "transcribe file from :" + sampleFile.getAbsolutePath(); - outputMsg(tv, msg); + outputMsg(msg); start = System.currentTimeMillis(); float[] audioData = new float[0]; // 读取音频样本 @@ -61,7 +62,7 @@ public void transcribeSample(Context context, TextView tv) { } end = System.currentTimeMillis(); msg = "decode wave file:" + (end - start) + "ms"; - outputMsg(tv, msg); + outputMsg(msg); start = System.currentTimeMillis(); List transcription = null; @@ -76,14 +77,14 @@ public void transcribeSample(Context context, TextView tv) { } end = System.currentTimeMillis(); msg = "Transcript successful:" + (end - start) + "ms"; - outputMsg(tv, msg); + outputMsg(msg); msg = "Transcription:" + transcription.toString(); - outputMsg(tv, msg); + outputMsg(msg); } - private void outputMsg(TextView tv, String msg) { - tv.append(msg + "\n"); + private void outputMsg(String msg) { + Aop.get(OutputTextViewService.class).println(msg); log.info(msg); } diff --git a/app/src/main/java/com/litongjava/whisper/cpp/android/java/task/SimpleTaskAdapter.java b/app/src/main/java/com/litongjava/whisper/cpp/android/java/task/SimpleTaskAdapter.java new file mode 100644 index 0000000..2ba4455 --- /dev/null +++ b/app/src/main/java/com/litongjava/whisper/cpp/android/java/task/SimpleTaskAdapter.java @@ -0,0 +1,17 @@ +package com.litongjava.whisper.cpp.android.java.task; + +import com.blankj.utilcode.util.ThreadUtils; + +public abstract class SimpleTaskAdapter extends ThreadUtils.Task { + @Override + public void onSuccess(T result) { + } + + @Override + public void onCancel() { + } + + @Override + public void onFail(Throwable t) { + } +} diff --git a/app/src/main/java/com/litongjava/whisper/cpp/android/java/task/TranscriptionTask.java b/app/src/main/java/com/litongjava/whisper/cpp/android/java/task/TranscriptionTask.java new file mode 100644 index 0000000..f4dfe02 --- /dev/null +++ b/app/src/main/java/com/litongjava/whisper/cpp/android/java/task/TranscriptionTask.java @@ -0,0 +1,39 @@ +package com.litongjava.whisper.cpp.android.java.task; + +import android.content.Context; +import android.widget.TextView; + +import com.blankj.utilcode.util.ThreadUtils; +import com.litongjava.jfinal.aop.Aop; +import com.litongjava.whisper.cpp.android.java.services.WhisperService; + +public class TranscriptionTask extends ThreadUtils.Task { + private final Context context; + private final TextView tv; + private final String sampleFilePath; + + public TranscriptionTask(Context context, TextView tv,String sampleFilePath) { + this.context = context; + this.tv = tv; + this.sampleFilePath = sampleFilePath; + + } + + @Override + public Object doInBackground() { + Aop.get(WhisperService.class).transcribeSample(context, tv, sampleFilePath); + return null; + } + + @Override + public void onSuccess(Object result) { + } + + @Override + public void onCancel() { + } + + @Override + public void onFail(Throwable t) { + } +} \ No newline at end of file diff --git a/app/src/main/jniLibs/arm64-v8a/libwhisper.so b/app/src/main/jniLibs/arm64-v8a/libwhisper.so index d0da8d4..9c2d5ad 100644 Binary files a/app/src/main/jniLibs/arm64-v8a/libwhisper.so and b/app/src/main/jniLibs/arm64-v8a/libwhisper.so differ diff --git a/app/src/main/jniLibs/arm64-v8a/libwhisper_v8fp16_va.so b/app/src/main/jniLibs/arm64-v8a/libwhisper_v8fp16_va.so index 2a43994..13d0bb7 100644 Binary files a/app/src/main/jniLibs/arm64-v8a/libwhisper_v8fp16_va.so and b/app/src/main/jniLibs/arm64-v8a/libwhisper_v8fp16_va.so differ diff --git a/app/src/main/jniLibs/armeabi-v7a/libwhisper.so b/app/src/main/jniLibs/armeabi-v7a/libwhisper.so deleted file mode 100644 index 97c5724..0000000 Binary files a/app/src/main/jniLibs/armeabi-v7a/libwhisper.so and /dev/null differ diff --git a/app/src/main/jniLibs/armeabi-v7a/libwhisper_vfpv4.so b/app/src/main/jniLibs/armeabi-v7a/libwhisper_vfpv4.so deleted file mode 100644 index d44bbfe..0000000 Binary files a/app/src/main/jniLibs/armeabi-v7a/libwhisper_vfpv4.so and /dev/null differ diff --git a/app/src/main/jniLibs/x86/libwhisper.so b/app/src/main/jniLibs/x86/libwhisper.so deleted file mode 100644 index 1a52935..0000000 Binary files a/app/src/main/jniLibs/x86/libwhisper.so and /dev/null differ diff --git a/app/src/main/jniLibs/x86_64/libwhisper.so b/app/src/main/jniLibs/x86_64/libwhisper.so deleted file mode 100644 index 73c5015..0000000 Binary files a/app/src/main/jniLibs/x86_64/libwhisper.so and /dev/null differ diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index d86c8f2..a435f5c 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -42,6 +42,16 @@ android:text="Clear" /> + +