# 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 ```java import io.github.ggerganov.whispercpp.WhisperCpp; public class Example { public static void main(String[] args) { WhisperCpp whisper = new WhisperCpp(); // 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. long context = whisper.initContext("base.en"); try { var whisperParams = whisper.getFullDefaultParams(WhisperSamplingStrategy.WHISPER_SAMPLING_GREEDY); // custom configuration if required whisperParams.temperature_inc = 0f; var samples = readAudio(); // divide each value by 32767.0f whisper.fullTranscribe(whisperParams, samples); int segmentCount = whisper.getTextSegmentCount(context); for (int i = 0; i < segmentCount; i++) { String text = whisper.getTextSegment(context, i); System.out.println(segment.getText()); } } finally { whisper.freeContext(context); } } } ``` ## Building & Testing In order to build, you need to have the JDK 8 or higher installed. Run the tests with: ```bash git clone https://github.com/ggerganov/whisper.cpp.git cd whisper.cpp/bindings/java ./gradlew build ``` You need to have the `whisper` library in your [JNA library path](https://java-native-access.github.io/jna/4.2.1/com/sun/jna/NativeLibrary.html). On Windows the dll is included in the jar and you can update it: ```bash copy /y ..\..\build\bin\Release\whisper.dll build\generated\resources\main\win32-x86-64\whisper.dll ``` ## License The license for the Go 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.