Marcel Taeumel uploaded a new version of Sound to project The Trunk:
http://source.squeak.org/trunk/Sound-mt.52.mcz ==================== Summary ==================== Name: Sound-mt.52 Author: mt Time: 6 April 2016, 6:06:14.405125 pm UUID: c5f62084-edd7-a64f-a95a-9ae29db062f6 Ancestors: Sound-mt.51 Adds descriptive process names to the processes that are playing sound and MIDI. =============== Diff against Sound-mt.51 =============== Item was changed: ----- Method: MIDIFileReader>>asScore (in category 'chunk reading') ----- asScore ^ MIDIScore new tracks: tracks; trackInfo: trackInfo; tempoMap: tempoMap; + ticksPerQuarterNote: ticksPerQuarter; + source: stream localName - ticksPerQuarterNote: ticksPerQuarter ! Item was changed: Object subclass: #MIDIScore + instanceVariableNames: 'tracks trackInfo ambientTrack tempoMap ticksPerQuarterNote source' - instanceVariableNames: 'tracks trackInfo ambientTrack tempoMap ticksPerQuarterNote' classVariableNames: '' poolDictionaries: '' category: 'Sound-Scores'! !MIDIScore commentStamp: '<historical>' prior: 0! A MIDIScore is a container for a number of MIDI tracks as well as an ambient track for such things as sounds, book page triggers and other related events.! Item was added: + ----- Method: MIDIScore>>printOn: (in category 'printing') ----- + printOn: stream + + self source + ifNotNil: [:s | s printOn: stream] + ifNil: [super printOn: stream].! Item was added: + ----- Method: MIDIScore>>source (in category 'accessing') ----- + source + ^ source! Item was added: + ----- Method: MIDIScore>>source: (in category 'accessing') ----- + source: anObject + source := anObject.! Item was changed: ----- Method: ScorePlayer>>startMIDIPlaying (in category 'midi output') ----- startMIDIPlaying "Start up a process to play this score via MIDI." midiPort ensureOpen. midiPlayerProcess ifNotNil: [midiPlayerProcess terminate]. midiPlayerProcess := [self midiPlayLoop] newProcess. midiPlayerProcess + name: 'Score Player (', self score printString, ')'; priority: Processor userInterruptPriority; resume. ! Item was changed: ----- Method: SoundPlayer class>>resumePlaying:quickStart: (in category 'playing') ----- resumePlaying: aSound quickStart: quickStart "Start playing the given sound without resetting it; it will resume playing from where it last stopped. If quickStart is true, then try to start playing the given sound immediately." | doQuickStart | SoundService soundEnabled ifFalse: [^ self]. doQuickStart := quickStart. self soundQuickStart ifFalse: [doQuickStart := false]. PlayerProcess == nil ifTrue: [ self canStartPlayer ifFalse: [^ self]. ^self startUpWithSound: aSound]. + - PlayerSemaphore critical: [ (ActiveSounds includes: aSound) ifTrue: [doQuickStart := false] + ifFalse: [doQuickStart ifFalse: [ActiveSounds add: aSound]]. + PlayerProcess name: 'Sound Player (', ActiveSounds size asString, ')']. - ifFalse: [ - doQuickStart ifFalse: [ActiveSounds add: aSound]]]. "quick-start the given sound, unless the sound player has just started" doQuickStart ifTrue: [self startPlayingImmediately: aSound]. ! Item was changed: ----- Method: SoundPlayer class>>startPlayerProcessBufferSize:rate:stereo:sound: (in category 'player process') ----- startPlayerProcessBufferSize: bufferSize rate: samplesPerSecond stereo: stereoFlag sound: aSound "Start the sound player process. Terminate the old process, if any." "SoundPlayer startPlayerProcessBufferSize: 1000 rate: 11025 stereo: false" self stopPlayerProcess. aSound ifNil:[ActiveSounds := OrderedCollection new] ifNotNil:[ActiveSounds := OrderedCollection with: aSound]. Buffer := SoundBuffer newStereoSampleCount: (bufferSize // 4) * 4. LastBuffer ifNotNil:[LastBuffer := SoundBuffer basicNew: Buffer basicSize]. PlayerSemaphore := Semaphore forMutualExclusion. SamplingRate := samplesPerSecond. Stereo := stereoFlag. SoundSupported := true. "Assume so" UseReadySemaphore := true. "set to false if ready semaphore not supported by VM" Smalltalk newExternalSemaphoreDo: [ :semaphore :index | ReadyForBuffer := semaphore. self primSoundStartBufferSize: Buffer stereoSampleCount rate: samplesPerSecond stereo: Stereo semaIndex: index ]. "Check if sound start prim was successful" SoundSupported ifFalse:[ Smalltalk unregisterExternalObject: ReadyForBuffer. ReadyForBuffer := nil. ^self ]. UseReadySemaphore ifTrue: [PlayerProcess := [SoundPlayer playLoop] newProcess] ifFalse: [PlayerProcess := [SoundPlayer oldStylePlayLoop] newProcess]. UseReverb ifTrue: [self startReverb]. + PlayerProcess + name: 'Sound Player (', ActiveSounds size asString, ')'; + priority: Processor userInterruptPriority; + resume! - PlayerProcess priority: Processor userInterruptPriority. - PlayerProcess resume! |
Free forum by Nabble | Edit this page |