Update of /cvsroot/pythoncard/PythonCard/samples/mp3player
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv29478
Added Files:
.cvsignore mp3player.py mp3player.rsrc.py readme.txt
Log Message:
added mp3player sample
--- NEW FILE: mp3player.py ---
#!/usr/bin/python
"""
__version__ = "$Revision: 1.1 $"
__date__ = "$Date: 2004/08/03 17:09:19 $"
"""
from PythonCard import dialog, model
import os
class MyBackground(model.Background):
def on_initialize(self, event):
# KEA 2004-08-03
# this is only going to work on the Mac
# so it will need to be generalized later
try:
home = os.environ['HOME']
self.buildList(os.path.join(home, 'Music/iTunes/iTunes Music'))
except:
pass
# http://www.pygame.org/docs/ref/Movie.html
def on_load_mouseClick(self, event):
filename = self.components.filename.text
path, filename = os.path.split(filename)
wildcard = "MP3 files (*.mp3)|*.mp3"
result = dialog.openFileDialog(self, 'Open', path, filename, wildcard )
if result['accepted']:
path = result['paths'][0]
self.components.filename.text = path
def on_play_mouseClick(self, event):
filename = self.components.filename.text
## NOTE WE DON'T IMPORT PYGAME UNTIL NOW. Don't put "import pygame" at the top of the file.
import pygame
self.movie = pygame.movie.Movie(filename)
self.movie.play()
# it was a good idea at first, but mixer simply doesn't work, at least on the Mac
## assert os.path.exists(filename)
## from pygame import mixer
## mixer.init(44100, 2)
## mixer.music.load(filename)
## mixer.music.play()
## print mixer.music.get_busy()
## #time.sleep(5)
## #mixer.music.stop()
def on_pause_mouseClick(self, event):
try:
self.movie.pause()
except:
pass
def on_stop_mouseClick(self, event):
try:
self.movie.stop()
self.movie.rewind()
except:
pass
def buildList(self, path):
mp3s = []
names = []
for root, dirs, files in os.walk(path):
for name in files:
if name.endswith('.mp3'):
mp3s.append((root, name))
names.append(name)
self.mp3s = mp3s
self.components.mp3s.items = names
def on_mp3s_select(self, event):
sel = event.target.selection
self.components.filename.text = os.path.join(self.mp3s[sel][0], self.mp3s[sel][1])
if __name__ == '__main__':
app = model.Application(MyBackground)
app.MainLoop()
--- NEW FILE: .cvsignore ---
.cvsignore
*.pyc
*.log
.DS_Store
--- NEW FILE: mp3player.rsrc.py ---
{'application':{'type':'Application',
'name':'Template',
'backgrounds': [
{'type':'Background',
'name':'bgTemplate',
'title':'simple mp3player',
'size':(404, 362),
'menubar': {'type':'MenuBar',
'menus': [
{'type':'Menu',
'name':'menuFile',
'label':'&File',
'items': [
{'type':'MenuItem',
'name':'menuFileExit',
'label':'E&xit',
'command':'exit',
},
]
},
]
},
'components': [
{'type':'List',
'name':'mp3s',
'position':(10, 10),
'size':(384, 168),
'items':[],
},
{'type':'Button',
'name':'pause',
'position':(190, 310),
'size':(109, -1),
'label':'Pause/Resume',
},
{'type':'TextArea',
'name':'filename',
'position':(15, 190),
'size':(370, 100),
},
{'type':'Button',
'name':'load',
'position':(15, 310),
'size':(74, -1),
'label':'Load',
},
{'type':'Button',
'name':'play',
'position':(105, 310),
'size':(74, -1),
'label':'Play',
},
{'type':'Button',
'name':'stop',
'position':(310, 310),
'size':(74, -1),
'label':'Stop',
},
] # end components
} # end background
] # end backgrounds
} }
--- NEW FILE: readme.txt ---
mp3player is a quick sample I wrote during one of the VanPy Workshop '04 presentations. mp3player uses the Movie class of PyGame to do all the real work.
It might make more sense to just roll MP3 support into the PythonCard.sound module except that it will require PyGame to work and Movie has a lot more playback options than the WAV file playback in wxPython.
|