Using automation and routing to minimize effects load on CPU
-
jukeboxgrad
- Posts: 21
- Joined: Mon Sep 03, 2007 5:41 am
Using automation and routing to minimize effects load on CPU
I'd really appreciate some help figuring this out. I can think of a solution but I'm hoping someone knows a better way. I've searched and read lots of threads that don't quite solve the problem.
I want multiple tracks to share a single effect (to minimize CPU load), and I want to use automation to select when a track is routed to this effect. And I want the track to be either completely wet or dry (in other words, I want the routing to be exclusive).
I have the following solution, but it seems unduly complicated. In the I/O section for every track, I set "Audio To" to "Sends Only" (instead of "Master"). Then I have two return tracks, one dry and one wet (carrying the effects device). Then I have most tracks set to send their signal to the dry return, most of the time. So then when I want a certain passage for a certain track to be wet, I edit two automation envelopes for that track, so that it sends 0% to the dry return and 100% to the wet return, for the duration of the passage that needs the effect. And I have to make sure the two envelopes are perfectly inverse to each other!
What I really want is to be able to automate I/O more directly. In other words, I want to use automation to manipulate "Audio To." Then when I need a passage to be wet, I'll switch that from "Master" to "Wet Track" (a track I've created to contain the effects device; and then this track can be a regular track, not a return track).
Here's the situation more generally. Picture a project with 20 audio tracks. Let's say that for certain passages, I want to cut the bass on 19 tracks. Let's say I'm using Live's Auto Filter to do this. It seems I'm wasting lots of CPU by installing the device on every track. But then at least the automation task is simpler, because I'm just editing the "Device On" envelope when a track needs the effect. This is much less work and much less error-prone, since I'm editing one envelope instead of two. And this approach is cleaner because it only requires one effects track, not two return tracks, and it doesn't require making sure that all tracks are set to "Sends Only."
Trouble is, I run out of CPU pretty quickly (because my actual projects are more complicated than the simple example I've described just for the purpose of explaining the problem). Help!
I want multiple tracks to share a single effect (to minimize CPU load), and I want to use automation to select when a track is routed to this effect. And I want the track to be either completely wet or dry (in other words, I want the routing to be exclusive).
I have the following solution, but it seems unduly complicated. In the I/O section for every track, I set "Audio To" to "Sends Only" (instead of "Master"). Then I have two return tracks, one dry and one wet (carrying the effects device). Then I have most tracks set to send their signal to the dry return, most of the time. So then when I want a certain passage for a certain track to be wet, I edit two automation envelopes for that track, so that it sends 0% to the dry return and 100% to the wet return, for the duration of the passage that needs the effect. And I have to make sure the two envelopes are perfectly inverse to each other!
What I really want is to be able to automate I/O more directly. In other words, I want to use automation to manipulate "Audio To." Then when I need a passage to be wet, I'll switch that from "Master" to "Wet Track" (a track I've created to contain the effects device; and then this track can be a regular track, not a return track).
Here's the situation more generally. Picture a project with 20 audio tracks. Let's say that for certain passages, I want to cut the bass on 19 tracks. Let's say I'm using Live's Auto Filter to do this. It seems I'm wasting lots of CPU by installing the device on every track. But then at least the automation task is simpler, because I'm just editing the "Device On" envelope when a track needs the effect. This is much less work and much less error-prone, since I'm editing one envelope instead of two. And this approach is cleaner because it only requires one effects track, not two return tracks, and it doesn't require making sure that all tracks are set to "Sends Only."
Trouble is, I run out of CPU pretty quickly (because my actual projects are more complicated than the simple example I've described just for the purpose of explaining the problem). Help!
-
jukeboxgrad
- Posts: 21
- Joined: Mon Sep 03, 2007 5:41 am
partial solution
In the process of digging into this further, I noticed a couple of interesting things. One is that I was able to help things a lot by turning off effects (via automation) when I wasn't using them. I was guessing that Auto Filter used little or no CPU when processing silence, but I was wrong. When I figured this out I was able to eliminate a bunch of random audio dropouts. (The dropouts only happened during Live playback, not in rendered output, but they were still very annoying, because I always felt like I had to make sure it wasn't being caused by something else, like a damaged sample.)
It was pretty easy to cause these dropouts. I wonder if they are a reason that some people have a bad attitude about Live's sound quality.
But then I noticed something else that I thought was pretty interesting. I had about three instances of Wavearts Masterverb running. I figured it would be a good idea to also turn these off when they were just processing silence. But I was wrong about that. When I used automation to turn on this AU during playback, it caused an audio dropout (audible on other tracks, not just the track carrying the AU). This particular glitch/dropout was 100% repeatable. So with this device I was better off just letting it sit there and process silence.
I haven't tested to see if this is something that happens with other AU/VST devices, but I wonder if other folks have noticed something like this. I tried to find earlier discussions on this exact point, but didn't find much.
I did find a few threads that are somewhat related:
http://www.ableton.com/forum/viewtopic.php?t=66805
http://www.ableton.com/forum/viewtopic.php?t=38955
http://www.ableton.com/forum/viewtopic.php?t=64801
However, those folks seem to be noticing a problem when launching a clip. My problem seems related, although in my situation I am just doing playback in the arrangement view, and the glitch/dropout is not necessarily associated with the onset/launch of a clip.
BTW, turning on the "RAM" button seemed to make no difference at all, even though I think the underlying problem has something to do with a disk fetch. I also made sure that there were no other apps or background processes stealing cycles for no good reason. I also found that playing with buffer size didn't help at all.
FWIW, my machine is not a pig. It's a Macbook, 1.83gHz, Core 2 Duo, 2gb. Live is using the internal drive, which is 160gb (I forget the rotation speed). In general, Live's performance is pretty spectacular on this machine (for a long time, I ran Live on a 550mHz titanium, vintage 2001). But I was surprised to get these dropouts, so it's nice to figure out to how to minimize them. Those other threads seem to indicate that lots of people are hearing dropouts, and the problem is in version 6, not 5, and there doesn't seem to be a clear solution.
It was pretty easy to cause these dropouts. I wonder if they are a reason that some people have a bad attitude about Live's sound quality.
But then I noticed something else that I thought was pretty interesting. I had about three instances of Wavearts Masterverb running. I figured it would be a good idea to also turn these off when they were just processing silence. But I was wrong about that. When I used automation to turn on this AU during playback, it caused an audio dropout (audible on other tracks, not just the track carrying the AU). This particular glitch/dropout was 100% repeatable. So with this device I was better off just letting it sit there and process silence.
I haven't tested to see if this is something that happens with other AU/VST devices, but I wonder if other folks have noticed something like this. I tried to find earlier discussions on this exact point, but didn't find much.
I did find a few threads that are somewhat related:
http://www.ableton.com/forum/viewtopic.php?t=66805
http://www.ableton.com/forum/viewtopic.php?t=38955
http://www.ableton.com/forum/viewtopic.php?t=64801
However, those folks seem to be noticing a problem when launching a clip. My problem seems related, although in my situation I am just doing playback in the arrangement view, and the glitch/dropout is not necessarily associated with the onset/launch of a clip.
BTW, turning on the "RAM" button seemed to make no difference at all, even though I think the underlying problem has something to do with a disk fetch. I also made sure that there were no other apps or background processes stealing cycles for no good reason. I also found that playing with buffer size didn't help at all.
FWIW, my machine is not a pig. It's a Macbook, 1.83gHz, Core 2 Duo, 2gb. Live is using the internal drive, which is 160gb (I forget the rotation speed). In general, Live's performance is pretty spectacular on this machine (for a long time, I ran Live on a 550mHz titanium, vintage 2001). But I was surprised to get these dropouts, so it's nice to figure out to how to minimize them. Those other threads seem to indicate that lots of people are hearing dropouts, and the problem is in version 6, not 5, and there doesn't seem to be a clear solution.
It might be related to the "Latency Compensation" function. The moment you turn on the AU its probably higher latency must be compensated for so Live will increase the delay on all tracks that was necessary to compensate for the now disabled AU. That can surely cause a dropout/glitch.
Try turning off "Latency Compensation" and let us know if it changes anything. If so then Ableton should maybe fix the compensation to only change the delay when nothing is in Playback at the moment you disable a plugin.
Another reason could just be that the moment you switch on an external plugin it exchanges informations with Live (like its internal latency) and that might cause Live to dropout while processing these informations and linking the plugin into the signal chain.
Try turning off "Latency Compensation" and let us know if it changes anything. If so then Ableton should maybe fix the compensation to only change the delay when nothing is in Playback at the moment you disable a plugin.
Another reason could just be that the moment you switch on an external plugin it exchanges informations with Live (like its internal latency) and that might cause Live to dropout while processing these informations and linking the plugin into the signal chain.
The "simple" process you mentioned is my preferred method. For my rock projects, I often have lots of effects on the tracks...some working all the time, some not. When not working, I tend to automate the on/off. However, I've noticed that audio drop-outs and CPU spikes occur on poorly coded effects and/or effects that have latency. With Wavearts, I've always had an "audio-glitch" every time I save, which leads me to believe that there is some buffer issue in the plugin, and that's why I never bought or continued to use them. This doesn't happen with Kjaerhus plugs, and it certainly doesn't happen with Live's native plugs.
My advice is to keep your simple process, use Live's plugs when possible, and only use the plugs you need. For example, for a bass cut, an instance of EQ8 with only one filter enabled will do the trick, and it'll take maybe 0.25% CPU, whereas an Autofilter takes at least 1%, and more if you enable the LFO and other goodies. So it's easy to cut corners if you get real stingy with your plugs and automate the on/off.
I'm also a big fan of subgroups. So in my rock songs, where I have to mix say 15 tracks of just live drums, I tend to group the room tracks, and the dry tracks, and have a subgroup channel. While the individual tracks get an EQ8 and a Gate, the subgroup is the only one that gets a compressor. Then the subgroup gets sent to a shared reverb send.
Anyways, you prolly know all this, but I'm saying that being stingy and planning ahead can go a long way. Every little bit helps to keep the overall load down.
One other thing...once you start your mixdown, meaning that you've got your tracks recorded, and now you don't need very low latency, if you bump up your buffers to 1024-2048, you'll have a lot more leeway in your CPU...fewer dropouts and a lot more forgiving Live.
My advice is to keep your simple process, use Live's plugs when possible, and only use the plugs you need. For example, for a bass cut, an instance of EQ8 with only one filter enabled will do the trick, and it'll take maybe 0.25% CPU, whereas an Autofilter takes at least 1%, and more if you enable the LFO and other goodies. So it's easy to cut corners if you get real stingy with your plugs and automate the on/off.
I'm also a big fan of subgroups. So in my rock songs, where I have to mix say 15 tracks of just live drums, I tend to group the room tracks, and the dry tracks, and have a subgroup channel. While the individual tracks get an EQ8 and a Gate, the subgroup is the only one that gets a compressor. Then the subgroup gets sent to a shared reverb send.
Anyways, you prolly know all this, but I'm saying that being stingy and planning ahead can go a long way. Every little bit helps to keep the overall load down.
One other thing...once you start your mixdown, meaning that you've got your tracks recorded, and now you don't need very low latency, if you bump up your buffers to 1024-2048, you'll have a lot more leeway in your CPU...fewer dropouts and a lot more forgiving Live.
-
jukeboxgrad
- Posts: 21
- Joined: Mon Sep 03, 2007 5:41 am
timur: "Try turning off 'Latency Compensation' and let us know if it changes anything"
Thanks for your reply. That's a very logical suggestion, and it didn't occur to me to try that. Trouble is, it doesn't help.
After looking at the problem some more, I see that it's very easy to reproduce: in an empty Live set, load one audio clip. Load Masterverb on that track. Play the clip and create a short recording into the Arrangement. In the Arrangement view, create an envelope to set Device On while audio is playing.
Play the passage, and you can hear an audible glitch at the moment the playhead passes the point in the envelope where the AU is being turned on. This glitch is absent if the audio is rendered to disk. There is no similiar glitch if the device is, say, Live's Auto Filter.
nebulae: "I've noticed that audio drop-outs and CPU spikes occur on poorly coded effects"
Thanks for responding. I think you're nailing a key part of what's happening. It's looking more and more like Masterverb is a culprit here.
In fairness to Wave Arts, I suppose that theoretically the issue could be some interaction of what Live is doing and what Masterverb is doing. Maybe the latter works nicer inside of some other DAW.
"an instance of EQ8 with only one filter enabled will do the trick, and it'll take maybe 0.25% CPU, whereas an Autofilter takes at least 1%"
That's very helpful information. I was using Auto Filter in a very simple way (no envelope, no LFO), but it didn't occur to me that EQ8 would be more efficient. I'll take your advice.
"I'm also a big fan of subgroups."
Right, that makes sense. I understand how subgroups can ease effects load on the CPU. But I think you're also saying that in my situation it's simpler to directly do a bass cut on each track, as long as I use an efficient device (like EQ8) to do that. Sharing the effect would make sense except that I want to automate turning the effect on and off, on a per-track basis.
Anyway, I wonder why there's no such thing as an exclusive Send, where turning up Send would cut the audio in the source track (sort of like what a crossfader does, and basically the same thing you accomplish when you use Live's I/O section to route audio to a different track). Then I would have a nice clean way to share the effect, and still automate when each track is wet or dry. Then one EQ8 could handle the bass cut for all my 20 tracks.
"if you bump up your buffers to 1024-2048"
Right, makes sense. But I found in my situation that didn't make any difference (I tried it). The bottom line is that turning on Masterverb seems to cause a glitch, no matter what. And keeping about 20 Auto Filters turned on processing lots of silence also caused random glitches. That problem went away when I used automation to turn those filters off when I didn't need them. And I'll be in even better shape when I use a more efficient way to get a simple bass cut (like EQ8).
"you prolly know all this"
You said a bunch of useful things that I didn't know, so I appreciate that.
Thanks for your reply. That's a very logical suggestion, and it didn't occur to me to try that. Trouble is, it doesn't help.
After looking at the problem some more, I see that it's very easy to reproduce: in an empty Live set, load one audio clip. Load Masterverb on that track. Play the clip and create a short recording into the Arrangement. In the Arrangement view, create an envelope to set Device On while audio is playing.
Play the passage, and you can hear an audible glitch at the moment the playhead passes the point in the envelope where the AU is being turned on. This glitch is absent if the audio is rendered to disk. There is no similiar glitch if the device is, say, Live's Auto Filter.
nebulae: "I've noticed that audio drop-outs and CPU spikes occur on poorly coded effects"
Thanks for responding. I think you're nailing a key part of what's happening. It's looking more and more like Masterverb is a culprit here.
In fairness to Wave Arts, I suppose that theoretically the issue could be some interaction of what Live is doing and what Masterverb is doing. Maybe the latter works nicer inside of some other DAW.
"an instance of EQ8 with only one filter enabled will do the trick, and it'll take maybe 0.25% CPU, whereas an Autofilter takes at least 1%"
That's very helpful information. I was using Auto Filter in a very simple way (no envelope, no LFO), but it didn't occur to me that EQ8 would be more efficient. I'll take your advice.
"I'm also a big fan of subgroups."
Right, that makes sense. I understand how subgroups can ease effects load on the CPU. But I think you're also saying that in my situation it's simpler to directly do a bass cut on each track, as long as I use an efficient device (like EQ8) to do that. Sharing the effect would make sense except that I want to automate turning the effect on and off, on a per-track basis.
Anyway, I wonder why there's no such thing as an exclusive Send, where turning up Send would cut the audio in the source track (sort of like what a crossfader does, and basically the same thing you accomplish when you use Live's I/O section to route audio to a different track). Then I would have a nice clean way to share the effect, and still automate when each track is wet or dry. Then one EQ8 could handle the bass cut for all my 20 tracks.
"if you bump up your buffers to 1024-2048"
Right, makes sense. But I found in my situation that didn't make any difference (I tried it). The bottom line is that turning on Masterverb seems to cause a glitch, no matter what. And keeping about 20 Auto Filters turned on processing lots of silence also caused random glitches. That problem went away when I used automation to turn those filters off when I didn't need them. And I'll be in even better shape when I use a more efficient way to get a simple bass cut (like EQ8).
"you prolly know all this"
You said a bunch of useful things that I didn't know, so I appreciate that.
Glad this was useful to you. Let me know how the more efficient effects work out. FYI, those wavearts plugs cause a glitch in other daws too.jukeboxgrad wrote: Anyway, I wonder why there's no such thing as an exclusive Send, where turning up Send would cut the audio in the source track (sort of like what a crossfader does, and basically the same thing you accomplish when you use Live's I/O section to route audio to a different track). Then I would have a nice clean way to share the effect, and still automate when each track is wet or dry. Then one EQ8 could handle the bass cut for all my 20 tracks.
As for the situation with doing all bass cuts at once, that's another simple use of subgroups. You can have as many tracks or subgroups all route into yet another track and add one EQ8 to that subgroup. So in your example, have all 20 bass tracks go to a subgroup, say track 21. Add EQ8 to track 21. Automate turning on EQ8 on T21 when you want your cut. If that's too simplistic an explanation, then I'm possibly missing the complexity of yoru problem?
-
jukeboxgrad
- Posts: 21
- Joined: Mon Sep 03, 2007 5:41 am
neb: "those wavearts plugs cause a glitch in other daws too"
Interesting, and good to know. Oddly enough, I have the sense that it's fairly efficient, though. And I like the sound. So my workaround for the moment is to just leave it turned on. Probably I'll end up not needing to use a bunch of them at once.
"Automate turning on EQ8 on T21 when you want your cut."
This would be a perfect solution if I wanted to cut bass on all 20 tracks at the same time. But I don't. The situation is that Track A might need a bass cut in only measure 10 and Track B might need a bass cut in only measure 20.
I could make this work if Sends were exclusive; i.e., if turning up Send killed the output on the source track. I'm surprised there is seemingly no way to do this.
Using automated Sends to T21 would also work with an effect like reverb, where a mix of wet and dry is the desired result. But with EQ (a bass cut, in this instance), I obviously want 100% wet. Hence it is a problem that Send does not kill the source track.
My need seems so straightforward, so I figure I must still be missing something. Thanks very much for sticking with this. I've learned a lot from your posts in this and many other threads.
Interesting, and good to know. Oddly enough, I have the sense that it's fairly efficient, though. And I like the sound. So my workaround for the moment is to just leave it turned on. Probably I'll end up not needing to use a bunch of them at once.
"Automate turning on EQ8 on T21 when you want your cut."
This would be a perfect solution if I wanted to cut bass on all 20 tracks at the same time. But I don't. The situation is that Track A might need a bass cut in only measure 10 and Track B might need a bass cut in only measure 20.
I could make this work if Sends were exclusive; i.e., if turning up Send killed the output on the source track. I'm surprised there is seemingly no way to do this.
Using automated Sends to T21 would also work with an effect like reverb, where a mix of wet and dry is the desired result. But with EQ (a bass cut, in this instance), I obviously want 100% wet. Hence it is a problem that Send does not kill the source track.
My need seems so straightforward, so I figure I must still be missing something. Thanks very much for sticking with this. I've learned a lot from your posts in this and many other threads.