This message was deleted.
# helpdesk
s
This message was deleted.
b
the decode functions used to try
Copy code
// I got no error, but get small files about 70 - 80 bytes
func OpusDecode(data []byte) ([]byte) {
        ogg, _, err := utils.NewOggReader(bytes.NewReader(data))
        if err != nil {
                panic(err)
        }
        out := make([]byte, 1024)
        out, err = ogg.ReadPacket()
        if err != nil {
                if err == io.EOF {
                        return nil
                }
        }
        return out
}
Copy code
// I got error: Expected BOS, got 2
func OggToOpus(data []byte) ([]byte) {
        const BOS = 1 << iota
        decoder := ogg.NewDecoder(bytes.NewReader(data))
        page, err := decoder.Decode()
        if err != nil {
                logger.Errorw("Error while decoding opus file: %v", err)
                return nil
        }
        if page.Type != BOS {
                fmt.Println("Expected BOS, got ", page.Type)
                return nil
        }

        if page.Serial != 1 {
                fmt.Println("expected serial 1, got", page.Serial)
                return nil
        }

        if page.Granule != 2 {
                fmt.Println("expected granule 2, got", page.Granule)
                return nil
        }

        //fmt.Println("ogg data has %d pages", len(page.Packets))
        audiodata := make([]byte, 0)
        for i:=0; i< len(page.Packets); i++ {
                audiodata = append(audiodata, page.Packets[i]...)
        }
        return audiodata
}
Copy code
// I got error 	{"error": "unsupported configuration mode: 3"}
func pionDecode(data []byte) []byte {
        out := make([]byte, 19200)
        ogg, _, err := oggreader.NewWith(bytes.NewReader(data))
        if err != nil {
                logger.Errorw("Error while creating opus stream: %v", err)
                return nil
        }

        decoder := opus.NewDecoder()
        for {
                segments, _, err := ogg.ParseNextPage()

                if <http://errors.Is|errors.Is>(err, io.EOF) {
                        break
                } else if bytes.HasPrefix(segments[0], []byte("OpusTags")) {
                        continue
                }

                if err != nil {
                        logger.Errorw("Error while creating opus stream: %v", err)
                }

                for i := range segments {
                        if _, _, err = decoder.Decode(segments[i], out[:]); err != nil {
                                logger.Errorw("Error while creating opus stream: %v", err)
                        }
                }
        }

        return out
}
and relevant library used
Copy code
"<http://mccoy.space/g/ogg|mccoy.space/g/ogg>"
        "encoding/binary"
        "<http://github.com/pion/opus|github.com/pion/opus>"
        "<http://github.com/pion/opus/pkg/oggreader|github.com/pion/opus/pkg/oggreader>"
        "<http://github.com/livekit-examples/livegpt/pkg/utils|github.com/livekit-examples/livegpt/pkg/utils>"
        //"<http://gopkg.in/hraban/opus.v2|gopkg.in/hraban/opus.v2>"