mirror of
https://github.com/diamondburned/arikawa.git
synced 2024-11-01 04:24:19 +00:00
49 lines
934 B
Go
49 lines
934 B
Go
|
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)
|
||
|
}
|