@@ 1,6 1,6 @@
module bitbucket.org/coaljoe/tut
-go 1.12
+go 1.13
require (
bitbucket.org/coaljoe/lib v0.0.0-20200205204429-836e7c320403
@@ 101,6 101,7 @@ func (ip *InstrumentPlayer) setVol(v int
// XXX rename to processTick?
func (ip *InstrumentPlayer) processTick(tickTime time.Duration, mixingVol int) {
+ _log.Dbg("%F tickTime:", tickTime, "mixingVol:", mixingVol)
var _ = `
//baseNote := notes["C-4"]
//_ = baseNote
@@ 127,6 128,7 @@ func (ip *InstrumentPlayer) processTick(
if ip.playing {
defaultBaseNote := notes["C-4"]
+ //defaultBaseNote := notes["C-5"]
baseFreqDiff := smp.baseNote.freq - defaultBaseNote.freq
noteFreqDiff := ip.curNote.freq - defaultBaseNote.freq
@@ 138,7 140,7 @@ func (ip *InstrumentPlayer) processTick(
p("curNote:", ip.curNote)
p("defaultBaseNote:", defaultBaseNote)
p("baseNote:", smp.baseNote)
- p("freqFreqDiff:", baseFreqDiff)
+ p("baseFreqDiff:", baseFreqDiff)
p("noteFreqDiff:", noteFreqDiff)
//rate := ip.curNote.freq / smp.baseNote.freq // Old
@@ 147,6 149,9 @@ func (ip *InstrumentPlayer) processTick(
rate = oldRate
p("oldRate:", oldRate)
//pp(2)
+
+ rate = 1.0
+ //rate = 0.5
// TODO make streamer per sample and save it
// in IP
@@ 173,23 178,35 @@ func (ip *InstrumentPlayer) processTick(
numLoops := tickSize / smp.length
p("numLoops:", numLoops)
+
+ tickSizeRateAdj := int(math.Ceil(float64(tickSize) * rate))
+ p("tickSizeRateAdj:", tickSizeRateAdj)
+ //pp(2)
+
+ //numLoopsRateAdj := int(float64(numLoops) * rate) + 1 // ceil
+ //numLoopsRateAdj := tickSizeRateAdj / smp.length
+ numLoopsRateAdj := int(math.Ceil(float64(tickSizeRateAdj) / float64(smp.length)))
+ p("numLoopsRateAdj:", numLoopsRateAdj)
+ //pp(2)
if smp.loopType != LoopType_None {
if numLoops > 1 {
- for i := 0; i < numLoops; i++ {
+ //for i := 0; i < numLoops; i++ {
+ for i := 0; i < numLoopsRateAdj; i++ {
samples = append(samples, smp.buffer.samples...)
}
}
p("len samples:", len(samples))
//pp(4)
- newSamplePos += tickSize
+ //newSamplePos += tickSize
+ newSamplePos += tickSizeRateAdj
// Truncate
- if len(samples) > tickSize {
- samples = samples[:tickSize]
- newSamplePos = maxSamplePos
+ if len(samples) > tickSizeRateAdj {
+ samples = samples[:tickSizeRateAdj]
+ //newSamplePos = maxSamplePos
}
} else {
@@ 274,6 291,7 @@ func (ip *InstrumentPlayer) processTick(
p("len samples before:", lenBefore)
p("len samples after:", len(samples))
p("rate:", rate)
+ //pp(2)
//newSamplePos = oldSamplePos + len(samples)
@@ 300,6 318,11 @@ func (ip *InstrumentPlayer) processTick(
//dumpBuf("/tmp/dump_samples_buf.raw", samples)
//pp(2)
+
+ // Check
+ if len(samples) != tickSize {
+ pp("wrong len samples:", len(samples))
+ }
s2 := ip.streamer2
//p("s2.position before seek:", s2.position())
@@ 332,6 355,7 @@ func (ip *InstrumentPlayer) processTick(
//pp(2)
}
+ _log.Dbg("done %F")
}
func (ip *InstrumentPlayer) stop() {