[etoys-dev] Etoys Inbox: Sound-kfr.21.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Feb 22 15:36:37 EST 2012
A new version of Sound was added to project Etoys Inbox:
http://source.squeak.org/etoysinbox/Sound-kfr.21.mcz
==================== Summary ====================
Name: Sound-kfr.21
Author: kfr
Time: 22 February 2012, 9:36:33 pm
UUID: faaa5c22-e2d8-614d-942c-9113403e7c57
Ancestors: Sound-kfr.20
In image handling of sound volume
=============== Diff against Sound-kfr.20 ===============
Item was added:
+ (PackageInfo named: 'Sound') preamble: '"below, add code to be run before the loading of this package"
+
+ SoundPlayer initialize'!
Item was changed:
----- Method: AbstractSound>>playSampleCount:into:startingAt: (in category 'playing') -----
playSampleCount: n into: aSoundBuffer startingAt: startIndex
"Mix the next n samples of this sound into the given buffer starting at the given index. Update the receiver's control parameters periodically."
| fullVol samplesBetweenControlUpdates pastEnd i remainingSamples count |
+ fullVol := AbstractSound scaleFactor * SoundPlayer soundVolume average.
- fullVol _ AbstractSound scaleFactor.
samplesBetweenControlUpdates _ self samplingRate // self controlRate.
pastEnd _ startIndex + n. "index just after the last sample"
i _ startIndex.
[i < pastEnd] whileTrue: [
remainingSamples _ self samplesRemaining.
remainingSamples <= 0 ifTrue: [^ self].
count _ pastEnd - i.
samplesUntilNextControl < count ifTrue: [count _ samplesUntilNextControl].
remainingSamples < count ifTrue: [count _ remainingSamples].
self mixSampleCount: count into: aSoundBuffer startingAt: i leftVol: fullVol rightVol: fullVol.
samplesUntilNextControl _ samplesUntilNextControl - count.
samplesUntilNextControl <= 0 ifTrue: [
self doControl.
samplesUntilNextControl _ samplesBetweenControlUpdates].
i _ i + count].
!
Item was changed:
Object subclass: #SoundPlayer
instanceVariableNames: ''
+ classVariableNames: 'ActiveSounds Buffer BufferIndex BufferMSecs LastBuffer PlayerProcess PlayerSemaphore ReadyForBuffer ReverbState SamplingRate SoundJustStarted SoundSupported Stereo UseReadySemaphore UseReverb Volume'
- classVariableNames: 'ActiveSounds Buffer BufferIndex BufferMSecs LastBuffer PlayerProcess PlayerSemaphore ReadyForBuffer ReverbState SamplingRate SoundJustStarted SoundSupported Stereo UseReadySemaphore UseReverb'
poolDictionaries: ''
category: 'Sound-Synthesis'!
Item was changed:
----- Method: SoundPlayer class>>initialize (in category 'initialization') -----
initialize
"SoundPlayer initialize; shutDown; startUp"
"Details: BufferMSecs represents a tradeoff between latency and quality. If BufferMSecs is too low, the sound will not play smoothly, especially during long-running primitives such as large BitBlts. If BufferMSecs is too high, there will be a long time lag between when a sound buffer is submitted to be played and when that sound is actually heard. BufferMSecs is typically in the range 50-200."
+ Volume ifNil:[Volume := #(1.0 1.0) ].
-
SamplingRate := 22050.
BufferMSecs := 120.
Stereo := true.
Preferences
addPreference: #soundReverb
categories: #(media)
+ default: false
- default: true
balloonHelp: 'If true, a little echo will be added, making it sound as if it is in a larger space.'
projectLocal: true
changeInformee: self
changeSelector: #reverbChanged.
self reverbChanged.
!
Item was changed:
----- Method: SoundPlayer class>>setVolumeLeft:volumeRight: (in category 'accessing') -----
setVolumeLeft: aLeftVolume volumeRight: aRightVolume
"Set sound pass in float 0.0-1.0 for left and right channel, with possible 2.0 or higher to overdrive sound channel "
+ Volume at:1 put:aLeftVolume.
+ Volume at:2 put:aRightVolume.!
- self primSoundSetVolumeLeft: aLeftVolume volumeRight: aRightVolume!
Item was changed:
----- Method: SoundPlayer class>>soundVolume (in category 'accessing') -----
soundVolume
"Return sound as array of doubles left then right channel, range is 0.0 to 1.0 but may be overdriven"
+ ^Volume!
- ^self primSoundGetVolume!
More information about the etoys-dev
mailing list