func pianoAt(i int, freq float64) float64 {
	// Create piano-like waves with multiple sin waves.
	amp := []float64{1.0, 0.8, 0.6, 0.4, 0.2}
	x := []float64{4.0, 2.0, 1.0, 0.5, 0.25}
	v := 0.0
	for j := 0; j < len(amp); j++ {
		// Decay
		a := amp[j] * math.Exp(-5*float64(i)*freq/baseFreq/(x[j]*sampleRate))
		v += a * math.Sin(2.0*math.Pi*float64(i)*freq*float64(j+1)/sampleRate)
	}
	return v / 5.0
}
func pianoAt(i int, freq float64) float64 {
	
	amp := []float64{1.0, 0.8, 0.6, 0.4, 0.2}
	x := []float64{4.0, 2.0, 1.0, 0.5, 0.25}
	v := 0.0
	for j := 0; j < len(amp); j++ {
		
		a := amp[j] * math.Exp(-5*float64(i)*freq/baseFreq/(x[j]*sampleRate))
		v += a * math.Sin(2.0*math.Pi*float64(i)*freq*float64(j+1)/sampleRate)
	}
	return v / 5.0
}
func pianoAt ( i int , freq float64 ) float64 { // Create piano-like waves with multiple sin waves. amp := [ ] float64 { 1.0 , 0.8 , 0.6 , 0.4 , 0.2 } x := [ ] float64 { 4.0 , 2.0 , 1.0 , 0.5 , 0.25 } v := 0.0 for j := 0 ; j < len ( amp ) ; j ++ { // Decay a := amp [ j ] * math . Exp ( - 5 * float64 ( i ) * freq / baseFreq / ( x [ j ] * sampleRate ) ) v += a * math . Sin ( 2.0 * math . Pi * float64 ( i ) * freq * float64 ( j + 1 ) / sampleRate ) } return v / 5.0 }
// pianoAt returns an i-th sample of piano with the given frequency.
pianoAt returns an i - th sample of piano with the given frequency .