122 lines
2.5 KiB
Go
122 lines
2.5 KiB
Go
package flac_test
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/md5"
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
|
|
"git.gammaspectra.live/S.O.N.G/flacgo"
|
|
)
|
|
|
|
func ExampleParseFile() {
|
|
// Parse metadata of love.flac
|
|
stream, err := flac.ParseFile("testdata/love.flac")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer stream.Close()
|
|
|
|
fmt.Printf("unencoded audio md5sum: %032x\n", stream.Info.MD5sum[:])
|
|
for i, block := range stream.Blocks {
|
|
fmt.Printf("block %d: %v\n", i, block.Type)
|
|
}
|
|
// Output:
|
|
// unencoded audio md5sum: bdf6f7d31f77cb696a02b2192d192a89
|
|
// block 0: seek table
|
|
// block 1: vorbis comment
|
|
// block 2: padding
|
|
}
|
|
|
|
func ExampleOpen() {
|
|
// Open love.flac for audio streaming without parsing metadata.
|
|
stream, err := flac.Open("testdata/love.flac")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
defer stream.Close()
|
|
|
|
// Parse audio samples and verify the MD5 signature of the decoded audio
|
|
// samples.
|
|
md5sum := md5.New()
|
|
for {
|
|
// Parse one frame of audio samples at the time, each frame containing one
|
|
// subframe per audio channel.
|
|
frame, err := stream.ParseNext()
|
|
if err != nil {
|
|
if err == io.EOF {
|
|
break
|
|
}
|
|
log.Fatal(err)
|
|
}
|
|
frame.Hash(md5sum)
|
|
|
|
// Print first three samples from each channel of the first five frames.
|
|
if frame.Num < 5 {
|
|
fmt.Printf("frame %d\n", frame.Num)
|
|
for i, subframe := range frame.Subframes {
|
|
fmt.Printf(" subframe %d\n", i)
|
|
for j, sample := range subframe.Samples {
|
|
if j >= 3 {
|
|
break
|
|
}
|
|
fmt.Printf(" sample %d: %v\n", j, sample)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
fmt.Println()
|
|
|
|
got, want := md5sum.Sum(nil), stream.Info.MD5sum[:]
|
|
fmt.Println("decoded audio md5sum valid:", bytes.Equal(got, want))
|
|
// Output:
|
|
// frame 0
|
|
// subframe 0
|
|
// sample 0: 126
|
|
// sample 1: 126
|
|
// sample 2: 126
|
|
// subframe 1
|
|
// sample 0: 126
|
|
// sample 1: 126
|
|
// sample 2: 126
|
|
// frame 1
|
|
// subframe 0
|
|
// sample 0: 126
|
|
// sample 1: 126
|
|
// sample 2: 126
|
|
// subframe 1
|
|
// sample 0: 126
|
|
// sample 1: 126
|
|
// sample 2: 126
|
|
// frame 2
|
|
// subframe 0
|
|
// sample 0: 121
|
|
// sample 1: 130
|
|
// sample 2: 137
|
|
// subframe 1
|
|
// sample 0: 121
|
|
// sample 1: 130
|
|
// sample 2: 137
|
|
// frame 3
|
|
// subframe 0
|
|
// sample 0: -9501
|
|
// sample 1: -6912
|
|
// sample 2: -3916
|
|
// subframe 1
|
|
// sample 0: -9501
|
|
// sample 1: -6912
|
|
// sample 2: -3916
|
|
// frame 4
|
|
// subframe 0
|
|
// sample 0: 513
|
|
// sample 1: 206
|
|
// sample 2: 152
|
|
// subframe 1
|
|
// sample 0: 513
|
|
// sample 1: 206
|
|
// sample 2: 152
|
|
//
|
|
// decoded audio md5sum valid: true
|
|
}
|