[Freepats] [LAU] Steinway_IMIS2 soundfont
Marcos Guglielmetti
marcospcmusica at gmail.com
Sun Jul 8 05:02:02 EST 2007
El Jueves, 5 de Julio de 2007 12:35, Ben Collver escribió:
| Roberto Gordo Saez wrote:
| > On Thu, Jul 05, 2007 at 01:13:02AM +0200, Marcos Guglielmetti wrote:
| >> | I also like the fact that it's long samples without
| >> | the need for looping. However it seems that loops are on, although
| >> | you have to play really long notes to hear it :-)
| >>
| >> Loops are on? Oh shit! you are right! :P
| >
| > It seems that pysf has added the loops. I don't know why. Ben Collver is
| > pysf's author and he is usually on this list, maybe he could help us.
|
| When converting from XML to SF2, pysf enabled looping if it found loop
| points. The original soundfont file had loop points, and the new
| soundfont file had looping enabled. Here is the culprit code. if
| Loopstart != 0 or Loopend != 0:
| LoopType = 3 # Release
| else:
| LoopType = 0 # None
|
| I've updated my working copy of pysf.py to fix this issue. You can get it
| at the following URL.
| http://terrorpin.net/~ben/docs/alt/music/soundfont/pysf-wip/pysf.py
|
| If you want to enable looping you will need to add a new key to each zone.
| <sampleModes>3_LoopRelease</sampleModes>
|
| Cheers,
|
| Ben
Very thanks!
I just want to say the pysf.py is one of the most incredible ideas that
someone could ever have.
Congrats: pysf it's fantastic and it really help us
Cheers,
|
| p.s. Here is what changed.
|
| --- pysf.py.orig 2007-03-10 16:14:09.000000000 -0800
| +++ pysf.py 2007-07-05 08:27:40.000000000 -0700
| @@ -608,7 +608,11 @@
| else:
| ZDict[ustr(Name)] = WAmount
| elif SfGenOper == 54:
| - pass
| + if Zt.KeyN == 'preset':
| + logging.warn('ignoring sampleModes in
| preset') + else:
| + ZDict[ustr(Name)] = Def(Val(SfSampleModes,
| + WAmount), "0_LoopNone")
| else:
| Generators.append({u'comment': Name,
| u'hexAmount': "0x%x" % WAmount, u'oper':
| SfGenOper} )
| @@ -917,12 +921,21 @@
| Loopend = Wavetable[u'loop'][u'end']
| except (IndexError, KeyError):
| (Loopstart, Loopend) = (0, 0)
| - if Loopstart != 0 or Loopend != 0:
| - LoopType = 3 # Release
| + SampleModesStr = Def(Val(Zone, u'sampleModes'),
| "0_LoopNone") + if SampleModesStr == "0_LoopNone":
| + SampleModes = 0
| + elif SampleModesStr == "1_LoopContinuous":
| + SampleModes = 1
| + elif SampleModesStr == "2_LoopReserved":
| + SampleModes = 2
| + elif SampleModesStr == "3_LoopRelease":
| + SampleModes = 3
| else:
| - LoopType = 0 # None
| + logging.warn("%s %d unknown sampleModes %s" % (
| + Zt.KeyN, Order + 1, SampleModesStr))
| + SampleModes = 0
| IopsCount = IopsCount + 1
| - GenD = GenD + struct.pack('<HH', 54, LoopType)
| + GenD = GenD + struct.pack('<HH', 54, SampleModes)
| EnvDelay = SfLog(Zone, u'delayVolEnv', SHOOBVAL)
| if EnvDelay > SHOOBVAL:
| IopsCount = IopsCount + 1
| @@ -1089,6 +1102,10 @@
| 13: 'Channel Pressure',
| 14: 'Pitch Wheel',
| 16: 'Pitch Wheel Sensitivity'}
| +SfSampleModes = {0: '0_LoopNone',
| + 1: '1_LoopContinuous',
| + 2: '2_LoopReserved',
| + 3: '3_LoopRelease'}
| SfModTypeDescs = ('Linear', 'Concave', 'Convex', 'Switch')
| XmlHeaderStr = u'<sf:pysf version="' + ustr(PysfVersion) + u'"
| xmlns:sf="http:/ /terrorpin.net/~ben/docs/alt/music/soundfont/pysf"
| xmlns:xsi="http://www.w3.org/ 2001/XMLSchema-instance"
| xsi:schemaLocation="http://terrorpin.net/~ben/docs/alt/
| music/soundfont/pysf pysf.xsd">'
| XmlRootStr = XmlHeaderStr + u'</sf:pysf>'
| _______________________________________________
| Freepats mailing list
| Freepats at opensrc.org
| http://opensrc.org/listinfo/freepats
--
`&'
# Marcos Guglielmetti, co-director de
# Musix GNU+Linux, 100% Software Libre para artistas
_#_ http://www.musix.org.ar
(#)
/ O \ + archivos: ftp://musix.ourproject.org/pub/musix
( === ) Ecología: http://autosus.wordpress.com
`---' Personal: http://marcospcmusica.wordpress.com
You see things; and you say 'Why?';
But I dream things that never were;
and I say 'Why not?' - George Bernard Shaw
More information about the Freepats
mailing list