From 69bc3cbb6f65107bdab2677e611230e5fcd38f27 Mon Sep 17 00:00:00 2001 From: Sergey Stepanov Date: Thu, 21 Jan 2021 19:25:19 +0300 Subject: [PATCH] Use new OPUS buffer every audio frame for less garbage --- pkg/encoder/opus/encoder.go | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/pkg/encoder/opus/encoder.go b/pkg/encoder/opus/encoder.go index d41fef1e..8a06bc9a 100644 --- a/pkg/encoder/opus/encoder.go +++ b/pkg/encoder/opus/encoder.go @@ -14,7 +14,7 @@ type Encoder struct { inFrequency int outFrequency int // OPUS output buffer, 1K should be enough - outBuffer []byte + outBufferSize int buffer Buffer onFullBuffer func(data []byte) @@ -32,13 +32,13 @@ func NewEncoder(inputSampleRate, outputSampleRate, channels int, options ...func return Encoder{}, err } enc := &Encoder{ - Encoder: encoder, - buffer: Buffer{Data: make([]int16, inputSampleRate*20/1000*channels)}, - channels: channels, - inFrequency: inputSampleRate, - outFrequency: outputSampleRate, - outBuffer: make([]byte, 1024), - onFullBuffer: func(data []byte) {}, + Encoder: encoder, + buffer: Buffer{Data: make([]int16, inputSampleRate*20/1000*channels)}, + channels: channels, + inFrequency: inputSampleRate, + outFrequency: outputSampleRate, + outBufferSize: 1024, + onFullBuffer: func(data []byte) {}, } _ = enc.SetMaxBandwidth(opus.Fullband) @@ -91,11 +91,12 @@ func (e *Encoder) Encode(pcm []int16) ([]byte, error) { if e.resampleBufSize > 0 { pcm = resampleFn(pcm, e.resampleBufSize) } - n, err := e.Encoder.Encode(pcm, e.outBuffer) + data := make([]byte, e.outBufferSize) + n, err := e.Encoder.Encode(pcm, data) if err != nil { - return nil, err + return []byte{}, err } - return e.outBuffer[:n], nil + return data[:n], nil } func (e *Encoder) GetInfo() string {