'From etoys2.2 of 24 September 2007 [latest update: #1715] on 20 October 2007 at 2:31:12 am'! "Change Set: waveAndGraphFixes-kfr Date: 18 October 2007 Author: Karl Ramberg Use olpc fonts in the WaveEditor. Also, properly hook up the 'play' etoy command to the 'play' function of the GraphMorh."! !GraphMorph methodsFor: 'commands' stamp: 'kfr 9/20/2007 13:02'! play self playOnce! ! !WaveEditor methodsFor: 'initialization' stamp: 'kfr 9/19/2007 22:11'! addControls | slider aWrapper m aButton | aWrapper := AlignmentMorph newRow. aWrapper color: Color transparent; borderWidth: 0; layoutInset: 0. aWrapper hResizing: #shrinkWrap; vResizing: #shrinkWrap; extent: 5 @ 5. aWrapper wrapCentering: #topLeft. aButton := self buttonName: 'X' translated action: #delete. aButton setBalloonText: 'Close WaveEditor' translated. aWrapper addMorphBack: aButton. aWrapper addTransparentSpacerOfSize: 4 @ 1. aButton := self buttonName: 'Menu' translated action: #invokeMenu. aButton setBalloonText: 'Open a menu' translated. aWrapper addMorphBack: aButton. aWrapper addTransparentSpacerOfSize: 4 @ 1. aButton := self buttonName: 'Play' translated action: #play. aButton setBalloonText: 'Play sound' translated. aWrapper addMorphBack: aButton. aWrapper addTransparentSpacerOfSize: 4 @ 1. aButton := self buttonName: 'Play Before' translated action: #playBeforeCursor. aButton setBalloonText: 'Play before cursor' translated. aWrapper addMorphBack: aButton. aWrapper addTransparentSpacerOfSize: 4 @ 1. aButton := self buttonName: 'Play After' translated action: #playAfterCursor. aButton setBalloonText: 'Play after cursor' translated. aWrapper addMorphBack: aButton. aWrapper addTransparentSpacerOfSize: 4 @ 1. aButton := self buttonName: 'Play Loop' translated action: #playLoop. aButton setBalloonText: 'Play the loop' translated. aWrapper addMorphBack: aButton. aWrapper addTransparentSpacerOfSize: 4 @ 1. aButton := self buttonName: 'Test' translated action: #playTestNote. aButton setBalloonText: 'Test the note' translated. aWrapper addMorphBack: aButton. aWrapper addTransparentSpacerOfSize: 4 @ 1. aButton := self buttonName: 'Save' translated action: #saveInstrument. aButton setBalloonText: 'Save the sound' translated. aWrapper addMorphBack: aButton. aWrapper addTransparentSpacerOfSize: 4 @ 1. aButton := self buttonName: 'Set Loop End' translated action: #setLoopEnd. aButton setBalloonText: 'Set loop end at cursor' translated. aWrapper addMorphBack: aButton. aWrapper addTransparentSpacerOfSize: 4 @ 1. aButton := self buttonName: 'Set One Cycle' translated action: #setOneCycle. aButton setBalloonText: 'Set one cycle' translated. aWrapper addMorphBack: aButton. aWrapper addTransparentSpacerOfSize: 4 @ 1. aButton := self buttonName: 'Set Loop Start' translated action: #setLoopStart. aButton setBalloonText: 'Set the loop start at cursor' translated. aWrapper addMorphBack: aButton. aWrapper addTransparentSpacerOfSize: 4 @ 1. self addMorphBack: aWrapper. aWrapper := AlignmentMorph newRow. aWrapper color: self color; borderWidth: 0; layoutInset: 0. aWrapper hResizing: #spaceFill; vResizing: #rigid; extent: 5 @ 20; wrapCentering: #center; cellPositioning: #leftCenter. m := StringMorph new contents: 'Index: ' translated; font: Preferences standardEToysButtonFont. aWrapper addMorphBack: m. m := UpdatingStringMorph new target: graph; getSelector: #cursor; putSelector: #cursor:; font: Preferences standardEToysButtonFont; growable: false; width: 71; step. aWrapper addMorphBack: m. m := StringMorph new contents: 'Value: ' translated; font: Preferences standardEToysButtonFont. aWrapper addMorphBack: m. m := UpdatingStringMorph new target: graph; getSelector: #valueAtCursor; putSelector: #valueAtCursor:; font: Preferences standardEToysButtonFont; growable: false; width: 50; step. aWrapper addMorphBack: m. slider := SimpleSliderMorph new color: color; extent: 200 @ 10; target: self; actionSelector: #scrollTime:. aWrapper addMorphBack: slider. m := Morph new color: aWrapper color; extent: 10 @ 5. "spacer" aWrapper addMorphBack: m. m := UpdatingStringMorph new target: graph; getSelector: #startIndex; putSelector: #startIndex:; font: Preferences standardEToysButtonFont; width: 40; step. aWrapper addMorphBack: m. self addMorphBack: aWrapper! ! !WaveEditor methodsFor: 'initialization' stamp: 'kfr 9/18/2007 21:44'! addLoopPointControls | m aWrapper | aWrapper _ AlignmentMorph newRow. aWrapper color: self color; borderWidth: 0; layoutInset: 0. aWrapper hResizing: #spaceFill; vResizing: #rigid; extent: 5@20; wrapCentering: #center; cellPositioning: #leftCenter. m _ StringMorph new contents: 'Loop end: ' translated; font: Preferences standardEToysButtonFont. aWrapper addMorphBack: m. m _ UpdatingStringMorph new target: self; getSelector: #loopEnd; putSelector: #loopEnd:; font: Preferences standardEToysButtonFont; growable: false; width: 100; step. aWrapper addMorphBack: m. aWrapper addTransparentSpacerOfSize: 4 @ 1. m _ StringMorph new contents: 'Loop length: ' translated ; font: Preferences standardEToysButtonFont. aWrapper addMorphBack: m. m _ UpdatingStringMorph new target: self; getSelector: #loopLength; putSelector: #loopLength:; floatPrecision: 0.001; font: Preferences standardEToysButtonFont; growable: false; width: 100; step. aWrapper addMorphBack: m. aWrapper addTransparentSpacerOfSize: 4 @ 1. m _ StringMorph new contents: 'Loop cycles: ' translated; font: Preferences standardEToysButtonFont. aWrapper addMorphBack: m. m _ UpdatingStringMorph new target: self; getSelector: #loopCycles; putSelector: #loopCycles:; floatPrecision: 0.001; font: Preferences standardEToysButtonFont; growable: false; width: 100; step. aWrapper addMorphBack: m. aWrapper addTransparentSpacerOfSize: 4 @ 1. m _ StringMorph new contents: 'Frequency: ' translated; font: Preferences standardEToysButtonFont. aWrapper addMorphBack: m. m _ UpdatingStringMorph new target: self; getSelector: #perceivedFrequency; putSelector: #perceivedFrequency:; floatPrecision: 0.001; font: Preferences standardEToysButtonFont; growable: false; width: 100; step. aWrapper addMorphBack: m. self addMorphBack: aWrapper ! ! !WaveEditor methodsFor: 'initialization' stamp: 'kfr 9/18/2007 21:19'! buttonName: aString action: aSymbol "Create a button with the given label and action selector, and answer it." ^ SimpleButtonMorph new target: self; label: aString font: ScriptingSystem fontForEToyButtons; actionSelector: aSymbol! ! !WaveEditor methodsFor: 'initialization' stamp: 'kfr 9/23/2007 13:10'! initialize "initialize the state of the receiver" super initialize. "" samplingRate _ SoundPlayer samplingRate. loopEnd _ loopLength _ 0. loopCycles _ 1. perceivedFrequency _ 0. "zero means unknown" self extent: 5 @ 5; listDirection: #topToBottom; wrapCentering: #topLeft; hResizing: #shrinkWrap; vResizing: #shrinkWrap; layoutInset: 3. graph _ GraphMorph new extent: 450 @ 100. graph cursor: 0. graph cursorColorAtZeroCrossings: Color blue. self addControls. self addLoopPointControls. self addMorphBack: graph. self addMorphBack: (Morph newBounds: (0 @ 0 extent: 0 @ 3) color: Color transparent). self addMorphBack: (keyboard _ PianoKeyboardMorph new). "self sound: (SampledSound soundNamed: 'croak')." ! !