Long context, sorry > > Do let me see if I get this right: > > > > Host allocates the VVID pool (perhaps a bitmask or some other way > > of indicating usage) > > Host wants to send a VOICE_ON: > > allocates an unused VVID > > sends VOICE_ON with that VVID > > when it sends a VOICE_OFF or receives a VOICE_OFF it can mark that > > VVID as unused again. > > It seems like this would be a host global matter... What would be the > point in that? All you need is a way to address Voices within *one > Channel* - you don't have to worry about other Plugins, or even other > Channels on the same Plugin. (For table based implementations, > plugins have one table per Channel, and for tag/search > implementations, you just tag Voices with VVIDs *and* Channel > indices.) > > > Plugin wants to send a VOICE_ON: > > calls host->get_vvids(32) > > host allocates it 32 VVIDs > > You do this when the host tells you to connect to an event port, and > what you do is actually: > > first_id = host->get_vvids(target_port, number_of_VVIDs); > if(first_id < 0) > give_up; > > Note that the first_id thing is actually *only* needed when the host > connects multiple output ports to the same input port. Normally, it > will be 0. > > The host will at some point ask the plugin, or rather *tell* the > plugin how many VVIDs are needed for each Event Input port it wants > to connect. Plugins may say > > "I don't have Voices!" > (No need for VVIDs...) > > or > > "Anything that fits makes a fine VVID for me." > (Full 32 bit range, no actual allocation needed. > > or > > "I need internal tables. How many VVIDs do you need?" > (Host says N, and plugin allocates tables for N > VVIDs, addressed as 0..N-1.)
OK, let me again see if I understand (sorry for being dense, something is not clicking this week..) // Normal case of host connecting to an event_port Host somewhere: evp = instrument->get_event_port(n); vvid_max = instrument->alloc_vvids(evp, 256); /* should be enough! */ Plugin alloc_vvids: /* make room for specified number of vvids, or what not */ return the requested # back, or negative on error Host again: store the number of VVIDs somehow - array/list So how does a plugin controlling another plugin go?
