From a2e2148b78daf2618a121d51fc8df8a005e21627 Mon Sep 17 00:00:00 2001 From: WeebDataHoarder <57538841+WeebDataHoarder@users.noreply.github.com> Date: Tue, 4 Oct 2022 10:43:29 +0200 Subject: [PATCH] Support decoding into Float --- decoder.go | 29 +++++++++++++++++++++++------ examples/decode/main.go | 1 - 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/decoder.go b/decoder.go index 882452b..ca254ae 100644 --- a/decoder.go +++ b/decoder.go @@ -21,8 +21,7 @@ func NewDecoder() Decoder { } } -// Decode decodes the Opus bitstream into PCM -func (d *Decoder) Decode(in []byte, out []byte) (bandwidth Bandwidth, isStereo bool, err error) { +func (d *Decoder) decode(in []byte) (bandwidth Bandwidth, isStereo bool, err error) { if len(in) < 1 { return 0, false, errTooShortForTableOfContentsHeader } @@ -49,9 +48,27 @@ func (d *Decoder) Decode(in []byte, out []byte) (bandwidth Bandwidth, isStereo b } } - if err := bitdepth.ConvertFloat32LittleEndianToSigned16LittleEndian(d.silkBuffer, out, 3); err != nil { - return 0, false, err - } - return cfg.bandwidth(), tocHeader.isStereo(), nil } + +// Decode decodes the Opus bitstream into PCM +func (d *Decoder) Decode(in []byte, out []byte) (bandwidth Bandwidth, isStereo bool, err error) { + if bandwidth, isStereo, err = d.decode(in); err != nil { + return + } else { + if err := bitdepth.ConvertFloat32LittleEndianToSigned16LittleEndian(d.silkBuffer, out, 3); err != nil { + return 0, false, err + } + return + } +} + +// DecodeFloat decodes the Opus bitstream into native float +func (d *Decoder) DecodeFloat(in []byte, out []float32) (bandwidth Bandwidth, isStereo bool, err error) { + if bandwidth, isStereo, err = d.decode(in); err != nil { + return + } else { + copy(out, d.silkBuffer) + return + } +} diff --git a/examples/decode/main.go b/examples/decode/main.go index 24c42fe..b736772 100644 --- a/examples/decode/main.go +++ b/examples/decode/main.go @@ -32,7 +32,6 @@ func main() { } decoder := opus.NewDecoder() - x := 0 for { segments, _, err := ogg.ParseNextPage()