Documentation ¶
Overview ¶
Package wave offers a simplified API to read and write WAVE files by only allowing to work with samples directly. The underlying package riff contains implementations for a reader and a writer for RIFF files.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Format ¶
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 ¶
type Reader struct { Format Format // contains filtered or unexported fields }
Reader reads samples from a WAVE file.
Example ¶
package main import ( "bytes" "fmt" "log" "github.com/bake/wave" ) func main() { 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]
type Writer ¶
type Writer struct {
// contains filtered or unexported fields
}
Writer writes samples to an io.WriteSeeker.
Example ¶
package main import ( "log" "github.com/bake/wave" "github.com/orcaman/writerseeker" ) func main() { 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) } } }
Output:
func NewWriter ¶
func NewWriter(ws io.WriteSeeker, format Format) (*Writer, error)
NewWriter creates a new WAVE Writer.
Click to show internal directories.
Click to hide internal directories.