rust-whisper/whisper-cpp-2023/main.go

61 lines
1.0 KiB
Go

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")
}