var ErrNotDCA … var ErrNotFirstFrame … type Decoder … // NewDecoder returns a new dca decoder func NewDecoder(r io.Reader) *Decoder { … } // ReadMetadata reads the first metadata frame // OpusFrame will call this automatically if func (d *Decoder) ReadMetadata() error { … } // OpusFrame returns the next audio frame // If this is the first frame it will also check for metadata in it func (d *Decoder) OpusFrame() (frame []byte, err error) { … } // FrameDuration implements OpusReader, returnining the specified duration per frame func (d *Decoder) FrameDuration() time.Duration { … }