audio

package
v0.28.0 Latest Latest
Warning

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

Go to latest
Published: Mar 12, 2026 License: MPL-2.0 Imports: 15 Imported by: 3

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 BeepLoadPCM added in v0.21.0

func BeepLoadPCM(codec media.Codec) ([]byte, error)

BeepLoadPCM loads pregenerated beep in PCM format

func DecodeAlawTo added in v0.5.0

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

func DecodeUlawTo added in v0.5.0

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

func EncodeAlawTo added in v0.5.0

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

func EncodeUlawTo added in v0.5.0

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

func FadeOut added in v0.27.0

func FadeOut(pcmData []byte, props PCMProps, dur time.Duration) error

func PCMMix added in v0.27.0

func PCMMix(dstBuf []byte, mixedBuf []byte, readBuf []byte) int

func PCMUnmix added in v0.27.0

func PCMUnmix(dstBuf []byte, mixedBuf []byte, readBuf []byte)

func RingtoneLoadPCM added in v0.21.0

func RingtoneLoadPCM(codec media.Codec) ([]byte, error)

RingtoneLoadPCM loads pregenerated ringtone in PCM format

func SilenceDetectRMSframe added in v0.27.0

func SilenceDetectRMSframe(frame []byte, sampleRate int, threshold float64) bool

RMS Silence detection. Useful for clean audio samples

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 added in v0.17.0

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

func (*MonitorPCMReader) Flush added in v0.17.0

func (m *MonitorPCMReader) Flush() error

func (*MonitorPCMReader) Init added in v0.17.0

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

func (*MonitorPCMReader) Read added in v0.17.0

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

func (*MonitorPCMReader) StartTime added in v0.19.0

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 added in v0.17.0

type MonitorPCMStereo struct {
	MonitorPCMReader
	MonitorPCMWriter

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

func (*MonitorPCMStereo) Close added in v0.17.0

func (m *MonitorPCMStereo) Close() error

func (*MonitorPCMStereo) Flush added in v0.17.0

func (m *MonitorPCMStereo) Flush() error

func (*MonitorPCMStereo) Init added in v0.17.0

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 added in v0.17.0

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

func (*MonitorPCMWriter) Flush added in v0.17.0

func (m *MonitorPCMWriter) Flush() error

func (*MonitorPCMWriter) Init added in v0.17.0

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

func (*MonitorPCMWriter) Write added in v0.17.0

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

type OpusDecoder added in v0.12.0

type OpusDecoder struct {
}

func (*OpusDecoder) DecodeTo added in v0.12.0

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

func (*OpusDecoder) Init added in v0.12.0

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

type OpusEncoder added in v0.12.0

type OpusEncoder struct {
}

func (*OpusEncoder) EncodeTo added in v0.12.0

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

func (*OpusEncoder) Init added in v0.12.0

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 added in v0.12.0

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

Init should be called only once after creating PCMDecode

type PCMDecoderBuffer added in v0.17.0

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

func (*PCMDecoderBuffer) Init added in v0.17.0

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

func (*PCMDecoderBuffer) ReadAll added in v0.17.0

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

func (*PCMDecoderBuffer) ReadFull added in v0.17.0

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

type PCMDecoderReader added in v0.7.0

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 added in v0.14.0

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

func (*PCMDecoderReader) Read added in v0.7.0

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 added in v0.7.0

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 added in v0.13.0

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

func (*PCMDecoderWriter) Write added in v0.7.0

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 added in v0.12.0

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

type PCMEncoderWriter added in v0.7.0

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

func NewPCMEncoderWriter added in v0.7.0

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

func (*PCMEncoderWriter) Init added in v0.14.0

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

func (*PCMEncoderWriter) Write added in v0.7.0

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

type PCMProps added in v0.27.0

type PCMProps struct {
	SampleRate  int
	NumChannels int
}

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