View Issue Details

IDProjectCategoryView StatusLast Update
0002643ardourfeaturespublic2020-04-19 20:14
Reporteragorka Assigned Tocth103  
PrioritynormalSeverityfeatureReproducibilityalways
Status closedResolutionfixed 
PlatformLinux 
Summary0002643: VST instruments (VSTi) support
DescriptionHere is feature request for donations on VST instruments in Ardour 3. Actually I hope this feature will arrive in near future, cause as I understand, what need for basic VSTi support is:
- Create bus (already there).
- Add VSTi plug-in as insert on the bus (already there).
- Create track with MIDI notes (already there).
- Route MIDI events to VST instrument (what is needed to be done, and already done in LMMS for example).

Of course this doesn't take in account VSTi's with multiple audio outputs, but this will be a giant step for Ardour towards arrangers / composers anyway.
Also several effect VSTs (such as filters, autotuners etc) accept midi events, so implementing MIDI routing will also improve support of those plug-ins in Ardour.

I don't think that I need to state that VSTi support is extremly important. LV2/DSSI/LADSPA plug-ins do not compete with VSTi market, and there are no signs that this gonna change in few years. Also, there are lots of closed-technology VST instruments, such as N.I. Kontakt, Wallander Instruments and so on. I have no hope that community would have power to replicate those technologies, or to produce recording of orchestral instruments samples in that quality and quantity that we can get in commercial products. So VSTi is the only hope for linux DAW to attract arrangers/composers, cause all others types of plug-ins (AU, RTAS, TDM, DirectX) have no chance to be used in linux (AFAIK).

So, I'm starting to put bounties for that.
TagsNo tags attached.

  Users sponsoring this issue
Sponsors List Total Sponsorship = US$ 130

2009-04-25 15:57: agorka (US$ 50)
2009-05-01 15:45: meisterh (US$ 25)
2009-06-02 17:27: streiner (US$ 50)
2009-07-30 18:26: aklausni (US$ 5)
  Users sponsoring this issue (Total Sponsorship = US$ 130)

Relationships

has duplicate 0003226 closedcth103 VSTi support 
related to 0003068 closedcth103 Build in Software instrument support/soundfont support for MIDI playback without having to patch into a DSSI synth just 

Activities

thorgal

2009-04-26 12:41

reporter   ~0005905

Last edited: 2009-04-26 12:42

I don't know if I am completely off mark but this is more what I have in mind:

the pre-fader section of a MIDI track should be some sort of intrument rack where you could stack up your VSTis or other software intruments (like LV2 or DSSI synths) triggered by MIDI events.

MIDI events from the track should be sent to these instruments (pre-fader). The post-fader would be for the audio output of these virtual instruments. The MIDI track fader would therefore control the overall volume of the audio output of these instruments. So you could easily stack up one or more instruments, set up the MIDI channelling from the track, send MIDI notes edited in the track piano roll, and control the overall volume of the track with the gain slider.

You could of course arrange the relative volume of the instruments either from their respective GUI or from some sort of extra widget in the pre-fader area showing a volume slider for each intrument for quick operation.

agorka

2009-04-26 22:18

reporter   ~0005906

