Beep new design

Stephane Ducasse ducasse at iam.unibe.ch
Sat May 17 11:14:42 UTC 2003


Hi all

Here is what we propose for removing beep from Object. I would like to 
have your feedback.


Object subclass: #Beeper
	instanceVariableNames: ''
	classVariableNames: ''
	poolDictionaries: ''
	category: 'System-Support'!

!Beeper commentStamp: 'sd 5/17/2003 13:04' prior: 0!
I'm a simple object been responsible to provide an audible feedback. 
However, the feedback can be change by using my class side method 
setDefault: with an object understanding the message play.

So you can invoke Beeper as follow

	Beeper default beep
	Beeper default play

But the idiom is really Beeper beep

Note that play is introduced to propose a common interface between 
AbstractSound and Beeper.
This way we can have more enhanced beepers doing the following:

SampleSound class>>initialize
	"SampledSound initialize"

	IncrementFractionBits _ 16.
	IncrementScaleFactor _ 2 raisedTo: IncrementFractionBits.
	ScaledIndexOverflow _ 2 raisedTo: 29.  "handle overflow before needing 
LargePositiveIntegers"
	self useCoffeeCupClink.
	SoundLibrary ifNil: [SoundLibrary _ Dictionary new].
	Beeper setDefault: (self new
						setSamples: self coffeeCupClink
						samplingRate: 12000)).


Then Beeper beep will play the coffeeCup sound.






!

Beeper class
	instanceVariableNames: 'default '!

!Beeper methodsFor: 'playing' stamp: 'sd 5/17/2003 12:12'!
beepPrimitive
	"Beep in the absence of sound support"

	<primitive: 140>
	self primitiveFailed! !

!Beeper methodsFor: 'playing' stamp: 'sd 5/17/2003 12:13'!
play

	self beepPrimitive
	! !


!Beeper class methodsFor: 'customize' stamp: 'sd 5/17/2003 13:08'!
clearDefault
	"Beeper clearDefault set as default the primitive beep"	

	default := nil! !

!Beeper class methodsFor: 'customize' stamp: 'sd 5/15/2003 22:51'!
default

	default isNil
		ifTrue: [default := self newDefault].
	^ default! !

!Beeper class methodsFor: 'customize' stamp: 'sd 5/15/2003 22:52'!
newDefault
	"Subclass may override me to provide a default beep"

	^ self basicNew! !

!Beeper class methodsFor: 'customize' stamp: 'sd 5/17/2003 12:11'!
setDefault: aPlayableEntity
	"aBeepingEntity should anwers the message play"
	default := aPlayableEntity! !

!Beeper class methodsFor: 'instance creation' stamp: 'sd 5/17/2003 
13:12'!
beep
	"The preferred way of producing a sonor feedback"

	self default play! !


!SampledSound class methodsFor: 'class initialization' stamp: 'sd 
5/17/2003 13:04'!
initialize
	"SampledSound initialize"

	IncrementFractionBits _ 16.
	IncrementScaleFactor _ 2 raisedTo: IncrementFractionBits.
	ScaledIndexOverflow _ 2 raisedTo: 29.  "handle overflow before needing 
LargePositiveIntegers"
	self useCoffeeCupClink.
	SoundLibrary ifNil: [SoundLibrary _ Dictionary new].
	Beeper setDefault: (self new
						setSamples: self coffeeCupClink
						samplingRate: 12000).
! !

SampledSound initialize!



More information about the Squeak-dev mailing list