X-Git-Url: https://scm.cri.minesparis.psl.eu/git/minwii.git/blobdiff_plain/310114ab3edb1a0641f39d428cbbf5039fe1a0aa..0fd6f300332426a83063d3c253764bde52d70974:/src/songs/synth.py?ds=sidebyside diff --git a/src/songs/synth.py b/src/songs/synth.py deleted file mode 100755 index 0832b90..0000000 --- a/src/songs/synth.py +++ /dev/null @@ -1,86 +0,0 @@ -# -*- coding: utf-8 -*- -""" -module pour jouer les chansons sur le fluidsynth - -$Id$ -$URL$ -""" -import fluidsynth -from app.musicxml import musicXml2Song -from time import sleep -import sys -from optparse import OptionParser - -class SongPlayer(object) : - """ Lecteur audio d'une chanson """ - - def __init__(self, part, soundFont, quarterNoteDuration=400, bank=0, preset=0) : - self.part = part - self.quarterNoteDuration = quarterNoteDuration - self.fs = fs = fluidsynth.Synth() - fs.start() - self.fsid = fsid = fs.sfload(soundFont) - fs.program_select(0, fsid, bank, preset) - - def __del__(self) : - self.fs.delete() - - def play(self) : - fs = self.fs - for note, verseIndex in self.part.iterNotes(indefinitely=False) : - try : - print note, note.lyrics[verseIndex] - except IndexError : - print note, '?' - fs.noteon(0, note.midi, 64) - duration = note.duration * self.quarterNoteDuration / 1000 - sleep(duration) - fs.noteoff(0, note.midi) - - - - - -def main() : - usage = "%prog musicXmlFile.xml [options]" - op = OptionParser(usage) - op.add_option("-i", "--part-index", dest="partIndex" - , default = 0 - , help = "Index de la partie qui contient le champ.") - - op.add_option("-c", '--no-chorus', dest='autoDetectChorus' - , action="store_false" - , default = True - , help = "désactive la détection du refrain") - - op.add_option("-q", "--quarter-note-duration", dest="quarterNoteDuration" - , type="int", default=400 - , help="Durée de la noire [default] (en millisecondes)" - ) - - op.add_option("-b", "--bank", dest="bank" - , type="int", default="0" - , help="midi bank [default]") - - op.add_option("-p", "--preset", dest="preset" - , type="int", default="0" - , help="midi preset [default]") - - options, args = op.parse_args() - - if len(args) != 1 : - raise SystemExit(op.format_help()) - - song = musicXml2Song(args[0], - partIndex=options.partIndex, - autoDetectChorus=options.autoDetectChorus) - sp = SongPlayer(song, - '/Users/pinbe/dev/minwii/fluid-soundfont-3.1/FluidR3_GM.sf2', - quarterNoteDuration=options.quarterNoteDuration, - bank = options.bank, - preset = options.preset) - sp.play() - - -if __name__ == '__main__' : - sys.exit(main())