audio

package
v0.21.37 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 19, 2026 License: MPL-2.0 Imports: 14 Imported by: 0

README

Audio package

Allows many audio encoding and decoding.

  • PCM encoder/decoder
  • WAV writer/reader

Installing opus C library

#Ubuntu 
sudo apt install libopus0

# Fedora
sudo dnf install opus-devel
sudo dnf install opusfile-devel

Documentation

Index

Constants

View Source
const (
	// ITU-T G.711.0 codec supports frame lengths of 40, 80, 160, 240 and 320 samples per frame.
	FrameSize  = 3200
	ReadBuffer = 160

	// TODO: this type should defined once. For now we have this on sdp package as well
	FORMAT_TYPE_ULAW = 0
	FORMAT_TYPE_ALAW = 8
	FORMAT_TYPE_OPUS = 96
)
View Source
const (
	WavAudioFormatPCM = 1
)

Variables

View Source
var (
	RecordingFlushSize = 4096
)

Functions

func DecodeAlawTo

func DecodeAlawTo(lpcm []byte, alaw []byte) (n int, err error)

func DecodeUlawTo

func DecodeUlawTo(lpcm []byte, ulaw []byte) (n int, err error)

func EncodeAlawTo

func EncodeAlawTo(alaw []byte, lpcm []byte) (n int, err error)

func EncodeUlawTo

func EncodeUlawTo(ulaw []byte, lpcm []byte) (n int, err error)

func WavWrite

func WavWrite(w io.Writer, audio []byte, opts WavWriteOpts) (int, error)

WavWrite wrates WAV encoded to writter with the given audio payload, sample rate, and bit rate

func WavWriteVoipPCM

func WavWriteVoipPCM(w io.Writer, audio []byte) (int, error)

WavWriteVoipPCM is normally 16 bit mono 8000 PCM

Types

type MonitorPCMReader

type MonitorPCMReader struct {
	// contains filtered or unexported fields
}

func (*MonitorPCMReader) Flush

func (m *MonitorPCMReader) Flush() error

func (*MonitorPCMReader) Init

func (m *MonitorPCMReader) Init(w io.Writer, codec media.Codec, audioReader io.Reader) error

func (*MonitorPCMReader) Read

func (m *MonitorPCMReader) Read(b []byte) (int, error)

func (*MonitorPCMReader) StartTime

func (m *MonitorPCMReader) StartTime(t time.Time)

Monitoring starts with first packet arrived, but you can shift with start time. Ex stream are not continious

type MonitorPCMStereo

type MonitorPCMStereo struct {
	MonitorPCMReader
	MonitorPCMWriter

	PCMFileRead  *os.File
	PCMFileWrite *os.File
	// contains filtered or unexported fields
}

func (*MonitorPCMStereo) Close

func (m *MonitorPCMStereo) Close() error

func (*MonitorPCMStereo) Flush

func (m *MonitorPCMStereo) Flush() error

func (*MonitorPCMStereo) Init

func (m *MonitorPCMStereo) Init(record io.Writer, codec media.Codec, audioReader io.Reader, audioWriter io.Writer) error

It supports only single codec, which must be same for reader and writer

type MonitorPCMWriter

type MonitorPCMWriter struct {
	// contains filtered or unexported fields
}

func (*MonitorPCMWriter) Flush

func (m *MonitorPCMWriter) Flush() error

func (*MonitorPCMWriter) Init

func (m *MonitorPCMWriter) Init(w io.Writer, codec media.Codec, audioWriter io.Writer) error

func (*MonitorPCMWriter) Write

func (m *MonitorPCMWriter) Write(b []byte) (int, error)

type OpusDecoder

type OpusDecoder struct {
}

func (*OpusDecoder) DecodeTo

func (dec *OpusDecoder) DecodeTo(lpcm []byte, data []byte) (int, error)

func (*OpusDecoder) Init

func (enc *OpusDecoder) Init(sampleRate int, numChannels int, samplesSize int) error

type OpusEncoder

type OpusEncoder struct {
}

func (*OpusEncoder) EncodeTo

func (enc *OpusEncoder) EncodeTo(data []byte, lpcm []byte) (int, error)

func (*OpusEncoder) Init

func (enc *OpusEncoder) Init(sampleRate int, numChannels int, samplesSize int) error

type PCMDecoder

