opus-go/examples/decode/main.go
Sean DuBois 733188ab17 Implement bitdepth conversion and upsampling
bitdepth package takes F32LE -> S16LE and handles upsampling
from 16Khz -> 48Khz
2022-09-30 21:56:49 -06:00

58 lines
820 B
Go

package main
import (
"bytes"
"errors"
"io"
"os"
"github.com/pion/opus"
"github.com/pion/opus/pkg/oggreader"
)
func main() {
if len(os.Args) != 3 {
panic("Usage: <in-file> <out-file>")
}
file, err := os.Open(os.Args[1])
if err != nil {
panic(err)
}
ogg, _, err := oggreader.NewWith(file)
if err != nil {
panic(err)
}
out := make([]byte, 1920)
f, err := os.Create(os.Args[2])
if err != nil {
panic(err)
}
decoder := opus.NewDecoder()
x := 0
for {
segments, _, err := ogg.ParseNextPage()
if errors.Is(err, io.EOF) {
break
} else if bytes.HasPrefix(segments[0], []byte("OpusTags")) {
continue
}
if err != nil {
panic(err)
}
for i := range segments {
if _, _, err = decoder.Decode(segments[i], out); err != nil {
panic(err)
}
f.Write(out)
}
}
}