1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
package main
import (
"fmt"
"log"
"os"
"github.com/cryptix/wav"
)
func main() {
if len(os.Args) != 2 {
fmt.Fprintf(os.Stderr, "Usage: simpleReadEvery <file.wav>\n")
os.Exit(1)
}
testInfo, err := os.Stat(os.Args[1])
checkErr(err)
testWav, err := os.Open(os.Args[1])
checkErr(err)
wavReader, err := wav.NewReader(testWav, testInfo.Size())
checkErr(err)
fmt.Println("Hello, wav")
fmt.Println(wavReader)
// Load file meta
var meta wav.File
meta = wavReader.GetFile()
// Every half a second read a sample
readSampleRate := meta.SampleRate / uint32(4)
fmt.Println("Read a sample every", readSampleRate)
// Number of samples to average together (if any)
var averageBy int
averageBy = 20 // 10, 40, 345, 1000, etc...
samples, err := wavReader.ReadSampleEvery(readSampleRate, averageBy)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Samples found %d, Estimated: %d\n", len(samples), meta.NumberOfSamples/readSampleRate+1)
var second uint32
for i, sample := range samples {
pos := uint32(i)
// What second of audio are we on?
second = readSampleRate * pos / meta.SampleRate
fmt.Printf("Second %d\tSample: %d\tAmplitude: %d\n", second, pos*readSampleRate, sample)
}
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
|