type PCMDecoder struct {

	// DecoderTo Must know size in advance!
	DecoderTo func(lpcm []byte, encoded []byte) (int, error)
	// contains filtered or unexported fields
}

func NewPCMDecoder

func NewPCMDecoder(codec uint8) (*PCMDecoder, error)

PCM decoder is streamer implementing io.Reader. It reads from underhood reader and returns decoded codec data This constructor uses default codec supported by media package.

func (*PCMDecoder) Init

func (dec *PCMDecoder) Init(codec media.Codec) error

Init should be called only once after creating PCMDecode

type PCMDecoderBuffer

type PCMDecoderBuffer struct {
	PCMDecoderWriter
	// contains filtered or unexported fields
}

func (*PCMDecoderBuffer) Init

func (d *PCMDecoderBuffer) Init(codec media.Codec) error

func (*PCMDecoderBuffer) ReadAll

func (d *PCMDecoderBuffer) ReadAll() []byte

func (*PCMDecoderBuffer) ReadFull

func (d *PCMDecoderBuffer) ReadFull() []byte

type PCMDecoderReader

type PCMDecoderReader struct {
	PCMDecoder
	Source  io.Reader
	BufSize int
	// contains filtered or unexported fields
}

func NewPCMDecoderReader

func NewPCMDecoderReader(codec uint8, reader io.Reader) (*PCMDecoderReader, error)

func (*PCMDecoderReader) Init

func (d *PCMDecoderReader) Init(codec media.Codec, reader io.Reader) error

func (*PCMDecoderReader) Read

func (d *PCMDecoderReader) Read(b []byte) (n int, err error)

Read decodes and return PCM NOTE: It is expected that buffer matches codec samples size.

type PCMDecoderWriter

type PCMDecoderWriter struct {
	PCMDecoder
	Writer io.Writer
	// DecodeBuf should be increased if you are writing bigger chunk of samples
	DecodeBuf int
	// contains filtered or unexported fields
}

func NewPCMDecoderWriter

func NewPCMDecoderWriter(codec uint8, writer io.Writer) (*PCMDecoderWriter, error)

func (*PCMDecoderWriter) Init

func (d *PCMDecoderWriter) Init(codec media.Codec, writer io.Writer) error

func (*PCMDecoderWriter) Write

func (d *PCMDecoderWriter) Write(b []byte) (n int, err error)

type PCMEncoder

type PCMEncoder struct {
	EncoderTo func(encoded []byte, lpcm []byte) (int, error)
	// contains filtered or unexported fields
}

func NewPCMEncoder

func NewPCMEncoder(payloadType uint8) (*PCMEncoder, error)

PCMEncoder encodes data from pcm to codec and passes to writer

func (*PCMEncoder) Init

func (enc *PCMEncoder) Init(codec media.Codec) error

type PCMEncoderWriter

type PCMEncoderWriter struct {
	PCMEncoder
	Writer  io.Writer
	BufSize int
	// contains filtered or unexported fields
}

func NewPCMEncoderWriter

func NewPCMEncoderWriter(payloadType uint8, writer io.Writer) (*PCMEncoderWriter, error)

func (*PCMEncoderWriter) Init

func (d *PCMEncoderWriter) Init(codec media.Codec, writer io.Writer) error

func (*PCMEncoderWriter) Write

func (d *PCMEncoderWriter) Write(lpcm []byte) (int, error)

type WavReader

type WavReader struct {
	riff.Parser

	DataSize int
	// contains filtered or unexported fields
}

func NewWavReader

func NewWavReader(r io.Reader) *WavReader

func (*WavReader) Read

func (r *WavReader) Read(buf []byte) (n int, err error)

Read returns PCM underneath

func (*WavReader) ReadHeaders

func (r *WavReader) ReadHeaders() error

ReadHeaders reads until data chunk

type WavWriteOpts

type WavWriteOpts struct {
	SampleRate  int
	BitDepth    int
	NumChans    int
	AudioFormat int
}

type WavWriter

type WavWriter struct {
	SampleRate  int
	BitDepth    int
	NumChans    int
	AudioFormat int

	W io.WriteSeeker
	// contains filtered or unexported fields
}

func NewWavWriter

func NewWavWriter(w io.WriteSeeker) *WavWriter

func (*WavWriter) Close

func (ww *WavWriter) Close() error

func (*WavWriter) Write

func (ww *WavWriter) Write(audio []byte) (int, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL