Documentation ¶
Overview ¶
Package audio defines a common interface to analyze and/or process audio data.
At the heart of the package is the Buffer interface and its implementations: FloatBuffer and IntBuffer. Decoders, encoders, processors, analyzers and transformers can be written to accept or return these types and share a common interface.
Index ¶
- Variables
- func IEEEFloatToInt(b [10]byte) int
- func Int24BETo32(bytes []byte) int32
- func Int24LETo32(bytes []byte) int32
- func Int32toInt24BEBytes(n int32) []byte
- func Int32toInt24LEBytes(n int32) []byte
- func IntMaxSignedValue(b int) int
- func IntToIEEEFloat(i int) [10]byte
- func Uint24to32(bytes []byte) uint32
- func Uint32toUint24Bytes(n uint32) []byte
- type Buffer
- type Float32Buffer
- type FloatBuffer
- type Format
- type IntBuffer
- type PCMBuffer
- func (b *PCMBuffer) AsF32() (out []float32)
- func (b *PCMBuffer) AsF64() (out []float64)
- func (b *PCMBuffer) AsFloat32Buffer() *Float32Buffer
- func (b *PCMBuffer) AsFloatBuffer() *FloatBuffer
- func (b *PCMBuffer) AsI16() (out []int16)
- func (b *PCMBuffer) AsI32() (out []int32)
- func (b *PCMBuffer) AsI8() (out []int8)
- func (b *PCMBuffer) AsInt() (out []int)
- func (b *PCMBuffer) AsIntBuffer() *IntBuffer
- func (b *PCMBuffer) Clone() Buffer
- func (b *PCMBuffer) Len() int
- func (b *PCMBuffer) NumFrames() int
- func (b *PCMBuffer) PCMFormat() *Format
- func (b *PCMBuffer) SwitchPrimaryType(t PCMDataFormat)
- type PCMDataFormat
Constants ¶
This section is empty.
Variables ¶
var ( // FormatMono22500 is mono 22.5kHz format. FormatMono22500 = &Format{ NumChannels: 1, SampleRate: 22500, } // FormatMono44100 is mono 8bit 44.1kHz format. FormatMono44100 = &Format{ NumChannels: 1, SampleRate: 44100, } // FormatMono48000 is mono 48kHz format. FormatMono48000 = &Format{ NumChannels: 1, SampleRate: 48000, } // FormatMono96000 is mono 96kHz format. FormatMono96000 = &Format{ NumChannels: 1, SampleRate: 96000, } // FormatStereo22500 is stereo 22.5kHz format. FormatStereo22500 = &Format{ NumChannels: 2, SampleRate: 22500, } // FormatStereo44100 is stereo 8bit 44.1kHz format. FormatStereo44100 = &Format{ NumChannels: 2, SampleRate: 44100, } // FormatStereo48000 is stereo 48kHz format. FormatStereo48000 = &Format{ NumChannels: 2, SampleRate: 48000, } // FormatStereo96000 is stereo 96kHz format. FormatStereo96000 = &Format{ NumChannels: 2, SampleRate: 96000, } )
var ( // ErrInvalidBuffer is a generic error returned when trying to read/write to an invalid buffer. ErrInvalidBuffer = errors.New("invalid buffer") )
Functions ¶
func IEEEFloatToInt ¶
IEEEFloatToInt converts a 10 byte IEEE float into an int.
func Int24BETo32 ¶
Int24BETo32 converts an int24 value from 3 bytes into an int32 value
func Int24LETo32 ¶
Int24LETo32 converts an int24 value from 3 bytes into an int32 value
func Int32toInt24BEBytes ¶
Int32toInt24BEBytes converts an int32 into a big endian 3 byte int24 representation
func Int32toInt24LEBytes ¶
Int32toInt24LEBytes converts an int32 into a little endian 3 byte int24 representation
func IntMaxSignedValue ¶
IntMaxSignedValue returns the max value of an integer based on its memory size
func IntToIEEEFloat ¶
IntToIEEEFloat converts an int into a 10 byte IEEE float.
func Uint24to32 ¶
Uint24to32 converts a 3 byte uint23 into a uint32 BigEndian!
func Uint32toUint24Bytes ¶
Uint32toUint24Bytes converts a uint32 into a 3 byte uint24 representation
Types ¶
type Buffer ¶
type Buffer interface { // PCMFormat is the format of buffer (describing the buffer content/format). PCMFormat() *Format // NumFrames returns the number of frames contained in the buffer. NumFrames() int // AsFloatBuffer returns a float 64 buffer from this buffer. AsFloatBuffer() *FloatBuffer // AsFloat32Buffer returns a float 32 buffer from this buffer. AsFloat32Buffer() *Float32Buffer // AsIntBuffer returns an int buffer from this buffer. AsIntBuffer() *IntBuffer // Clone creates a clean clone that can be modified without // changing the source buffer. Clone() Buffer }
Buffer is the representation of an audio buffer.
type Float32Buffer ¶
type Float32Buffer struct { // Format is the representation of the underlying data format Format *Format // Data is the buffer PCM data as floats Data []float32 // SourceBitDepth helps us know if the source was encoded on // 8, 16, 24, 32, 64 bits. SourceBitDepth int }
Float32Buffer is an audio buffer with its PCM data formatted as float32.
func (*Float32Buffer) AsFloat32Buffer ¶
func (buf *Float32Buffer) AsFloat32Buffer() *Float32Buffer
AsFloat32Buffer implements the Buffer interface and returns itself.
func (*Float32Buffer) AsFloatBuffer ¶
func (buf *Float32Buffer) AsFloatBuffer() *FloatBuffer
AsFloatBuffer implements the Buffer interface and returns a float64 version of itself.
func (*Float32Buffer) AsIntBuffer ¶
func (buf *Float32Buffer) AsIntBuffer() *IntBuffer
AsIntBuffer returns a copy of this buffer but with data truncated to Ints. It is usually recommended to apply a transforms when going from a 24bit source to an int (16bit destination). Look at transforms.PCMScaleF32() for instance
func (*Float32Buffer) Clone ¶
func (buf *Float32Buffer) Clone() Buffer
Clone creates a clean clone that can be modified without changing the source buffer.
func (*Float32Buffer) NumFrames ¶
func (buf *Float32Buffer) NumFrames() int
NumFrames returns the number of frames contained in the buffer.
func (*Float32Buffer) PCMFormat ¶
func (buf *Float32Buffer) PCMFormat() *Format
PCMFormat returns the buffer format information.
type FloatBuffer ¶
type FloatBuffer struct { // Format is the representation of the underlying data format Format *Format // Data is the buffer PCM data as floats Data []float64 }
FloatBuffer is an audio buffer with its PCM data formatted as float64.
func (*FloatBuffer) AsFloat32Buffer ¶
func (buf *FloatBuffer) AsFloat32Buffer() *Float32Buffer
AsFloat32Buffer implements the Buffer interface and returns a float 32 version of itself.
func (*FloatBuffer) AsFloatBuffer ¶
func (buf *FloatBuffer) AsFloatBuffer() *FloatBuffer
AsFloatBuffer implements the Buffer interface and returns itself.
func (*FloatBuffer) AsIntBuffer ¶
func (buf *FloatBuffer) AsIntBuffer() *IntBuffer
AsIntBuffer returns a copy of this buffer but with data truncated to Ints.
func (*FloatBuffer) Clone ¶
func (buf *FloatBuffer) Clone() Buffer
Clone creates a clean clone that can be modified without changing the source buffer.
func (*FloatBuffer) NumFrames ¶
func (buf *FloatBuffer) NumFrames() int
NumFrames returns the number of frames contained in the buffer.
func (*FloatBuffer) PCMFormat ¶
func (buf *FloatBuffer) PCMFormat() *Format
PCMFormat returns the buffer format information.
type Format ¶
type Format struct { // NumChannels is the number of channels contained in the data NumChannels int // SampleRate is the sampling rate in Hz SampleRate int }
Format is a high level representation of the underlying data.
type IntBuffer ¶
type IntBuffer struct { // Format is the representation of the underlying data format Format *Format // Data is the buffer PCM data as ints Data []int // SourceBitDepth helps us know if the source was encoded on // 8, 16, 24, 32, 64 bits. SourceBitDepth int }
IntBuffer is an audio buffer with its PCM data formatted as int.
func (*IntBuffer) AsFloat32Buffer ¶
func (buf *IntBuffer) AsFloat32Buffer() *Float32Buffer
AsFloat32Buffer returns a copy of this buffer but with data converted to float 32.
func (*IntBuffer) AsFloatBuffer ¶
func (buf *IntBuffer) AsFloatBuffer() *FloatBuffer
AsFloatBuffer returns a copy of this buffer but with data converted to floats.
func (*IntBuffer) AsIntBuffer ¶
AsIntBuffer implements the Buffer interface and returns itself.
func (*IntBuffer) Clone ¶
Clone creates a clean clone that can be modified without changing the source buffer.
type PCMBuffer ¶
type PCMBuffer struct { // Format describes the format of the buffer data. Format *Format // I8 is a store for audio sample data as integers. I8 []int8 // I16 is a store for audio sample data as integers. I16 []int16 // I32 is a store for audio sample data as integers. I32 []int32 // F32 is a store for audio samples data as float64. F32 []float32 // F64 is a store for audio samples data as float64. F64 []float64 // DataType indicates the primary format used for the underlying data. // The consumer of the buffer might want to look at this value to know what store // to use to optimaly retrieve data. DataType PCMDataFormat // SourceBitDepth helps us know if the source was encoded on // 1 (int8), 2 (int16), 3(int24), 4(int32), 8(int64) bytes. SourceBitDepth uint8 }
PCMBuffer encapsulates uncompressed audio data and provides useful methods to read/manipulate this PCM data. It's a more flexible buffer type allowing the developer to handle different kind of buffer data formats and convert between underlying types.
func (*PCMBuffer) AsF32 ¶
AsF32 returns the buffer's samples as float32 sample values. If the buffer isn't in this format, a copy is created and converted. Note that converting might result in unexpected truncations.
func (*PCMBuffer) AsF64 ¶
AsF64 returns the buffer's samples as float64 sample values. If the buffer isn't in this format, a copy is created and converted. Note that converting might result in unexpected truncations.
func (*PCMBuffer) AsFloat32Buffer ¶
func (b *PCMBuffer) AsFloat32Buffer() *Float32Buffer
AsFloat32Buffer implements the Buffer interface and returns a float 32 version of itself.
func (*PCMBuffer) AsFloatBuffer ¶
func (b *PCMBuffer) AsFloatBuffer() *FloatBuffer
AsFloatBuffer returns a copy of this buffer but with data converted to floats.
func (*PCMBuffer) AsI16 ¶
AsI16 returns the buffer's samples as int16 sample values. If the buffer isn't in this format, a copy is created and converted. Note that converting might result in loss of resolution.
func (*PCMBuffer) AsI32 ¶
AsI32 returns the buffer's samples as int32 sample values. If the buffer isn't in this format, a copy is created and converted. Note that converting a float to an int might result in unexpected truncations.
func (*PCMBuffer) AsI8 ¶
AsI8 returns the buffer's samples as int8 sample values. If the buffer isn't in this format, a copy is created and converted. Note that converting might result in loss of resolution.
func (*PCMBuffer) AsInt ¶
AsInt returns the buffer content as integers (int32s). It's recommended to avoid this method since it creates an extra copy of the buffer content.
func (*PCMBuffer) AsIntBuffer ¶
AsIntBuffer returns a copy of this buffer but with data truncated to Ints.
func (*PCMBuffer) Clone ¶
Clone creates a clean clone that can be modified without changing the source buffer.
func (*PCMBuffer) SwitchPrimaryType ¶
func (b *PCMBuffer) SwitchPrimaryType(t PCMDataFormat)
SwitchPrimaryType is a convenience method to switch the primary data type. Use this if you process/swap a different type than the original type. Notes that conversion might be lossy if you switch to a lower resolution format.
type PCMDataFormat ¶
type PCMDataFormat uint8
PCMDataFormat is an enum type to indicate the underlying data format used.
const ( // DataTypeUnknown refers to an unknown format DataTypeUnknown PCMDataFormat = iota // DataTypeI8 indicates that the content of the audio buffer made of 8-bit integers. DataTypeI8 // DataTypeI16 indicates that the content of the audio buffer made of 16-bit integers. DataTypeI16 // DataTypeI32 indicates that the content of the audio buffer made of 32-bit integers. DataTypeI32 // DataTypeF32 indicates that the content of the audio buffer made of 32-bit floats. DataTypeF32 // DataTypeF64 indicates that the content of the audio buffer made of 64-bit floats. DataTypeF64 )