projects
/
minwii.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
log++ qq bugfixes.
[minwii.git]
/
src
/
app
/
synth.py
diff --git
a/src/app/synth.py
b/src/app/synth.py
index
a2a0244
..
9fb4a3e
100755
(executable)
--- a/
src/app/synth.py
+++ b/
src/app/synth.py
@@
-7,22
+7,43
@@
$URL$
"""
from os.path import realpath, sep, exists
from fluidsynth import Synth as FSynth
"""
from os.path import realpath, sep, exists
from fluidsynth import Synth as FSynth
+from log import console
class Synth(FSynth) :
class Synth(FSynth) :
+ """
+ Interface fluidsynth avec les adaptations suivantes :
+ - la soundfont FluidR3_GM.sf2 est chargée par défaut
+ - le constructeur démarre le synthé
+ - octaviation
+ """
- def __init__(self, gain=0.2, samplerate=44100) :
+ def __init__(self, gain=0.2, samplerate=44100
, sfPath=''
) :
FSynth.__init__(self, gain=gain, samplerate=samplerate)
FSynth.__init__(self, gain=gain, samplerate=samplerate)
- sfPath = realpath(__file__).split(sep)
- sfPath = sfPath[:-1]
- sfPath.append('soundfonts')
+ if not sfPath :
+ sfPath = realpath(__file__).split(sep)
+ sfPath = sfPath[:-1]
+ sfPath.append('soundfonts')
+
+ sfPath.append('FluidR3_GM.sf2')
+ sfPath = sep.join(sfPath)
- sfPath.append('FluidR3_GM.sf2')
- sfPath = sep.join(sfPath)
assert exists(sfPath)
self.start()
self.fsid = self.sfload(sfPath)
assert exists(sfPath)
self.start()
self.fsid = self.sfload(sfPath)
+ self._octaveAjusts = {}
+ console.info('démarrage du synthétiseur\nsoundfont : %s', sfPath)
+
+ def __del__(self) :
+ console.info('arrêt du synthétiseur.')
+ self.delete()
+
+ def adjust_octave(self, chan, octave) :
+ '''
+ Abaisse ou élève les notes de n octave
+ '''
+ self._octaveAjusts[chan] = octave
def sfunload(self, update_midi_preset=0):
FSynth.sfunload(self, self.fsid, update_midi_preset=update_midi_preset)
def sfunload(self, update_midi_preset=0):
FSynth.sfunload(self, self.fsid, update_midi_preset=update_midi_preset)
@@
-33,8
+54,10
@@
class Synth(FSynth) :
def sfont_select(self, chan):
FSynth.sfont_select(self, chan, self.fsid)
def sfont_select(self, chan):
FSynth.sfont_select(self, chan, self.fsid)
-
-
-
-if __name__ == '__main__' :
- initsynth()
\ No newline at end of file
+ def noteon(self, chan, key, vel):
+ key = key + self._octaveAjusts.get(chan, 0) * 12
+ FSynth.noteon(self, chan, key, vel)
+
+ def noteoff(self, chan, key) :
+ key = key + self._octaveAjusts.get(chan, 0) * 12
+ FSynth.noteoff(self, chan, key)