Almost-Goodie ( Was: Re: Can I play a .MP3 with Squeak? )

Brent Vukmer bvukmer at blackboard.com
Thu Nov 21 17:17:30 UTC 2002


The attached changeset registers the MPEGMoviePlayerMorph with the 
FileList.  If you choose "play" on an .mp3 file, it will open an 
MPEGMoviePlayerMorph and start playing the file.

Unhappily the MPEGMoviePlayerMorph and its constituent MPEGDisplayMorph 
don't interact correctly, the way I set them up.  The "Rewind" "Stop" 
"<" and ">" buttons don't appear to send commands to the 
MPEGDisplayMorph I set up.

Help!  What did I do wrong?

Jason Dufair wrote:

> Richard A. O'Keefe wrote:
>
>> 1.  Given that I can open movies and MIDI files from a FileList,
>>    I was expecting to play MP3s the same way.  I would never have
>>    guessed this.
>>
> This would indeed be nice.  Any changesets would be welcome.
>
>> 2.  I tried this, and the result was "Error: a primitive has failed.:
>>    The primitive that failed was MPEGFile class>>isFileValidMPEG.
>>    This was in Squeak 3.2 #4952, and I have no independent way of
>>    checking whether the file _is_ a valid .mp3 or not, but it's
>>    certainly not plain text, whatever it is.
>>
>>    The SqueakDebug.log didn't have anything illuminating in it; the
>>    path to the file is right, and all it says is that primFileValidMPEG
>>    failed, not _why_ it failed.
>>
> I'm not sure about Macintosh, but on Windows and Linux, I believe the 
> plugin got rolled into the VM on some of the latest compiles.  If you 
> have an old plugin lying around, it may choke on it.  I had this 
> problem once and just deleted the plugin.
>
-------------- next part --------------
'From Squeak3.4alpha of ''11 November 2002'' [latest update: #5125] on 21 November 2002 at 12:10:58 pm'!

!MPEGMoviePlayerMorph methodsFor: '*Tools-FileList-accessing' stamp: 'bkv 11/21/2002 11:24'!
moviePlayer 
    "Enables this Morph to offer services with the FileList."
     ^moviePlayer
! !

!MPEGMoviePlayerMorph methodsFor: '*Tools-FileList-accessing' stamp: 'bkv 11/21/2002 11:12'!
moviePlayer: anMPEGDisplayMorph
    "Enables this Morph to register services with the FileList."
     moviePlayer _ anMPEGDisplayMorph.
! !


!MPEGMoviePlayerMorph class methodsFor: '*Tools-FileList-registering' stamp: 'bkv 11/21/2002 11:18'!
fileReaderServicesForFile: fullName suffix: suffix 

	|  selectedServices |
	selectedServices _ OrderedCollection new.
	((MPEGPlayer registeredVideoFileSuffixes includes: suffix ) or: [ MPEGPlayer registeredAudioFileSuffixes includes: suffix ] )
		ifTrue: [ ^self services ].
	^ selectedServices! !

!MPEGMoviePlayerMorph class methodsFor: '*Tools-FileList-registering' stamp: 'bkv 11/21/2002 11:19'!
initialize 
    "MPEGMoviePlayerMorph initialize."

    FileList registerFileReader: self.! !

!MPEGMoviePlayerMorph class methodsFor: '*Tools-FileList-registering' stamp: 'bkv 11/21/2002 12:02'!
openOn: aFileName

     | mpegPlayer wrapper |
     
     wrapper _ self new.
     mpegPlayer _ MPEGDisplayMorph new.
     wrapper moviePlayer: mpegPlayer.
     mpegPlayer openFileNamed: aFileName. 
     ^wrapper! !

!MPEGMoviePlayerMorph class methodsFor: '*Tools-FileList-registering' stamp: 'bkv 11/21/2002 12:02'!
playFile: aFileName

     | mpegPlayer wrapper |
     
     wrapper _ self  openOn: aFileName.
     mpegPlayer _ wrapper moviePlayer.
     mpegPlayer startPlaying. 
     wrapper openInWorld.
     ^wrapper! !

!MPEGMoviePlayerMorph class methodsFor: '*Tools-FileList-registering' stamp: 'bkv 11/21/2002 11:47'!
serviceOpenInMPEGPlayer
	"Answer a service for opening in a MPEG player"

	^ SimpleServiceEntry
		provider: self
		label: 'open in MPEG player'
		selector: #openOn: 
		description: 'open in MPEG player'
		buttonLabel: 'open'! !

!MPEGMoviePlayerMorph class methodsFor: '*Tools-FileList-registering' stamp: 'bkv 11/21/2002 11:47'!
servicePlayInMPEGPlayer
	"Answer a service for opening in a MPEG player"

	^ SimpleServiceEntry
		provider: self
		label: 'play in MPEG player'
		selector: #playFile: 
		description: 'play in MPEG player'
		buttonLabel: 'play'! !

!MPEGMoviePlayerMorph class methodsFor: '*Tools-FileList-registering' stamp: 'bkv 11/21/2002 12:02'!
services 

     ^OrderedCollection with: self servicePlayInMPEGPlayer
! !


!MPEGPlayer class methodsFor: '*Tools-FileList-file suffixes' stamp: 'bkv 11/21/2002 10:48'!
registeredAudioFileSuffixes
    "Answer the file extensions for which MPEGPlayer registers video services with FileList."
     "MPEGPlayer registeredVideoFileSuffixes"

     ^{ 'mp3'.  }

	! !

!MPEGPlayer class methodsFor: '*Tools-FileList-file suffixes' stamp: 'bkv 11/21/2002 11:14'!
registeredVideoFileSuffixes
    "Answer the file extensions for which MPEGPlayer registers video services with FileList."
     "MPEGPlayer registeredVideoFileSuffixes"

     ^{ 'mpg'. 'mpeg'. 'jmv'. }

	! !

MPEGPlayer class removeSelector: #fileReaderServicesForFile:suffix:!
MPEGPlayer class removeSelector: #initialize!
MPEGPlayer class removeSelector: #registeredFileSuffixes!
MPEGPlayer class removeSelector: #serviceOpenInMPEGPlayer!
MPEGPlayer class removeSelector: #services!

!MPEGPlayer class reorganize!
('*Tools-FileList-file suffixes' registeredAudioFileSuffixes registeredVideoFileSuffixes)
('instance creation' playFile: playFile:onForm: playFile:onMorph:)
!

MPEGMoviePlayerMorph initialize!

!MPEGMoviePlayerMorph reorganize!
('*Tools-FileList-accessing' moviePlayer moviePlayer:)
('initialization' initialize)
('drawing' drawOn:)
('stepping' step stepTime)
('private' addButtonRow addPositionSlider addVolumeSlider buttonFillStyle buttonName:action: moviePlayerFillStyle)
('menu' invokeMenu)
!



More information about the Squeak-dev mailing list