]> Sergey Matveev's repositories - go-opus.git/commitdiff
float routines for stream reader
authorHraban Luyat <hraban@0brg.net>
Sun, 5 Jul 2015 20:07:29 +0000 (21:07 +0100)
committerHraban Luyat <hraban@0brg.net>
Sun, 5 Jul 2015 20:07:29 +0000 (21:07 +0100)
stream.go

index de8dbaef8360dae6187d3984f77cf134276f4824..07a57435b2d99112471251da673f379d92774930 100644 (file)
--- a/stream.go
+++ b/stream.go
@@ -105,6 +105,27 @@ func (s *Stream) Read(pcm []int16) (int, error) {
        return int(n), nil
 }
 
+func (s *Stream) ReadFloat32(pcm []float32) (int, error) {
+       if s.oggfile == nil {
+               return 0, fmt.Errorf("opus stream is uninitialized or already closed")
+       }
+       if len(pcm) == 0 {
+               return 0, nil
+       }
+       n := C.op_read_float(
+               s.oggfile,
+               (*C.float)(&pcm[0]),
+               C.int(len(pcm)),
+               nil)
+       if n < 0 {
+               return 0, opusfileerr(n)
+       }
+       if n == 0 {
+               return 0, io.EOF
+       }
+       return int(n), nil
+}
+
 func (s *Stream) Close() error {
        if s.oggfile == nil {
                return fmt.Errorf("opus stream is uninitialized or already closed")