func Chunk(b audio.Buffer, combSize, combDelay int) (bpm float64) { if combDelay >= combSize { panic("combDelay >= combSize") } length := b.Len() low := 1000.0 high := -1000.0 avg := 0.0 for i := 0; i < length; i++ { end := i + combSize if end > length { end = length } combed, _ := comb(b.Slice(i, end), combDelay) if combed < low { low = combed } if combed > high { high = combed } avg += combed } avg = avg / float64(length) diff := high - avg fmt.Println("low", low, "high", high, "diff", diff, "avg", avg) for i := 0; i < length; i++ { end := i + combSize if end > length { end = length } combed, _ := comb(b.Slice(i, end), combDelay) if combed > (high - diff*0.007) { bpm++ } } fmt.Println("bpm", bpm) return }