whisper.cpp/bindings/go
Mohit Agarwal 86a277f78d
go : run go mod tidy before building examples + fix permissions (#296)
* run `go mod tidy` before building examples

Running `make examples` after cloning the repository gives the following
error:

```
...
[100%] Built target whisper
gmake[3]: Leaving directory '/tmp/exp/whisper.cpp/bindings/go/build'
gmake[2]: Leaving directory '/tmp/exp/whisper.cpp/bindings/go/build'
gmake[1]: Leaving directory '/tmp/exp/whisper.cpp/bindings/go/build'
Build example go-model-download
Build example go-whisper
examples/go-whisper/process.go:11:2: missing go.sum entry for module providing package github.com/go-audio/wav (imported by github.com/ggerganov/whisper.cpp/bindings/go/examples/go-whisper); to add:
        go get github.com/ggerganov/whisper.cpp/bindings/go/examples/go-whisper
make: *** [Makefile:26: examples/go-whisper] Error 1
```

* remove executable bit from various files
2022-12-22 16:34:20 +02:00
..
examples go : run go mod tidy before building examples + fix permissions (#296) 2022-12-22 16:34:20 +02:00
pkg/whisper go : run go mod tidy before building examples + fix permissions (#296) 2022-12-22 16:34:20 +02:00
samples go : run go mod tidy before building examples + fix permissions (#296) 2022-12-22 16:34:20 +02:00
.gitignore go : run go mod tidy before building examples + fix permissions (#296) 2022-12-22 16:34:20 +02:00
doc.go bindings : initial import of golang bindings (#287) 2022-12-20 08:54:33 +02:00
go.mod go : run go mod tidy before building examples + fix permissions (#296) 2022-12-22 16:34:20 +02:00
LICENSE go : run go mod tidy before building examples + fix permissions (#296) 2022-12-22 16:34:20 +02:00
Makefile go : run go mod tidy before building examples + fix permissions (#296) 2022-12-22 16:34:20 +02:00
params.go bindings : initial import of golang bindings (#287) 2022-12-20 08:54:33 +02:00
README.md go : run go mod tidy before building examples + fix permissions (#296) 2022-12-22 16:34:20 +02:00
whisper_test.go bindings : initial import of golang bindings (#287) 2022-12-20 08:54:33 +02:00
whisper.go bindings : initial import of golang bindings (#287) 2022-12-20 08:54:33 +02:00

Go bindings for Whisper

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

  • Darwin (OS X) 12.6 on x64_64
  • Debian Linux on arm64
  • Fedora Linux on x86_64

The "low level" bindings are in the bindings/go directory and there is a more Go-style package in the bindings/go/pkg/whisper directory. The most simple usage is as follows:

import (
	"github.com/ggerganov/whisper.cpp/bindings/go/pkg/whisper"
)

func main() {
	var modelpath string // Path to the model
	var samples []float32 // Samples to process

	// Load the model
	model, err := whisper.New(modelpath)
	if err != nil {
		panic(err)
	}
	defer model.Close()

	// Process samples
	context, err := model.NewContext()
	if err != nil {
		panic(err)
	}
	if err := context.Process(samples, nil); err != nil {
		return err
	}

	// Print out the results
	for {
		segment, err := context.NextSegment()
		if err != nil {
			break
		}
		fmt.Printf("[%6s->%6s] %s\n", segment.Start, segment.End, segment.Text)
	}
}

Building & Testing

In order to build, you need to have the Go compiler installed. You can get it from here. Run the tests with:

git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp/bindings/go
make test

This will compile a static libwhisper.a in a build folder, download a model file, then run the tests. To build the examples:

make examples

The examples are placed in the build directory. Once built, you can download all the models with the following command:

./build/go-model-download -out models

And you can then test a model against samples with the following command:

./build/go-whisper -model models/ggml-tiny.en.bin samples/jfk.wav