Solved, somewhat. It appears the issue was that it takes a fraction of a second to load and process all the samples. Meanwhile Csound is already strarting to process the table opcode or (l)oscil3 so they are unable to find the ftables. By using gi ftsamplebank and starting the instr a second later it works fine.
Perhaps it would be better if the opcode halted Csound processing until the samples were loaded provided ftsample bank is either global or comes before any tables or oscillators but knowing next nothing about the way Csound processes (aside from being somewhat linear) that may not be practical from a programming perspective. And starting the instruments a second later is not really an inconvenience either.
I also realized it was probably silly and unnecessary to use the table3 opcode since loscil3 is already capable of both reading the table and cubic interpolation on it's own.
Essentially I want to be able to morph between the samples like using a wavetable (Serum, Massive etc.). I thought perhaps
ftmorf would be the easiest approach - would GEN 10 still be advised for this as in the manual example or should I consider using GEN01 still? Or perhaps a mixing GEN like GEN18 or 32? The single cycle wav files I'm using are not power of 2, but each set is equal size such as 600 points each.
From what you’ve described with morphing lots of wavetables, I’d look at ftsamplebank and read them all with an opcode like tabmorphak.
Are you using Csound in a single thread? or do you have the -j option set?
Sounds like a good idea, Dave, thank you. And I also generally name my instruments as well.
Do you put your global variables in that as well, or are you using it more to give a slight bit of extra time for Csound to “pre-process” (if that’s the right term)?
I generally initialize my globals preceding the instrument definitions, unless I need to use code to fill up an array or something like that. Yes, I usually give it 0.5 or 1 seconds to run before other instruments begin, even when it does really need it.
The “-j” flag is listed alphabetically in the “Csound command” line section of the manual, and also in the “Command-line flags (by Category)” section, under the heading “Performance Configuration and Control”, and of course it’s also included in the -h/–help output on the command line. The -j flag takes a numeric option to specify how many threads Csound should use.