add sync_t1 bookmark
2 files changed, 31 insertions(+), 7 deletions(-)

M go.mod
M instrumentplayer.go
M go.mod +1 -1
@@ 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

          
M instrumentplayer.go +30 -6
@@ 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() {