61 lines
1.0 KiB
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")
|
|
}
|