whisper.cpp/bindings/java
Daniel Bevenius 2a56869669
bindings-java : disable flash attention by default (#3445)
This commit disables flash-attention for the Java binding test so that
the testFullTranscribe test passes.

Without this change the test was failing because the expected output
mismatches after the flash-attention change:
```console
<And so my fellow Americans ask not what your country can do for you ask what you can do for your country.>
but was:
<and so my fellow Americans ask not what your country can do for you ask what you can do for your country>
```

An alternative would also be to update the expected output but it felt
better to keep the same expected output and disable flash-attention and
not just change the expected output to match the new behavior.
2025-10-01 09:13:34 +02:00
..
.idea bindings : add java bindings (#931) 2023-05-20 18:25:02 +03:00
gradle/wrapper bindings : add java bindings (#931) 2023-05-20 18:25:02 +03:00
src bindings-java : disable flash attention by default (#3445) 2025-10-01 09:13:34 +02:00
build.gradle ci : enable bindings java job (#3070) 2025-04-25 14:56:06 +02:00
gradle.properties bindings : add java bindings (#931) 2023-05-20 18:25:02 +03:00
gradlew bindings.java : enable copyLibs task [no ci] (#2949) 2025-03-26 15:01:28 +01:00
gradlew.bat bindings : add java bindings (#931) 2023-05-20 18:25:02 +03:00
README.md bindings.java : update java example (#3281) 2025-06-25 06:35:38 +02:00
settings.gradle bindings : add java bindings (#931) 2023-05-20 18:25:02 +03:00

Java JNI bindings for Whisper

This package provides Java JNI bindings for whisper.cpp. They have been tested on:

  • Darwin (OS X) 12.6 on x64_64
  • Ubuntu on x86_64
  • Windows on x86_64

The "low level" bindings are in WhisperCppJnaLibrary. The most simple usage is as follows:

JNA will attempt to load the whispercpp shared library from:

  • jna.library.path
  • jna.platform.library
  • ~/Library/Frameworks
  • /Library/Frameworks
  • /System/Library/Frameworks
  • classpath
import io.github.ggerganov.whispercpp.WhisperCpp;

public class Example {

    public static void main(String[] args) {
        
        WhisperCpp whisper = new WhisperCpp();
        try {
            // By default, models are loaded from ~/.cache/whisper/ and are usually named "ggml-${name}.bin"
            // or you can provide the absolute path to the model file.
            whisper.initContext("../ggml-base.en.bin"); 
            WhisperFullParams.ByValue whisperParams = whisper.getFullDefaultParams(WhisperSamplingStrategy.WHISPER_SAMPLING_BEAM_SEARCH); 
            
            // custom configuration if required      
            //whisperParams.n_threads = 8;
            whisperParams.temperature = 0.0f;
            whisperParams.temperature_inc = 0.2f;
            //whisperParams.language = "en";
                            
            float[] samples = readAudio(); // divide each value by 32767.0f
            List<WhisperSegment> whisperSegmentList = whisper.fullTranscribeWithTime(whisperParams, samples);
            
            for (WhisperSegment whisperSegment : whisperSegmentList) {

                long start = whisperSegment.getStart();
                long end = whisperSegment.getEnd();

                String text = whisperSegment.getSentence();
                    
                System.out.println("start: "+start);
                System.out.println("end: "+end);
                System.out.println("text: "+text);
                
            }
    
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            whisper.close();
        }
        
     }
}

Building & Testing

In order to build, you need to have the JDK 8 or higher installed. Run the tests with:

git clone https://github.com/ggml-org/whisper.cpp.git
cd whisper.cpp/bindings/java

./gradlew build

You need to have the whisper library in your JNA library path. On Windows the dll is included in the jar and you can update it:

copy /y ..\..\build\bin\Release\whisper.dll build\generated\resources\main\win32-x86-64\whisper.dll

License

The license for the Java bindings is the same as the license for the rest of the whisper.cpp project, which is the MIT License. See the LICENSE file for more details.