summaryrefslogtreecommitdiff
path: root/rhimport/wave_generator.go
diff options
context:
space:
mode:
Diffstat (limited to 'rhimport/wave_generator.go')
-rw-r--r--rhimport/wave_generator.go62
1 files changed, 31 insertions, 31 deletions
diff --git a/rhimport/wave_generator.go b/rhimport/wave_generator.go
index f4c3261..7816bc0 100644
--- a/rhimport/wave_generator.go
+++ b/rhimport/wave_generator.go
@@ -34,11 +34,11 @@ import (
)
const (
- RIFF_TAG = "RIFF"
- WAVE_TAG = "WAVE"
- FMT_TAG = "fmt "
- FMT_ID_PCM = 0x0001
- DATA_TAG = "data"
+ _RIFF_TAG = "RIFF"
+ _WAVE_TAG = "WAVE"
+ _FMT_TAG = "fmt "
+ _FMT_ID_PCM = 0x0001
+ _DATA_TAG = "data"
)
type wavHeader struct {
@@ -60,31 +60,31 @@ type wavHeader struct {
}
func (h *wavHeader) Bytes() []byte {
- buf := new(bytes.Buffer)
+ buf := &bytes.Buffer{}
binary.Write(buf, binary.LittleEndian, h)
return buf.Bytes()
}
-type SampleGenerator interface {
+type sampleGenerator interface {
Reset(samplePeriod float64)
GetSamples(nSamples uint32, channels uint16) []float64 // this needs to be normalized, aka -1 <= value <= 1
}
-type WavFile struct {
+type wavFile struct {
header wavHeader
headerSize uint32
pcmSampleMax float64
pcmSampleBytes uint32
samplePeriod float64
- Generator SampleGenerator
+ generator sampleGenerator
readOffset uint32
}
-func (wav *WavFile) GetFileSize() (size uint32) {
+func (wav *wavFile) GetFileSize() (size uint32) {
return wav.headerSize + wav.header.dataLength
}
-func (wav *WavFile) Read(p []byte) (n int, err error) {
+func (wav *wavFile) Read(p []byte) (n int, err error) {
n = 0
if wav.readOffset >= (wav.header.riffLength + 8) {
return n, io.EOF
@@ -93,16 +93,16 @@ func (wav *WavFile) Read(p []byte) (n int, err error) {
if wav.readOffset < wav.headerSize {
n = copy(p, wav.header.Bytes()[wav.readOffset:])
wav.readOffset += uint32(n)
- wav.Generator.Reset(wav.samplePeriod)
+ wav.generator.Reset(wav.samplePeriod)
}
if n >= len(p) {
return
}
nsamples := uint32(len(p)-n) / uint32(wav.header.blockAlign)
- data := wav.Generator.GetSamples(nsamples, wav.header.nChannels)
+ data := wav.generator.GetSamples(nsamples, wav.header.nChannels)
switch wav.header.fmtID {
- case FMT_ID_PCM:
+ case _FMT_ID_PCM:
idx := 0
for _, normalized := range data {
scaled := wav.pcmSampleMax * normalized
@@ -123,8 +123,8 @@ func (wav *WavFile) Read(p []byte) (n int, err error) {
return
}
-func NewPCMWavFile(sampleRate uint32, sampleDepth uint16, channels uint16, length time.Duration) (wav *WavFile, err error) {
- wav = &WavFile{}
+func newPCMWavFile(sampleRate uint32, sampleDepth uint16, channels uint16, length time.Duration) (wav *wavFile, err error) {
+ wav = &wavFile{}
wav.headerSize = 8 + 4 + 8 + 16 + 8
if length <= 0 {
return nil, errors.New("invalid length: must be > 0")
@@ -154,61 +154,61 @@ func NewPCMWavFile(sampleRate uint32, sampleDepth uint16, channels uint16, lengt
}
dataLen := nFrames * uint32(frameSize)
- copy(wav.header.riffTag[:], RIFF_TAG)
+ copy(wav.header.riffTag[:], _RIFF_TAG)
wav.header.riffLength = wav.headerSize - 8 + dataLen
- copy(wav.header.waveTag[:], WAVE_TAG)
+ copy(wav.header.waveTag[:], _WAVE_TAG)
- copy(wav.header.fmtTag[:], FMT_TAG)
+ copy(wav.header.fmtTag[:], _FMT_TAG)
wav.header.fmtLength = 16
- wav.header.fmtID = FMT_ID_PCM
+ wav.header.fmtID = _FMT_ID_PCM
wav.header.nChannels = channels
wav.header.sampleRate = sampleRate
wav.header.byteRate = sampleRate * uint32(frameSize)
wav.header.blockAlign = frameSize
wav.header.sampleDepth = sampleDepth
- copy(wav.header.dataTag[:], DATA_TAG)
+ copy(wav.header.dataTag[:], _DATA_TAG)
wav.header.dataLength = dataLen
return
}
-type SilenceGenerator struct {
+type silenceGenerator struct {
}
-func NewSilenceGenerator() *SilenceGenerator {
- return &SilenceGenerator{}
+func NewSilenceGenerator() *silenceGenerator {
+ return &silenceGenerator{}
}
-func (s *SilenceGenerator) Reset(samplePeriod float64) {
+func (s *silenceGenerator) Reset(samplePeriod float64) {
// nothing here
}
-func (s *SilenceGenerator) GetSamples(nSamples uint32, nChannels uint16) (data []float64) {
+func (s *silenceGenerator) GetSamples(nSamples uint32, nChannels uint16) (data []float64) {
data = make([]float64, int(nSamples)*int(nChannels))
return
}
-type SinusGenerator struct {
+type sinusGenerator struct {
amp float64
freq float64
sp float64
t float64
}
-func NewSinusGenerator(ampDB, freq float64) (sin *SinusGenerator) {
- sin = &SinusGenerator{}
+func newSinusGenerator(ampDB, freq float64) (sin *sinusGenerator) {
+ sin = &sinusGenerator{}
sin.amp = math.Pow(10.0, (ampDB / 20.0))
sin.freq = freq
return
}
-func (sin *SinusGenerator) Reset(samplePeriod float64) {
+func (sin *sinusGenerator) Reset(samplePeriod float64) {
sin.sp = samplePeriod
sin.t = 0
}
-func (sin *SinusGenerator) GetSamples(nSamples uint32, nChannels uint16) (data []float64) {
+func (sin *sinusGenerator) GetSamples(nSamples uint32, nChannels uint16) (data []float64) {
data = make([]float64, int(nSamples)*int(nChannels))
for i := 0; i < int(nSamples); i++ {
val := sin.amp * math.Sin(2*math.Pi*sin.freq*sin.t)