Hi Ian and all,
I sure missed a lot of updates! Most of what I have to say here has to do with sFZ playback. It's a lot so I don't want to sound pushy or anything, but since I use Sforzando for my sFz playback, and that's one of the best free players now, I thought I'd mention some things. I'm not trying to compare Bass to Sforzando, just trying to make its SFZ support better since I do want to use it in all its glory.
First, I was really surprised to read that SFZ playback was supported. it hit me out of nowhere. I haven't done a lot of testing with it, but there are a few suggestions I have.
First off, I am largely in favor of the SFZ filter and pitch envelopes as I think they have a much wider range of control than they would in the sound font equivalent. For example, if I want to put a really fast attack or decay on a filter, the sound font wouldn't be able to approach those really fast bwaw type of filter sounds with the Bass engine anyway. At least they didn't when I last tried it which was midi Rev 12. but Bass will let you do it in an SFZ. I tested it. Also, panning with CC10 appears to be a bit problematic, both with sound fonts and sFZ playback. Most synths, when you adjust the pan, appear to adjust the balance of the output to that channel. But Bass seems to do soft panning, so if a sound is panned to the right by default, panning left just pushes it toward the center. This is a problem with any sound fonts that have stereo samples as you have to specify L and R samples separately, so there's no way around the fact that panning for those samples can become very restrictive, depending on how widely your l and r samples are spaced out. With SFZ, you can work around this by calling one stereo sample, such as piano-c4.wav, and it works. However if you had piano-c4l.wav and piano-c4r.wav and panned them out with opcodes, it would still exhibit this old behavior of just shifting the pan values and not adjusting the actual balance, if that makes sense. Is there a possibility of correcting this at some point? It would really open up some midi files to sound more like they were intended.
Also, while we're on opcodes, there are just a few opcodes I could see myself using and that are pretty commonplace: trigger=attack/release, reverb properties such as size and damping (the things that Bass already supports with sysex), and I'm not sure if these are supported but restricting the controller ranges for notes, such as having samples for pedal up versus pedal down and linking them to the value of control 64. There are loads of things like that i use in Sforzando. And also, like you said it wouldn't be all that common to actually need separate filter and pitch control, but I can think of cases where it would be useful.
One more thing and I'll be done for now. When I heard that SFZ support was coming in, I thought of creating a collection of sFZ instruments that I could use to override some patches of sf2 files I have. So I was wondering if there was such a thing as a way to write a text file that would reference sfz files and call them to specific program and bank, similar to how some sound font editors export presets in a text file. Something like:
000,000,Grand Piano.sfz
Where the first column is bank, second column is program, third column is relative path to the sfz file. For all I know this may be already possible and i haven't found it yet, but I'm throwing it out there. It's all hypothetical at this point. It would be a quicker way to get around the single instrument limitation of sFZ than setting it up in the midi config dialog, you could instead load a sflist file and it would be right there. The only problem is, if some SFZ files shared the same sample references, we wouldn't want them mistakenly being loaded twice, so we'd have to have a path checking system to make sure each sample called is only being loaded once. Which probably wouldn't be too hard to do, but I'm no programmer!
Hopefully I didn't overwhelm everyone here in the forum! This is great work so far and I'm loving it!