From 12f824a9a7ec5e58aefeff7209c5a9d9eaed2e8a Mon Sep 17 00:00:00 2001 From: bel Date: Thu, 30 Mar 2023 20:57:10 -0600 Subject: [PATCH] go bindings test --- whisper-cpp-2023/go.mod | 13 ++++++++ whisper-cpp-2023/go.sh | 5 +++ whisper-cpp-2023/go.sum | 12 +++++++ whisper-cpp-2023/libwhisper.a | 1 + whisper-cpp-2023/main.go | 60 +++++++++++++++++++++++++++++++++++ whisper-cpp-2023/whisper.h | 1 + 6 files changed, 92 insertions(+) create mode 100644 whisper-cpp-2023/go.mod create mode 100644 whisper-cpp-2023/go.sh create mode 100644 whisper-cpp-2023/go.sum create mode 120000 whisper-cpp-2023/libwhisper.a create mode 100644 whisper-cpp-2023/main.go create mode 120000 whisper-cpp-2023/whisper.h diff --git a/whisper-cpp-2023/go.mod b/whisper-cpp-2023/go.mod new file mode 100644 index 0000000..d8d111a --- /dev/null +++ b/whisper-cpp-2023/go.mod @@ -0,0 +1,13 @@ +module gogs.inhome.blapointe.com/stt.d/whisper-cpp-2023 + +go 1.19 + +require ( + github.com/ggerganov/whisper.cpp/bindings/go v0.0.0-20230330172929-0a2d1210bcb9 + github.com/go-audio/wav v1.1.0 +) + +require ( + github.com/go-audio/audio v1.0.0 // indirect + github.com/go-audio/riff v1.0.0 // indirect +) diff --git a/whisper-cpp-2023/go.sh b/whisper-cpp-2023/go.sh new file mode 100644 index 0000000..d3494f1 --- /dev/null +++ b/whisper-cpp-2023/go.sh @@ -0,0 +1,5 @@ +#! /bin/bash + +C_INCLUDE_PATH="$C_INCLUDE_PATH:$PWD" \ +LIBRARY_PATH="$LIBRARY_PATH:$PWD" \ +go "$@" diff --git a/whisper-cpp-2023/go.sum b/whisper-cpp-2023/go.sum new file mode 100644 index 0000000..cc99995 --- /dev/null +++ b/whisper-cpp-2023/go.sum @@ -0,0 +1,12 @@ +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/ggerganov/whisper.cpp/bindings/go v0.0.0-20230330172929-0a2d1210bcb9 h1:xzxmeGO16wpaBfXYxxCVpnOrdpUr7/E+VjHbrp5YVN8= +github.com/ggerganov/whisper.cpp/bindings/go v0.0.0-20230330172929-0a2d1210bcb9/go.mod h1:QIjZ9OktHFG7p+/m3sMvrAJKKdWrr1fZIK0rM6HZlyo= +github.com/go-audio/audio v1.0.0 h1:zS9vebldgbQqktK4H0lUqWrG8P0NxCJVqcj7ZpNnwd4= +github.com/go-audio/audio v1.0.0/go.mod h1:6uAu0+H2lHkwdGsAY+j2wHPNPpPoeg5AaEFh9FlA+Zs= +github.com/go-audio/riff v1.0.0 h1:d8iCGbDvox9BfLagY94fBynxSPHO80LmZCaOsmKxokA= +github.com/go-audio/riff v1.0.0/go.mod h1:l3cQwc85y79NQFCRB7TiPoNiaijp6q8Z0Uv38rVG498= +github.com/go-audio/wav v1.1.0 h1:jQgLtbqBzY7G+BM8fXF7AHUk1uHUviWS4X39d5rsL2g= +github.com/go-audio/wav v1.1.0/go.mod h1:mpe9qfwbScEbkd8uybLuIpTgHyrISw/OTuvjUW2iGtE= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/whisper-cpp-2023/libwhisper.a b/whisper-cpp-2023/libwhisper.a new file mode 120000 index 0000000..54df9c0 --- /dev/null +++ b/whisper-cpp-2023/libwhisper.a @@ -0,0 +1 @@ +git.d/libwhisper.a \ No newline at end of file diff --git a/whisper-cpp-2023/main.go b/whisper-cpp-2023/main.go new file mode 100644 index 0000000..97d803f --- /dev/null +++ b/whisper-cpp-2023/main.go @@ -0,0 +1,60 @@ +package main + +import ( + "fmt" + "io" + "os" + + "github.com/ggerganov/whisper.cpp/bindings/go/pkg/whisper" + "github.com/go-audio/wav" +) + +func main() { + p := os.Args[1] + f, err := os.Open(p) + if err != nil { + panic(err) + } + defer f.Close() + + var data []float32 + dec := wav.NewDecoder(f) + if buf, err := dec.FullPCMBuffer(); err != nil { + panic(err) + } else if dec.SampleRate != whisper.SampleRate { + panic(dec.SampleRate) + } else if dec.NumChans != 1 { + panic(dec.NumChans) + } else { + data = buf.AsFloat32Buffer().Data + } + + model, err := whisper.New("./models/ggml-small.en.bin") + if err != nil { + panic(err) + } + context, err := model.NewContext() + if err != nil { + panic(err) + } + context.SetThreads(4) + + context.ResetTimings() + if err := context.Process(data, func(segment whisper.Segment) { + //log.Printf("%+v", segment) + }); err != nil { + panic(err) + } + context.PrintTimings() + + for { + segment, err := context.NextSegment() + if err == io.EOF { + break + } else if err != nil { + panic(err) + } + fmt.Printf("%s ", segment.Text) + } + fmt.Printf("\n") +} diff --git a/whisper-cpp-2023/whisper.h b/whisper-cpp-2023/whisper.h new file mode 120000 index 0000000..cfd2764 --- /dev/null +++ b/whisper-cpp-2023/whisper.h @@ -0,0 +1 @@ +git.d/whisper.h \ No newline at end of file