-- import "github.com/zaf/resample"
Package resample implements resampling of PCM-encoded audio. It uses the SoX Resampler library `libsoxr'.
To install make sure you have libsoxr and pkg-config installed, then run:
go install github.com/zaf/resample@latest
The package wraps an io.Writer in a Resampler: data written to the Resampler is resampled and written to the wrapped Writer. Input should be RAW PCM encoded audio samples.
For usage details please see the code snippet in the cmd folder.
const (
// Quality settings
Quick = 0 // Quick cubic interpolation
LowQ = 1 // LowQ 16-bit with larger rolloff
MediumQ = 2 // MediumQ 16-bit with medium rolloff
HighQ = 4 // High quality
VeryHighQ = 6 // Very high quality
// Input formats
F32 = 0 // 32-bit floating point PCM
F64 = 1 // 64-bit floating point PCM
I32 = 2 // 32-bit signed linear PCM
I16 = 3 // 16-bit signed linear PCM
)type Resampler struct {
}Resampler resamples PCM sound data.
func New(writer io.Writer, inputRate, outputRate float64, channels, format, quality int) (*Resampler, error)New returns a pointer to a Resampler that implements an io.WriteCloser. It takes as parameters the destination data Writer, the input and output sampling rates, the number of channels of the input data, the input format and the quality setting.
func (r *Resampler) Close() errorClose flushes, clean-ups and frees memory. Should always be called when finished using the resampler, and before we can use its output.
func (r *Resampler) Reset(writer io.Writer) errorReset permits reusing a Resampler rather than allocating a new one.
func (r *Resampler) Write(p []byte) (int, error)Write resamples PCM sound data. Writes len(p) bytes from p to the underlying data stream, returns the number of bytes written from p (0 <= n <= len(p)) and any error encountered that caused the write to stop early.
Input may be written in chunks of any size: bytes of an incomplete frame are retained and joined with the next call. When all input has been written, Close must be called to flush any remaining output.