Weekly status update June 20th to 26th

Posted 7 years ago

Hi,
this week is the midterm week. So half the work should be done. I think we're pretty good. All things I wanted to do to Fluidsynth are there and working and just need a little polishing :) And we're doing very good on Zerberus. I think we would be able to ditch Fluidsynth by the end of this GSoC in favor of Zerberus. That would mean a lot more flexibility for soundfont designers and ease of use for users to tweak the soundfonts. Also the features sfz provides are much bigger than what is possible with sf2. So we could tweak the parameters for legato or crescendo on a per instrument basis to have a much better sound. (Using the same MIDI)

Before I explain everything what has been done - very good news are that everything described here is in the master branch and so you can just grab a nightly build and try the new features by yourself!

So what happened this week? I started off by showing you how Zerberus sounds now compared to 2.0.3 - and with a little help of my good friend Ludwig van Beethoven I found also some bugs in the current implementation which caused clicking. Both were related to the release envelope. First one was that I didn't calculate the start value of the release envelope on note off event - but instead always used the sustain level as a start value. That is a problem if the sound is turned off before reaching that level. The other bug was introduced by fixing the first one. The method that turns off voices (based on note off) didn't check whether the voice was already turned off - and turned it off again - now the start value of the release envelope gets recalculated with the value it is currently having - and if it isn't at that start at this moment the start gets lowered to the current value but the current value in time is not the start and hence dropping down - and we have a click. So now I'm just turning off voices that haven't been turned off before!

We also noticed that some opcodes we thought Zerberus would already support are actually just read in by the sfz-reader but didn't affect anything. So I went through all opcodes and now there is a sheet that represents the actual status for zerberus. Yes means that it was supported before and Done means that I implemented it during GSoC.

I added several opcodes this week including:

  • loccN/hiccN (before it just used locc64) - used to play sample just if there was a certain CC value before
  • lorand/hirand - to play a sample at random times (there is a random generator and if it falls inside the values of the sample the sample gets played)
  • seq_length, seq_position (they existed before but wouldn't work) - to have a round robin for samples
  • pitch_keytrack - determines how much the pitch changes per key (used example for the hammer noise sound in salamander piano)

Furthermore the trigger=release didn't work before and it does now! There is also maybe a problem with loop=oneshoot in which it will not leave the sustain envelope - it is likely that I will handle it the same way as with trigger=release.

In general I focus on opcodes that are used by popular soundfonts! So feel free to tell me what you would like to have implemented!

Next opcodes that will be implemented are on_loccN/on_hiccN (this is used for the pedal sample in salamander piano), ampeg_vel2* (these are used to change the amp envelopes based on velocity), rt_decay (used by salamander for trigger=release damping) and probably most of the control-structure.

I also enhanced the Zerberus GUI so that is now very easy to insert several sfz files at once. You can just select multiple sfz and click "Load".


Comments

Regarding the UI enhancement, I'm seeing the Load/Cancel buttons stacked on top of each other, each stretched to the window width. Shouldn't they be beside each other, on one line?