[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/litongjava/whisper.cpp.android.java.demo/main/readme.md [Back]  [Original]

# whisper.cpp.android.java.demo
[](readme_cn.md)|[English](readme.md)
A sample Android app using java code and [whisper.cpp library](https://github.com/ggerganov/whisper.cpp/) to do voice-to-text transcriptions.
## 1.Android integration with whisper.cpp library using Java code
### 1.1.directory structure
```
 app
    .gitignore
    build.gradle
    libs
    proguard-rules.pro
    src
       androidTest
          java
             com
                litongjava
                   whispercppandroidjavademo
                      ExampleInstrumentedTest.java
       main
          AndroidManifest.xml
          assets
             logback.xml
             models
                ggml-tiny.bin
             samples
                .gitignore
                README.md
                jfk.wav
          java
             com
                litongjava
                   whisper
                      cpp
                         android
                            java
                               bean
                                  WhisperSegment.java
                               demo
                                  MainActivity.java
                                  app
                                     App.java
                                  ui
                               media
                                  WaveEncoder.java
                               recoder
                                  Recorder.java
                               services
                                  WhisperService.java
                               single
                                  LocalWhisper.java
                               utils
                                  AssetUtils.java
                whispercppdemo
                   whisper
                      CpuInfo.java
                      WhisperContext.java
                      WhisperCpuConfig.java
                      WhisperLib.java
                      WhisperUtils.java
          jniLibs
             arm64-v8a
                libwhisper.so
                libwhisper_v8fp16_va.so
             armeabi-v7a
                libwhisper.so
                libwhisper_vfpv4.so
             jniLibs.zip
             x86
                libwhisper.so
             x86_64
                libwhisper.so
          res
             drawable
                ic_launcher_background.xml
             drawable-v24
                ic_launcher_foreground.xml
             layout
                activity_main.xml
             mipmap-anydpi-v26
                ic_launcher.xml
                ic_launcher_round.xml
             mipmap-hdpi
                ic_launcher.png
                ic_launcher_round.png
             mipmap-mdpi
                ic_launcher.png
                ic_launcher_round.png
             mipmap-xhdpi
                ic_launcher.png
                ic_launcher_round.png
             mipmap-xxhdpi
                ic_launcher.png
                ic_launcher_round.png
             mipmap-xxxhdpi
                ic_launcher.png
                ic_launcher_round.png
             values
                colors.xml
                strings.xml
                themes.xml
             values-night
                themes.xml
       test
          java
             com
                litongjava
                   whispercppandroidjavademo
                      ExampleUnitTest.java
 build
    intermediates
       lint-cache
          maven.google
             androidx
                appcompat
                   group-index.xml
                constraintlayout
                   group-index.xml
                legacy
                   group-index.xml
                test
                   espresso
                      group-index.xml
                   ext
                      group-index.xml
             com
                google
                   android
                      material
                         group-index.xml
             master-index.xml
          sdk-registry.xml
             sdk-registry.xml
 build.gradle
 gradle
    wrapper
       gradle-wrapper.jar
       gradle-wrapper.properties
 gradle.properties
 gradlew
 gradlew.bat
 local.properties
 readme.md
 readme_cn.md
 settings.gradle
```
## 1.2.Prepare the file
### 1.2.1.download AndroidWhisperCppLibrary

https://github.com/litongjava/whisper.cpp.android.java.demo/releases/tag/v1.0.0

1. `cmake\obj\arm64-v8a\libwhisper_v8fp16_va.so`: This is the bare, unoptimized or stripped .so file. It may contain debugging information and unused code snippets.

2. `AndroidWhisperCppLibrary-merged_native_libs.zip: This is the merged .so file, which may merge multiple native libraries, but may still contain debugging information.

3. `AndroidWhisperCppLibrary-stripped_native_libs.zip`: This file has been "stripped", meaning that it no longer contains debugging information, and is therefore smaller in size. Stripped .so files are often used to reduce the size of the APK when distributing an application.

For **debugging** purposes, you can use the first or second file. However, if you intend to **release** or use it in **other Android projects**, it is recommended that you choose the third stripped file as it will be smaller in size and will not contain unnecessary debugging information.

So, for use in other Android projects, choose the `AndroidWhisperCppLibrary-stripped_native_libs.zip` file. If you need to debug in other projects, then consider using the unstripped version.


### 1.2.2.View Java methods in so files
```
# nm libwhisper_v8fp16_va.so |grep Java
                 U AAssetManager_fromJava
0000000000156700 T Java_com_whispercppdemo_whisper_WhisperLib_benchGgmlMulMat
00000000001566b0 T Java_com_whispercppdemo_whisper_WhisperLib_benchMemcpy
0000000000156390 T Java_com_whispercppdemo_whisper_WhisperLib_freeContext
00000000001563c4 T Java_com_whispercppdemo_whisper_WhisperLib_fullTranscribe
0000000000156668 T Java_com_whispercppdemo_whisper_WhisperLib_getSystemInfo
0000000000156608 T Java_com_whispercppdemo_whisper_WhisperLib_getTextSegment
00000000001565d4 T Java_com_whispercppdemo_whisper_WhisperLib_getTextSegmentCount
0000000000156314 T Java_com_whispercppdemo_whisper_WhisperLib_initContext
000000000015617c T Java_com_whispercppdemo_whisper_WhisperLib_initContextFromAsset
0000000000156024 T Java_com_whispercppdemo_whisper_WhisperLib_initContextFromInputStream
```
### 1.2.3.model
https://github.com/litongjava/whisper.cpp.android.java.demo/releases/download/v1.0.0/ggml-tiny.bin

## 1.3.integration project
### 1.3.1.Adding libraries and models
To use:  
1. Download AndroidWhisperCppLibrary-stripped_native_libs.zip unzip it to app\src\main\jniLibs
2. From [whisper.cpp library](https://github.com/ggerganov/whisper.cpp/tree/master/models). [^1] Select a model.
3. Copy the model to the "app/src/main/assets/models" folder.
4. Select a sample audio file (e.g. [jfk.wav] (https://github.com/ggerganov/whisper.cpp/raw/master/samples/jfk.wav)).
5. Copy the sample to the "app/src/main/assets/samples" folder.
6. Modify the modelFilePath in WhisperService.java.
7. Modify the sampleFilePath in WhisperService.java 7.
8. Select the "release" active build variant, then run and deploy to the device using Android Studio.
[^1]: I recommend running `ggml-tiny.bin` on Android devices.

### 1.3.2.sourceSets
Modify app/build.gradle to add jniLibs to sourceSets
```
  sourceSets {
    main {
      jniLibs.srcDirs = ['src/main/jniLibs']
    }
  }
```
### 1.3.3.Adding Dependencies
```
//litongjava
implementation 'com.litongjava:android-view-inject:1.0'
implementation 'com.litongjava:jfinal-aop:1.0.1'
implementation 'com.litongjava:litongjava-android-utils:1.0.0'
```

Web Proxy Viewer  |  New URL  |  Original Page