func (d *Decoder) Decode(data []byte, frameSize int, fec bool) ([]int16, error) { var dataPtr *C.uchar if len(data) > 0 { dataPtr = (*C.uchar)(unsafe.Pointer(&data[0])) } dataLen := C.opus_int32(len(data)) output := make([]int16, d.channels*frameSize) outputPtr := (*C.opus_int16)(unsafe.Pointer(&output[0])) var cFec C.int if fec { cFec = 1 } else { cFec = 0 } cRet := C.opus_decode(d.cDecoder, dataPtr, dataLen, outputPtr, C.int(frameSize), cFec) ret := int(cRet) if ret < 0 { return nil, getErr(cRet) } return output[:ret*d.channels], nil }
// Decode encoded Opus data into the supplied buffer. On success, returns the // number of samples correctly written to the target buffer. func (dec *Decoder) Decode(data []byte, pcm []int16) (int, error) { if dec.p == nil { return 0, errDecUninitialized } if len(data) == 0 { return 0, fmt.Errorf("opus: no data supplied") } if len(pcm) == 0 { return 0, fmt.Errorf("opus: target buffer empty") } n := int(C.opus_decode( dec.p, (*C.uchar)(&data[0]), C.opus_int32(len(data)), (*C.opus_int16)(&pcm[0]), C.int(cap(pcm)), 0)) if n < 0 { return 0, opuserr(n) } return n, nil }