Closed GoogleCodeExporter closed 8 years ago
[deleted comment]
Well, mono only or stereo only should work, but judging from your PM on KvR I
assume you mean supporting a combination. I'll post my answer here too and
update the case status.
This is a problem with VST actually. VSTs have a fixed number of inputs and
outputs. From time to time there have been attempts to allow changing the
number of inputs / outputs from the VST host, but support never caught on. The
usual solution is for the plug-in developer to offer two or more variations of
the DLLs instead.
This is why the limitation exist in the Symbiosis wrapper too.
In AU world things are different, although far from clear or consistent,
especially when it comes to supporting more than one output bus. For example,
for effects, all input and output busses have to be the same format: either
mono or stereo. You can't mix them. For example you can't have one mono plus
one stereo in. Something you might prefer on a vocoder for instance. Funny
though, for *instruments* mixed stereo and mono outputs *are* supported.
Anyhow, what you are requesting can be accomplished. A single bus effect can be
set to allow mono or stereo, and the AU should get its
"kAudioUnitProperty_StreamFormat" updated accordingly. If you want to hack
Symbiosis, check the "kAudioUnitProperty_SupportedNumChannels" property (return
a list of your supported channel layouts). Also, check "isIOPinConnected"
around line 2950 ("FIX : only works without multiple buses"). You might be able
to use the VST "isInputConnected" and "isOutputConnected" if you edit
"isIOPinConnected" in Symbiosis, but you may have to do some more hacks than
just un-commenting the lines there.
You should also know that a lot of AU stuff with busses and variable formats
won't work in older hosts like Logic 7, but I'm not sure how big of an issue
this is anymore. Anyhow, I'll keep the case open in Google Code to see if I can
come up with a clean solution for supporting variable IO count without breaking
compatibility with older hosts.
Concerning Cocoa. Naturally I want to support this (or actually I don't want to
but need to). However, support for 64-bit and Cocoa in VST world on Mac (read:
Cubase 64-bit) has to mature more before I commit to creating a stable solution.
Original comment by malstro...@gmail.com
on 5 Aug 2010 at 8:10
Thanks for your reply.
I'm not referring to combinations of mono and stereo though,just straight mono
or stereo versions. Your included example for instance only reports supporting
2,2 and can't be added to a mono track in Logic, I tried several other
commercial vsts that work in either mono or stereo in Cubase/Live etc and they
too appear as stereo only. I think as you said because
kAudioUnitProperty_SupportedNumChannels does not return a list of 1,1 and 2,2
rather it returns 1,1 or 2,2.
Original comment by garyer...@googlemail.com
on 5 Aug 2010 at 8:32
I just brought up the combination issue as an example of inconsistencies in AU.
What I believe you do ask for is to support mono *and* stereo with the same
plug-in binary, right?
If you change kInputCount and kOutputCount in Sinoplex.cpp to 1, Sinoplex
should show up as mono only in Logic (if they are set to 2, Sinoplex should
show up as stereo only). If you wrap other commercial vsts they are probably
built as stereo plug-ins, so they will show up as stereo only.
I am not sure how Cubase works at the moment, but Ableton Live is agnostic
about the input and output count (also with Audio Units!). You can use stereo
or mono plug-ins on stereo or mono tracks in any combination. I think this is a
good approach. It puts the user in charge and isn't restrictive, but it will
mean a certain CPU loss as the host needs to mix / split the output before and
after the plug-in.
Most AU hosts (including Logic) don't work this way. The host will not
automatically mix down stereo to mono just because the plug-in says it is mono.
If the plug-in is written to take mono input, that is the only way you can use
it. If it is written to take stereo input, that is the only way you can use it.
*But* AU has this other facility that VST lacks. A single plug-in can specify
that it should handle both mono / stereo (this is where
kAudioUnitProperty_SupportedNumChannels comes in), but you still need to write
code to support it.
The only way I could automatically support what you ask for in Symbiosis is to
do what Ableton Live does, but inside Symbiosis instead. Mix and split stereo
<-> mono and fake that we support any combination. However, if I did this it
would be an optional feature as this isn't really Symbiosis issue to solve.
Notice that a lot of VST hosts will have this same restriction as well. A mono
plug-in will not be usable directly on a stereo track and vice versa.
Original comment by malstro...@gmail.com
on 5 Aug 2010 at 9:34
(To sum it up, if one goes to the bottom of it, it isn't really a Symbiosis or
Audio Units issue, but actually an issue of how different *hosts* handle the
situation of combining mono and stereo effects on the same signal path.)
Original comment by malstro...@gmail.com
on 5 Aug 2010 at 9:37
OK - thanks again.
I guess anyone who doesn't want to distribute separate mono and stereo versions
of their wrapped vst plugins will as you say have to dig around and modify
Symbiosis to do so - Cytomic's "The Glue" seems to be an example of this.
Original comment by garyer...@googlemail.com
on 5 Aug 2010 at 9:58
Yes, The Glue is a good example. I actually have Andy's modifications lying
around somewhere. I searched for it now on my laptop, but it wasn't here. It's
probably on my office computer. I'll post it as soon as I find it. As I recall
it was a small modification. Mainly adding code to
kAudioUnitProperty_SupportedNumChannels and kAudioUnitProperty_StreamFormat.
I'll try to find time to make better support for all this in Symbiosis. I'm
thinking adding a flag to SYConfig in .plist and supporting the VST calls
isInputConnected/isOutputConnected. Perhaps I'll also set the audio buffer
pointers to the same address when the plug-in is used in mono mode. This way it
will be easy to detect in the VST code and adapt the dsp behavior accordingly.
Original comment by malstro...@gmail.com
on 5 Aug 2010 at 11:27
Can you please follow up on this with the mentioned code and it would be great
if you find some solution also for surround setups like 1/2 -> 5.1 channels
Original comment by em...@stelkens.de
on 20 Dec 2010 at 2:21
"Perhaps I'll also set the audio buffer pointers to the same address when the
plug-in is used in mono mode. This way it will be easy to detect in the VST
code and adapt the dsp behavior accordingly."
This is how all of my plugins sense mono in VST, but I also implement
bool vstplugin::setSpeakerArrangement (VstSpeakerArrangement* pluginInput,
VstSpeakerArrangement* pluginOutput)
{
setSpeaker = true;
if (pluginInput->numChannels == 1 && pluginOutput->numChannels == 1)
channelMode = kMonoMode;
if (pluginInput->numChannels == 2 && pluginOutput->numChannels == 2)
channelMode = kStereoMode;
return true;
}
for Cubase (Cubase calls this function, but never sets the buffers to the same
address, even when mono). The ability to switch from mono to stereo is
important in my plugins, as they all are heavy CPU users.
Original comment by soundh...@gmail.com
on 27 Feb 2011 at 6:18
@em...@stelkens.de : sorry, didn't see this until now for some reason. Can't
find Andy's code any more. I am going to work on good support for variable I/O
asap. For one thing, I would like to use this for Bitspeek in the future.
@soundh...@gmail.com : thanks for the info! Good to know that the
same-address-solution is used by other hosts. Speaking of Cubase, I have found
that it is pretty lousy on mixing mono and stereo inserts on a mixer channel.
For example, if you insert a mono effect on a stereo channel, it will only
process the left channel.
Original comment by malstro...@gmail.com
on 27 Feb 2011 at 8:22
In 1.29b I made it possible to support both mono and stereo I/O. This is from
the comment in Symbiosis.plist:
Set "CanDoMonoIO" to true if (any of) the plug-in input(s) and / or output(s)
are in stereo and it makes sense to use them with mono signals as well. (The
VST process() will then receive the same buffer pointer for left and right
channels whenever the plug-in is used in a mono configuration.)
Original comment by malstro...@gmail.com
on 30 Aug 2011 at 10:20
Original issue reported on code.google.com by
garyer...@googlemail.com
on 5 Aug 2010 at 1:53