38 lines
809 B
Go
38 lines
809 B
Go
package converter
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"github.com/bluenviron/mediacommon/v2/pkg/codecs/g711"
|
|
"github.com/gen2brain/aac-go"
|
|
)
|
|
|
|
// ConvertG711ToAAC converts PCM to AAC.
|
|
func ConvertG711ToAAC(g711Samples []byte, mulaw bool) ([]byte, error) {
|
|
var pcmSamples []byte
|
|
if mulaw {
|
|
pcmSamples = g711.DecodeMulaw(g711Samples)
|
|
} else {
|
|
pcmSamples = g711.DecodeAlaw(g711Samples)
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
opts := &aac.Options{
|
|
SampleRate: 8000, // Исходная частота G711
|
|
NumChannels: 1,
|
|
}
|
|
|
|
enc, err := aac.NewEncoder(&buf, opts)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("error creating encoder: %v", err)
|
|
}
|
|
defer enc.Close()
|
|
|
|
r := bytes.NewReader(pcmSamples)
|
|
if err := enc.Encode(r); err != nil {
|
|
return nil, fmt.Errorf("error encoding: %v", err)
|
|
}
|
|
|
|
return buf.Bytes(), nil
|
|
}
|