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.