Jump to content

IO Plugin - Dry Signal Moved Back in Time


Recommended Posts

I've been trying to integrate my external FX by using the I/O plug-in in Logic Pro 9.1.8. It's been a headache.


I've set up a single sample tick placed at sample position 100. There are 2 versions of this single tick, in 2 stereo files; one with the tick on the left channel and one with the tick on the right channel. Both ticks have an amplitude of 20%. If two ticks occur at the same sample position, on the same channel, you will see a summed amplitude of 40%. Each tick occurring at exactly the same sample position will show a 20% increase in amplitude.


In order to eliminate recording offsets, AD/DA conversion, and external FX processing delays, I've setup my RME Digiface to do a digital loopback (ADAT port 2 Out to ADAT port 2 In). The digital round-trip latency of this signal path is exactly 340 samples (84 samples driver latency + 2 x 128 samples Logic I/O Buffer).


I've created an Aux with an I/O plug-in inserted (I've also tried inserting the I/O plug-in on a Bus object created in the environment). The I/O plug-in's input and output channels are set to 11-12. I do a ping and it returns a Latency Offset of 0 samples, as expected (RME drivers!). The output of this Aux is then routed to channels 9-10, which results in another loopback after the I/O plug-in's external "FX" loop (i.e. loop via 11-12 I/O plug-in "FX", then loop via 9-10).


I've set up 2 audio channels, one with the tick on the left and one with the tick on the right. The left-tick channel is sending to the Aux (with I/O plug-in on 11-12) via it's Bus Send (send only - channel output set to "No Output"). The right-tick channel is sending to outputs 9-10 (1 single round-trip of 340 samples)


When I record inputs 9-10, the "dry" signal that was sent directly to 9-10 appears at 440 samples (100 + 340). The "FX" signal also appears at sample 440. I expected both ticks to be latency-compensated, and appear at the original tick's sample position of 100.








Logic project file:


IO Plugin Test.zip



I thought the purpose of the I/O plug-in was to request audio from it's Bus Sends ahead of time. Instead, it's causing the "dry" signal to be delayed by 340 samples as well, ending up at sample position 440.


The audio is lined-up, but the I/O plug-in latency hasn't been fully compensated for. It will sound correctly timed when played back, but is being recorded to a later position.


Is this how it's supposed to work? Shouldn't both ticks line up and be recorded at the original tick position of 100 samples?





Link to comment
Share on other sites

Hi Danno,


Please do not link to images and files on 3rd party websites, instead attach them to your thread using the "Attach Files" feature at the bottom of your post so they stay available on our servers for ever. Right now some of your links are broken and some of your images are not visible.


Thank you!

Link to comment
Share on other sites

Apologies. Now edited. Looks like there may be something up with my hosting server. I must say missing links from Forum pages are one of my pet hates. I intended to leave the files on my hosting account until the day I die!


Oh well. I think I fixed it now...

Link to comment
Share on other sites

A bit more info about my setup:


Plug-in Latency Compensation (PDC) = All

Low Latency Mode = Off (un-checked)

Process Buffer Range = Small

Software Monitoring = On (checked)


Recording Delay (offset) = 0 samples



No latency inducing or lookahead plugins anywhere...

Link to comment
Share on other sites

OK, after more investigation, I've learned a couple of things.


If I place the IO Plugin directly onto the Output channel strip of channel 9/10, Logic places the tick at sample 440. The same as with the Aux/Bus setup. However, if I set the Latency Offset slider to +100 or -100, it has absolutely no effect (for Outputs). The click stays at sample 440.


However, if I place the IO Plugin on the Audio channel strip that's playing the tick, with Latency Offset at 0, the IO Plugin works as expected, compensating for the extra round-trip and placing the tick at sample 100. Also, setting the Latency Offset to +100 causes the tick to appear 100 samples earlier and visa versa for negative offset values.


The IO Plugin only seems to compensate for latency correctly when placed on a source Audio/Instrument channel strip. For Auxs', Bus objects and Outputs the IO Plugin places the tick later (one round-trip later [ + Latency Offset for Aux's & Bus objects]).


Can anyone enlighten me :?:



Link to comment
Share on other sites

Some more strange I/O Plugin findings:


(1) Bypassing an I/O Plugin on an Audio/Instrument channel strip does not affect the latency/position of recorded audio. The Latency Offset value has no effect for a bypassed I/O Plugin on Audio/Instrument channel strips (see point 4). Everything lines up as normal.


(2) Bypassing a Latency Fixer/Compensator plugin on Audio/Instrument channel strips (with an inserted I/O plugin) changes Logic's latency compensation.


(3) I/O plugins on Audio/Instrument channel strips seem to be the only channel strips that have their audio sent to the I/O plugin early.


(4) Bypassing an I/O plugin on Auxes, Bus objects and Outputs stops audio flowing though your external hardware, but the recorded audio still appears late. Logic still tries to compensate for latency that is no longer there (the Latency Offset still has an effect when bypassed). Again, bypassed Latency Fixer/Compensator plugins still have an effect on Logic's latency compensation too.


(5) Placing a latency compensator plugin after an I/O plugin, which is inserted on an Output, has no effect when both plugins are active. However, bypassing the latency compensator plugin DOES have an effect on Logic's latency compensation!


Yes, I know I shouldn't need to use Latency Fixer/Compensator plugins with the I/O's Latency Offset, but they do seem to have a strange effect on Logic's latency compensation, and may help me figure out some of Logic's internals.


(6) It's probably best to completely remove unused I/O Plugins and/or latency fixing plugins, rather than bypassing them. Unless, their unusual bypass behavior fixes a particular need...


(7) Bus objects, created in the Environment, with an inserted I/O Plugin no longer appear to have their audio sent to them ahead of time (as with Audio/Instrument channel strips). From what I gather, Logic 8 apparently sent audio ahead of time to Bus objects with an inserted I/O plugin.


(8) Recording via Bounce will give lower latency figures. Obvious to some, I expect. My tests are all using loopback recording.


(9) Sometimes, when the I/O Plugin is inserted on a Bus object, the Ping button doesn't work. Pressing play and pinging whilst Logic is running seems to sort things out. Also, if you Ping whilst the I/O plugin is bypassed the Ping won't work. If you hit Ping, then un-bypass within about a second the ping gets sent. Handy!



That's all for now!


Feel free to chime in!



Link to comment
Share on other sites

  • 2 months later...


This topic is now archived and is closed to further replies.

  • Create New...