B
Brice
Hello
I am new to python and I am really a bad programmer...
As a linux user, I use quodlibet for listening to music. Quodlibet
allows me to write plugins in python.
I am trying to write a plugins to burn a playlist by using cdrecord, and
this either in dao or tao mode.
The basic of this plugin is the following:
- make a temp directory
- convert the songs in my playlist into wave files in the temp directory
using mplayer and renaming them with 3 digits number so that the order
of my playlist is conserved
- normalize the wave files
- burn the cd
- delete the temp directory.
At the time, I have a working solution (not fully developped by
myself...), but in this solution os.system is used to start the
different shell commands and the commands do not have a & at the end.
Therefore during the whole execution of the plugin, quodlibet is not
responsive.
What I would like to is program the whole such that I can use & at the
end of the shell commands and each command to be executed one after the
other! (I tried to put & simply at the end of each shell command with
the result that each where started at the same time)
Here is the plugin:
###########################################################################
import os, string, re
import util
import sys
import shutil
from qltk import ErrorMessage
from shutil import copy
from plugins.songsmenu import SongsMenuPlugin
class _Base(SongsMenuPlugin):
PLUGIN_ICON = 'gtk-cdrom'
PLUGIN_VERSION = '0.1'
# XXX : pb potentiel: si deux utilisateurs utilisent ce plugin
# en meme temps, ils vont se marcher sur les pieds...
destdir = "/tmp/cd_QL"
convert_cmd = "mplayer -ao pcm:file=%(dest)s %(source)s"
normalize_cmd = "normalize -m %(path)s/*.wav"
burn_cmd = "cdrecord -v -eject %(flags)s -pad -audio
%(path)s/*.wav"
burn_flags = ''
def plugin_songs(self, songs):
if not self.check_mplayer():
return
self.setup()
try:
try:
for num, song in enumerate(songs):
self.makewav(song, num)
self.normalize()
self.burn()
except Exception, e:
ErrorMessage(
None,
"Unknown error",
"An error occured while processing files:\n%s." % e
).run()
finally:
self.teardown()
def check_mplayer(self):
if not util.iscommand("mplayer"):
ErrorMessage(
None,
"Mplayer not found",
"Mplayer is used to convert files in wave files."
).run()
return False
return True
def setup(self):
os.mkdir(self.destdir)
def makewav(self, song, num):
source = song['~filename'].replace(" ", "\
").replace("'","\\'")
dest = os.path.join(self.destdir, "%03d.wav" % num)
cmd = self.convert_cmd % dict(source=source, dest=dest)
os.system(cmd)
def normalize(self):
os.system(self.normalize_cmd % dict(path=self.destdir))
def burn(self):
flags = self.burn_flags
cmd = self.burn_cmd % dict(path=self.destdir, flags=flags)
os.system(cmd)
def teardown(self):
shutil.rmtree(self.destdir)
class DAO(_Base):
PLUGIN_ID = 'Burn CD w/o blanks'
PLUGIN_NAME = _('Burn CD w/o blanks')
PLUGIN_DESC = 'Burn CD w/o blanks.'
burn_flags = '-dao'
class TAO(_Base):
PLUGIN_ID = 'Burn CD with blanks'
PLUGIN_NAME = _('Burn CD with blanks')
PLUGIN_DESC = 'Burn CD with blanks.'
# on exporte seulement ces deux classes
__all__ = ['DAO', 'TAO']
#############################################################################
and yeah, please consider that I am new to python and do understand
something to the thread!
Thanks in advance
I am new to python and I am really a bad programmer...
As a linux user, I use quodlibet for listening to music. Quodlibet
allows me to write plugins in python.
I am trying to write a plugins to burn a playlist by using cdrecord, and
this either in dao or tao mode.
The basic of this plugin is the following:
- make a temp directory
- convert the songs in my playlist into wave files in the temp directory
using mplayer and renaming them with 3 digits number so that the order
of my playlist is conserved
- normalize the wave files
- burn the cd
- delete the temp directory.
At the time, I have a working solution (not fully developped by
myself...), but in this solution os.system is used to start the
different shell commands and the commands do not have a & at the end.
Therefore during the whole execution of the plugin, quodlibet is not
responsive.
What I would like to is program the whole such that I can use & at the
end of the shell commands and each command to be executed one after the
other! (I tried to put & simply at the end of each shell command with
the result that each where started at the same time)
Here is the plugin:
###########################################################################
import os, string, re
import util
import sys
import shutil
from qltk import ErrorMessage
from shutil import copy
from plugins.songsmenu import SongsMenuPlugin
class _Base(SongsMenuPlugin):
PLUGIN_ICON = 'gtk-cdrom'
PLUGIN_VERSION = '0.1'
# XXX : pb potentiel: si deux utilisateurs utilisent ce plugin
# en meme temps, ils vont se marcher sur les pieds...
destdir = "/tmp/cd_QL"
convert_cmd = "mplayer -ao pcm:file=%(dest)s %(source)s"
normalize_cmd = "normalize -m %(path)s/*.wav"
burn_cmd = "cdrecord -v -eject %(flags)s -pad -audio
%(path)s/*.wav"
burn_flags = ''
def plugin_songs(self, songs):
if not self.check_mplayer():
return
self.setup()
try:
try:
for num, song in enumerate(songs):
self.makewav(song, num)
self.normalize()
self.burn()
except Exception, e:
ErrorMessage(
None,
"Unknown error",
"An error occured while processing files:\n%s." % e
).run()
finally:
self.teardown()
def check_mplayer(self):
if not util.iscommand("mplayer"):
ErrorMessage(
None,
"Mplayer not found",
"Mplayer is used to convert files in wave files."
).run()
return False
return True
def setup(self):
os.mkdir(self.destdir)
def makewav(self, song, num):
source = song['~filename'].replace(" ", "\
").replace("'","\\'")
dest = os.path.join(self.destdir, "%03d.wav" % num)
cmd = self.convert_cmd % dict(source=source, dest=dest)
os.system(cmd)
def normalize(self):
os.system(self.normalize_cmd % dict(path=self.destdir))
def burn(self):
flags = self.burn_flags
cmd = self.burn_cmd % dict(path=self.destdir, flags=flags)
os.system(cmd)
def teardown(self):
shutil.rmtree(self.destdir)
class DAO(_Base):
PLUGIN_ID = 'Burn CD w/o blanks'
PLUGIN_NAME = _('Burn CD w/o blanks')
PLUGIN_DESC = 'Burn CD w/o blanks.'
burn_flags = '-dao'
class TAO(_Base):
PLUGIN_ID = 'Burn CD with blanks'
PLUGIN_NAME = _('Burn CD with blanks')
PLUGIN_DESC = 'Burn CD with blanks.'
# on exporte seulement ces deux classes
__all__ = ['DAO', 'TAO']
#############################################################################
and yeah, please consider that I am new to python and do understand
something to the thread!
Thanks in advance