Squeak SmalltalkJoker Squeak Smalltalk : Multimedia : prevnext Wind Chime

chimeTest: nNotes delay: avgDelay duration: dur pitchBase: pitchBase
	pitches: chromaticNumbers loudness: avgLoudness
	"D F A C D E"
	"FMSound chimeTest: 30 delay: 300.0 duration: 4.0
		pitchBase: #d6 pitches: #(1 4 8 11 13 15) loudness: 0.2"
	"FMSound chimeTest: 20 delay: 700.0 duration: 6.0
		pitchBase: #d3 pitches: #(1 4 8 11 13 15) loudness: 0.3"

	"G A B D G G"
	"FMSound chimeTest: 30 delay: 500.0 duration: 6.0
		pitchBase: #g5 pitches: #(1 3 5 8 13 13) loudness: 0.2"

	| snd rnd pitches decay |
	pitches _ (AbstractSound chromaticPitchesFrom: pitchBase) atAll:
 chromaticNumbers.

	decay _ VolumeEnvelope exponentialDecay: 1.0 - (0.08/dur).
	rnd _ Random new.
	1 to: nNotes do:
		[:i |
		snd _ FMSound new.
		snd addEnvelope: decay copy.
		snd setPitch: pitches atRandom dur: dur loudness: rnd next*avgLoudness*2.0.
		"snd modulation: 1.4 ratio: 0.45."
		snd play.
		(Delay forMilliseconds: (rnd next*avgDelay*2.0) rounded+1) wait]