Skip to content

Repository files navigation

wave

GoDocGo Report Cardcodecov

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.

Reader example

Create a new WAVE reader by wrapping it around an io.Reader, optionally a buffered one.

r, err:=os.Open("audio.wav")
iferr!=nil {
log.Fatalf("could not open file: %v", err)
}
buf:=bufio.NewReader(r)
wavr, err:=wave.NewReader(buf)
iferr!=nil {
log.Fatalf("could not create wave reader: %v", err)
}

Read the samples one by one or into a slice of integers. The wave.Reader skips all non-data chunks.

for {
sample, err:=wavr.Sample()
iferr==io.EOF {
break
}
iferr!=nil {
log.Fatalf("could not read sample: %v", err)
}
fmt.Println(sample)
}
samples, err:=wavr.Samples()
iferr!=nil {
log.Fatalf("could not read samples: %v", err)
}

Writer example

Create a new WAVE writer by wrapping it around an io.WriteSeeker. This one is automatically buffered.

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,
}
w, err:=os.Create("audio.wav")
iferr!=nil {
log.Fatalf("could not create file: %v", err)
}
deferw.Close()
wavw, err:=wave.NewWriter(w, format)
iferr!=nil {
log.Fatalf("could not create wave writer: %v", err)
}
deferwavw.Close()

Write the samples one by one or as a slice of integers.

for_, s:=rangesamples {
iferr:=wavw.Sample(s); err!=nil {
log.Fatalf("could not write sample %d: %v", s, err)
}
}
iferr:=wavw.Samples(samples); err!=nil {
log.Fatalf("could not write samples: %v", err)
}

Before creating a new chunk, the current one has to be closed which automatically writes its size.

About

Read and write WAVE audio files

Topics

Resources

Stars

1 star

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages