Weekly status update July 4th to 10th
this week I started working on MidiSpanners. That is the functionality I described last week. With this you can let any spanner send midi information. All main modes (switch, continuous, note on event) have been realized. But currently there is no GUI. I also tested this with hairpins, pedal and slurs. Lasconic also proposed we could have a configuration file (most likely in xml) for sounds that would set good defaults for these spanners and would also add MidiActions that would make sense. Currently I'm thinking what would be the best way to implement such a system since I like the idea. I have to mention it is somewhat similar to what was proposed on the mailing list and the forum some time ago. But now there is an actual use case for this!
I think I would implement that in the way that there is a separate class for the configuration and it is loaded when creating instruments and the new instruments getting information from that configuration object if they match the match identifier of that configuration (which might be a instrument id or instrument group or similar). But that idea is not really solved out - so I'm happy to hear ideas from you!
Also the usual amount of opcodes made it into the master branch. The whole <control>-section is now supported including set_ccN. I implemented it the way sforzando does. In sforzando set_ccN gets overwritten by a newer definition but everything gets summed up and not deleted after a new <control>-section. This is also what happens with #defines in sforzando as well - but in the master branch defines get lost after a new <control>. There were some other bugs in my implementation but they got fixed before they made it into the master branch.
I also worked on #include to get the Aria FreeSounds working. (using #defines to set the $sample_dir - more on this in a separate post) I also added the possibility of having defines with white spaces (that is not supported by sforzando) if you use quotes around them. I also found out that linuxsampler claims to be supporting #define but actually it doesn't (at least in 2.0).
With "garritan-jazz piano lite" I also found a bug in my envelope implementation which leads to the problem that notes that are sustained (by the pedal) during the attack phase aren't stopped when releasing the pedal. I also found some unwanted behavior with the MidiActions program change. For Zerberus the note on which MidiAction is placed doesn't get played - in Fluidsynth it still plays the old sound. Just moving the change one tick in front solves this problem.
Also the implementation for the <global>-section is almost complete. I also investigated its behavior in sforzando. So I think by next week almost all of the meta-opcodes will be support and so you can probably get almost ever sfz to load (even some functionality might not work). This will most likely lead to opcodes that are important to make these sounds sound nicer! (Already have something in mind for "garritan-jazz piano lite")