Thorgal, I haven't got clear image of what you described. One thing that I don't really get is why do you want to have multiple VST instruments on a single MIDI track. Usually one would have multiple MIDI tracks going to single VSTi. And one more thing. I would like to see MIDI effects somewhen (VST for example, though the technology isn't quite well designed, or Steinberg Module Architecture, or LADSPA & LV2). I really need such effects like Cubase's MIDI transformer, where you can filter or tweak certain MIDI events, or MIDI arpeggiator and so on. I'm now aware of what linux plug-ins can offer in this area, but I think they will provide that functionality in future. The most promising is LV2 standard, so as soon as MIDI-plug-in framework will be developed (or is it already), I hope such a plug-ins would take their place in Ardour's MIDI track inserts. Pre or post fader doesn't really matter, and MIDI fader functionality also isn't quite clear to me... Sending CC 7 doesn't work as expected all the time.
Another useful feature would be MIDI sends, that would provide possibility to route single MIDI track to different instruments.

So in ideal implementation, VSTi instruments, when added, should show up audio busses, corresponding to VSTi outputs. There one should be able to add pre & post fader audio inserts & send, as usual.
There is no window for VST instruments yet (as I know), so either there will be a 'Instruments rack' window, or VST instruments can be added as 'Instrument' track in the same manner that Audio, BUS or MIDI tracks are added.

Also, when VST plug-in with MIDI input added, it should be accessible in MIDI track output routing.

Another, simplified approach, that can be implemented, is a 1 MIDI track - 1 VST instrument. This doesn't offer full range of possibilities, but can be a good possibility as addition. This is the approach that Reaper, LMMS and Rosegarden use. I think that in Ardour it could look like this:

MIDI Track:

Midi track pre fader inserts:
MIDI plug-in 1 - (Midi transpose for example)
MIDI send plug-in - (can be routed to another MIDI track or instrument)
MIDI plug-in 2 - (Midi arpeggiator for example)
VSTi Instrument - (Here MIDI becomes Audio)
VST effect 1 - (EQ for example)
Send 1 - (just for example, maybe some frequency analyzer or tuner)
VST effect 2 - (Compressor for example)

Fader & Pan (This is AUDIO processing already, despite this is a MIDI track)

Post fader effects:
VST effect 3 (Limiter for example)
Send 2 - (To the reverb bus for example)

This approach should provide some restrictions so you could only have one VST instrument in the rack, and all MIDI effects and MIDI sends should go before VSTi, and all VST effects and audio sends should go after VST instrument.

So implementing both approaches would offer maximum functionality and usability
If course implementing both approaches require very large amount of work, so I don't expect to see it in a near future, but I really hope, that the first approach could be implemented with much less efforts, thus just giving opportunity for arrangers & composers to use ardour, and thus increasing the user base, popularity, subscribers and so on, thus encouraging developers for further improvement.

P.S. Looks like next release of Linux Sampler is coming soon, and it is going to provide LV2 version of the sampler. It is very exciting to have LV2 instruments support in Ardour also (As well as DSSI!). =)

thorgal

2009-04-27 18:55

reporter   ~0005911

that's right, you can restrict one instrument per track. I'm just used to have ardour so flexible that I imagined you could place more than one in a MIDI track and program them to listen to specific channels but that can become clumsy ;)
On the other hand, one could definitely image a dedicated instrument "rack" where you would declare one or more instances of whatever instruments, have your MIDI tracks send MIDI events to whatever instrument instance they want that is already mounted in the "rack", and have the audio directed to the track fader.

drobilla

2009-05-01 22:36

developer   ~0005956

We are working towards fully flexible 'chaining' in a route. There is nothing particularly special about instruments (VST is, as always, just stupid); they are plugins that take in midi and output audio.

The real distinction between audio and MIDI tracks is what's on disk, all the signal processing stuff comes after, so you will be able to stick whatever you want in there as long as it makes sense (e.g. to stick in an audio effect there must be audio at that point, etc).

In practice this will inherently restrict you to a single instrument per track, since plugins further down the chain will only see the audio that came from the instrument. You can work around this by making busses and routing things however you like, as usual.

agorka

2009-05-02 08:30

reporter   ~0005957

Just one thing to note: There are VST plugins that have MIDI input and MIDI output. It's not clear if VST plug-ins can have 0 audio outputs. I would call those MIDI VST Plug-ins (there is another sdk for MIDI plug-ins from steinberg, but it's not popuplar, so let's forget it).

VST is good for making MIDI plug-ins, but using them in cubase is a nightmare. For example if you have VST MIDI plug-in and want it to process MIDI, you need to:
- put this MIDI VST plug-in to the VSTi rack
- route MIDI output of source MIDI track to it.
- Create another MIDI track
- Route MIDI VST plug-in's output to the second MIDI track
- Enable 'monitor' or 'record arm' on the second MIDI track
- Route second MIDI track output to the actual synth you are using
You can see, the problem is not in VST or MIDI plug-in, but in cubase's architecture.
Once I made MIDI VST plug-in for guitar strumming (you choose pattern and play chord and it generates MIDI event and keyswitches to play it like a guitarist would). But using it is a real nightmare, so I had to make a VST host inside this plug-in.
Things might be much simplier if you would put this MIDI VST plug-in as insert on a MIDI track and just ignore it's audio output (if there's any).
Maybe when inserting this plug-in into the rack, if Ardour see that it has both MIDI input and MIDI output, Ardour could ask, if we are going to use this plug-in as MIDI plug-in or Audio synth.

I don't know, what kind of routing are you going to make in Ardour. Is it going to be some global routing, where I can see all inputs and outputs of all the devices/plug-ins/tracks, or just straight routing?
For example in Cubase I would call audio routing 'straight', but MIDI routing is global. That means that in Cubase you can see all MIDI inputs and outputs of all devices as track's inputs and outputs. Cross-points of this routing are MIDI tracks, and only when they are armed for record or monitoring. The data on MIDI tracks are injected into those crosspoints. Thus MIDI tracks doesn't appear as MIDI source devices, and you can't route single MIDI track to different destination (actually you can, but only by means of 4 MIDI sends on the track).
Audio routing in Cubase is even more limited. You can't send Send FX track to another Send FX track for example, you can't route 2 audio tracks to one effect and so on. Popular 'Sidechaining' couldn't be made by Cubase's standard means, so some trick inside plug-ins are needed for that.

