wave: github.com/bake/wave Index | Examples | Files | Directories

package wave

import "github.com/bake/wave"

Package wave offers a simplified API to read and write WAVE files by only allowing to work with samples directly.

Index

Examples

Package Files

format.go reader.go wave.go writer.go

type Format Uses

type Format struct {
    AudioFormat   uint16 // 1 if PCM is used.
    NumChans      uint16 // Number of channels (1 = mono, 2 = stereo, ...)
    SampleRate    uint32 // Samples per second (44100, ...).
    ByteRate      uint32 // Average bytes per second.
    BlockAlign    uint16 // Bytes per sample.
    BitsPerSample uint16 // Bits per sample.
}

Format holds configuration about the WAVE.

type Reader Uses

type Reader struct {
    Format Format
    // contains filtered or unexported fields
}

Reader reads samples from a WAVE file.

Code:

r := bytes.NewReader([]byte{
    // R,    I,    F,    F,                     76,    W,    A,    V,    E,
    0x52, 0x49, 0x46, 0x46, 0x50, 0x00, 0x00, 0x00, 0x57, 0x41, 0x56, 0x45,

    // f,    m,    t,    ␣,                     16,          1,          2,
    0x66, 0x6d, 0x74, 0x20, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00,
    //               44100,                 176400,          4,         16,
    0x44, 0xac, 0x00, 0x00, 0x10, 0xb1, 0x02, 0x00, 0x04, 0x00, 0x10, 0x00,

    // d,    a,    t,    a,                     44,          0,          0,
    0x64, 0x61, 0x74, 0x61, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    //    5924,      -3298,       4924,       5180,      -1770,      -1768,
    0x24, 0x17, 0x1e, 0xf3, 0x3c, 0x13, 0x3c, 0x14, 0x16, 0xf9, 0x18, 0xf9,
    //   -6348,     -23005,      -3524,      -3548,     -12783,       3354,
    0x34, 0xe7, 0x23, 0xa6, 0x3c, 0xf2, 0x24, 0xf2, 0x11, 0xce, 0x1a, 0x0d,
    //       0,          0,       5924,      -3298,       4924,       5180,
    0x00, 0x00, 0x00, 0x00, 0x24, 0x17, 0x1e, 0xf3, 0x3c, 0x13, 0x3c, 0x14,
    //   -1770,      -1768,
    0x16, 0xf9, 0x18, 0xf9,
})
wavr, err := wave.NewReader(r)
if err != nil {
    log.Fatalf("could not create new wave reader: %v", err)
}
fmt.Printf("SampleRate: %d\n", wavr.Format.SampleRate)
samples, err := wavr.Samples()
if err != nil {
    log.Fatalf("could not read samples: %v", err)
}
fmt.Printf("Samples: %v\n", samples[:10])

Output:

SampleRate: 44100
Samples: [0 0 5924 -3298 4924 5180 -1770 -1768 -6348 -23005]

func NewReader Uses

func NewReader(r io.Reader) (*Reader, error)

NewReader reads the initial chunks from a WAVE file and returns a new reader.

func (*Reader) Sample Uses

func (wavr *Reader) Sample() (int, error)

Sample returns the next sample from the wave file. Chunks that don't contain samples are skipped.

func (*Reader) Samples Uses

func (wavr *Reader) Samples() ([]int, error)

Samples reads the whole file and returns all samples.

type Writer Uses

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

Writer writes samples to an io.WriteSeeker.

Code:

format := wave.Format{
    AudioFormat:   1,
    NumChans:      2,
    SampleRate:    44100,
    ByteRate:      176400,
    BlockAlign:    4,
    BitsPerSample: 16,
}
samples := []int{
    0, 0, 5924, -3298, 4924, 5180, -1770, -1768,
    -6348, -23005, -3524, -3548, -12783, 3354,
    0, 0, 5924, -3298, 4924, 5180, -1770, -1768,
}

ws := &writerseeker.WriterSeeker{}
wavw, err := wave.NewWriter(ws, format)
if err != nil {
    log.Fatalf("could not create wave writer: %v", err)
}
defer wavw.Close()
for _, s := range samples {
    if err := wavw.Sample(s); err != nil {
        log.Fatalf("could not write sample %d: %v", s, err)
    }
}

func NewWriter Uses

func NewWriter(ws io.WriteSeeker, format Format) (*Writer, error)

NewWriter creates a new WAVE Writer.

func (*Writer) Close Uses

func (wavw *Writer) Close() error

Close the underlying RIFF writers. The file writer needs to be closed separately.

func (*Writer) Sample Uses

func (wavw *Writer) Sample(s int) error

Sample writes a sample.

func (*Writer) Samples Uses

func (wavw *Writer) Samples(samples []int) error

Samples writes a slice of samples.

Directories

PathSynopsis
riffPackage riff contains implementations for a reader and a writer for RIFF files.

Package wave imports 5 packages (graph). Updated 2019-09-09. Refresh now. Tools for package owners.