40 lines
824 B
Go
40 lines
824 B
Go
package wav
|
|
|
|
import (
|
|
"errors"
|
|
"math"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
ErrPCMChunkNotFound = errors.New("PCM Chunk not found in audio file")
|
|
)
|
|
|
|
func nullTermStr(b []byte) string {
|
|
return string(b[:clen(b)])
|
|
}
|
|
|
|
func clen(n []byte) int {
|
|
for i := 0; i < len(n); i++ {
|
|
if n[i] == 0 {
|
|
return i
|
|
}
|
|
}
|
|
return len(n)
|
|
}
|
|
|
|
func bytesNumFromDuration(dur time.Duration, sampleRate, bitDepth int) int {
|
|
k := bitDepth / 8
|
|
return samplesNumFromDuration(dur, sampleRate) * k
|
|
}
|
|
|
|
func samplesNumFromDuration(dur time.Duration, sampleRate int) int {
|
|
return int(math.Floor(float64(dur / sampleDuration(sampleRate))))
|
|
}
|
|
|
|
func sampleDuration(sampleRate int) time.Duration {
|
|
if sampleRate == 0 {
|
|
return 0
|
|
}
|
|
return time.Second / time.Duration(math.Abs(float64(sampleRate)))
|
|
} |