1
0
Fork 0
mirror of https://github.com/diamondburned/arikawa.git synced 2024-12-13 17:05:42 +00:00
arikawa/voice/testdata/testdata.go

49 lines
934 B
Go
Raw Normal View History

package testdata
import (
"encoding/binary"
"io"
"os"
"github.com/pkg/errors"
)
const Nico = "testdata/nico.dca"
// WriteOpus reads the given file containing the Opus frames into the give
// io.Writer.
func WriteOpus(w io.Writer, file string) error {
f, err := os.Open(file)
if err != nil {
return errors.Wrap(err, "failed to open "+file)
}
defer f.Close()
var lenbuf [4]byte
for {
_, err := io.ReadFull(f, lenbuf[:])
if err != nil {
if err == io.EOF {
return nil
}
return errors.Wrap(err, "failed to read "+file)
}
// Read the integer
framelen := int64(binary.LittleEndian.Uint32(lenbuf[:]))
// Copy the frame.
_, err = io.CopyN(w, f, framelen)
if err != nil && err != io.EOF {
return errors.Wrap(err, "failed to write")
}
}
}
// WriterFunc wraps f to be an io.Writer.
type WriterFunc func([]byte) (int, error)
func (w WriterFunc) Write(b []byte) (int, error) {
return w(b)
}