Those limitations simplify the usage of cubase a lot of course, cause you can't mess with routing too much.

An opposite routing concept can be seen in hardware digital routing systems such as Klotz Vadis, Stagetec Nexus etc. It uses cross-fields for routing, routing possibilities are endless, but it's a real pain to use them. You need manually connect each effect output's and inputs, for example you have to connect microphone preamp output to equalizer input, then you search for this equalizer output and connect it to compressor input, then you search for the same compressor output and connect it to mixer input and so on.

It's really important to combine usability of the first routing system and possibilities of the the second one, to make it usable and flexible in the same time.

Do you have a clear concept of what kind of routing is going to be in Ardour?

drobilla

2009-05-02 17:55

developer   ~0005958

LV2 plugins can have any number of inputs and outputs of any type (midi/audio/etc), and I think AU can as well, so we will support any plugins that have the required inputs/output at whatever point you want to insert it (VST included). No need to classify plugins into 'instruments' and 'effects' or whatever really, anything that will 'fit' in a given spot (e.g. take 1 MIDI input) should work.

The equivalent workflow to that example is:
- add MIDI plugin(s) to MIDI track (on the mixer strip)
- there is no step 2 :)

If you add an 'instrument' to a MIDI track, then at that point you have audio (and Jack audio outputs for the track will be there for connecting to whatever). What makes a 'MIDI track' or 'audio track' is what's on disk, you can put audio effects in the mixer strip of a MIDI assuming they come after an instrument so there's some audio to process.

To me, Cubase having two completely different routing systems for audio and MIDI as you described is braindead design. MIDI in Ardour is as much like audio in Ardour as possible, except where a difference is /necessary/. So, the routing for MIDI in Ardour is exactly the same as the the routing for audio. 3.0 has a matrix connection interface with which you can route anything to anything (sidechains will show up here as well). MIDI plugins like the 'strummer' you mentioned will work easily in MIDI tracks just as audio effects / generators work in audio tracks.

thorgal

2009-05-02 23:59

reporter   ~0005960

thanks for the clear description drobilla! makes it even better that I thought in my first reply agorka. I now understand why you'll have to restrict one instrument per MIDI track. Could you then detail the following:

- if I place a virtual instrument in the pre-fader of a MIDI track, will the fader affect the overall volume of the instrument audio output ? I would guess yes as the audio output of the instrument will show up before the fader.

- now, if I place the same instrument in the post-fader area of the MIDI track, what will the fader influence ? the audio point will start after the fader so I don't see what influence the fader could have.

agorka

2009-05-03 12:24

reporter   ~0005964

thorgal,
1 - I think yes, that's the way I hope it would be
2 - Fader in MIDI track, if it would be done as in Cubase, would send CC07 (Volume) and CC11 (Pan) to VSTi that goes after the fader. Thus, if it would react on those controllers correctly, you'll get also volume change. But I'm not sure if it's practical to put VSTi after fader, cause audio processing like dynamics usually placed pre fader. Anyway, if it would be even THAT flexible, that's fantastic. =)

drobilla

2009-05-03 15:24

developer   ~0005967

We will not have a "restriction" of one instrument per MIDI track, or any arbitrary restrictions of that kind, it's just unlikely you can come up with a chain of plugins that would.

In the first case, the fader would do exactly the same thing as in an audio track, since it's audio at that point. For all intents and purposes the entire strip IS an audio track after the instrument.

In the second case, the fader will have a few options of what to control (midi CC volume, modify velocity, etc). This isn't implemented yet.

drobilla

2009-05-04 17:08

developer   ~0005970

Progress: http://drobilla.net/files/ardour_instruments.png

The leftmost channel in "Midi 2" is MIDI, the next one over is the audio output of the synth plugin.

thorgal

2009-05-04 18:49

reporter   ~0005971

starts to look good :) when I have time, I'll update my ardour 3.0 code and test it with a few virtual insts.

Question: can the MIDI track use inserts that would output MIDI events and input audio ? I have a couple of standalone virtual instruments (not plugins) that listen to MIDI events and output audio (of course :). So having hybrid inserts would be neat :)

agorka

2009-05-04 20:55

reporter   ~0005972

