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