Пример #1
0
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
}