Wow! At last things started to get off the ground! That's one small step is one giant leap for Ardour! So I'm very happy to see that inner architecture for routing MIDI into the plug-in does exists! I really didn't expected that to happen that soon! Ok, now what do I have to do to try this? Is it already in SVN? What version of SLV do I need to compile Ardour 3? (It doesn't compile with VST=1 for quite a long time, some files like thread.c and insert.h are missing, sadly, and I'm afraid that SLV 0.6.2 isn't enough for it now?

drobilla

2009-05-04 22:54

developer   ~0005973

Please, everyone, stop asking if this plugin will work or that plugin will work. If the plugin makes sense in whatever spot you are trying to put it, then it will work! If it can't, then it wont! Get it? ;)

A mixer strip can have any number of MIDI channels and any number of audio channels. What you put in it is your business. Example: if you have a MIDI track with nothing inserted, then it has a single midi channel. You obviously can not put an audio effect here. Not because ardour "restricts" it, it's just impossible. It doesn't make sense in the first place, there is no audio there to run it on.

The code is in the 3.0 branch of svn, yes, but you can't actually get at the audio output of instruments yet, since the Jack audio ports aren't created. It's not useful, but you can watch the meters bounce if you're so inclined.

I just released SLV2 (not "SLV", BTW) version 0.6.4. Grab it at http://drobilla.net/software/slv2

thorgal

2009-05-05 05:20

reporter   ~0005974

mmm, not to be insisting, but that was not the question (whether this or that plugin would work). I don't give a crap actually, I am more interested in the routing design and perfectly understand what you (drobilla) say about it. The question was: will we see "hybrid" inserts ? i.e. sending MIDI events to the outside world, receiving audio from the outside world. That's not asking whether a plugin would work or not as far as I understand myself :lol:

streiner

2009-06-02 17:26

reporter   ~0006046

I agree that full VST/VSTi support is a pretty big step toward having a package that can compete with PT/Cubase/etc on a more level playing field. Yes, VST is not a particularly great design, but many great plug-ins have been put out over the years, and LADSPA/TAPS, while nice, are not always 'sexy' enough to win over someone who is already using another DAW.

That said, I'll throw $50 in the pot toward this feature.

cth103

2010-07-11 21:57

administrator   ~0008417

Basic implementation in SVN now. Feel free to test and report bugs accordingly!

system

2020-04-19 20:14

developer   ~0021899

Issue has been closed automatically, by Trigger Close Plugin.
Feel free to re-open with additional information if you think the issue is not resolved.

Issue History

Date Modified Username Field Change
2009-04-25 15:57 agorka New Issue
2009-04-25 15:57 agorka Sponsorship Added agorka: US$ 50
2009-04-25 15:57 agorka Sponsorship Total 0 => 50
2009-04-26 12:41 thorgal Note Added: 0005905
2009-04-26 12:42 thorgal Note Edited: 0005905
2009-04-26 22:18 agorka Note Added: 0005906
2009-04-27 18:55 thorgal Note Added: 0005911
2009-05-01 15:45 meisterh Sponsorship Added meisterh: US$ 25
2009-05-01 15:45 meisterh Sponsorship Total 50 => 75
2009-05-01 22:36 drobilla Note Added: 0005956
2009-05-02 08:30 agorka Note Added: 0005957
2009-05-02 17:55 drobilla Note Added: 0005958
2009-05-02 23:59 thorgal Note Added: 0005960
2009-05-03 12:24 agorka Note Added: 0005964
2009-05-03 15:24 drobilla Note Added: 0005967
2009-05-04 17:08 drobilla Note Added: 0005970
2009-05-04 18:49 thorgal Note Added: 0005971
2009-05-04 20:55 agorka Note Added: 0005972
2009-05-04 22:54 drobilla Note Added: 0005973
2009-05-05 05:20 thorgal Note Added: 0005974
2009-06-02 17:26 streiner Note Added: 0006046
2009-06-02 17:27 streiner Sponsorship Added streiner: US$ 50
2009-06-02 17:27 streiner Sponsorship Total 75 => 125
2009-07-30 18:26 aklausni Sponsorship Added aklausni: US$ 5
2009-07-30 18:26 aklausni Sponsorship Total 125 => 130
2010-04-11 19:21 cth103 Relationship added related to 0003068
2010-07-10 01:17 cth103 Relationship added has duplicate 0003226
2010-07-11 21:57 cth103 cost => 0.00
2010-07-11 21:57 cth103 Note Added: 0008417
2010-07-11 21:57 cth103 Status new => resolved
2010-07-11 21:57 cth103 Resolution open => fixed
2010-07-11 21:57 cth103 Assigned To => cth103
2020-04-19 20:14 system Note Added: 0021899
2020-04-19 20:14 system Status resolved => closed