<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 10, 2018 at 3:48 PM, Andrew Voelkel <span dir="ltr"><<a href="mailto:jandyman.voelkel@gmail.com" target="_blank">jandyman.voelkel@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="white" link="blue" vlink="purple" lang="EN-US"><div class="m_-4518679095259478802WordSection1"><p class="MsoNormal">Glad to hear the discussion. From an outsider’s point of view, there are few things I don’t get.<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">First, if each JACK app is a separate process, then theoretically you have to do a bunch of expensive process context switches for each audio buffer. </p></div></div></blockquote><div><br><div style="font-family:arial,helvetica,sans-serif" class="gmail_default">​In the scheme of things, a context switch is typically not very expensive compared to a typical audio buffer size (say 16 samples and up).​ The only way it gets unusually expensive is if a process touches a lot of memory during its execution. This isn't impossible in an audio/DSP context, but it isn't very likely either.<br></div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="white" link="blue" vlink="purple" lang="EN-US"><div class="m_-4518679095259478802WordSection1"><p class="MsoNormal">And then there is interprocess communication. Uses shared memory buffers? </p></div></div></blockquote><div><br><div style="font-family:arial,helvetica,sans-serif" class="gmail_default">​it's all in shared memory. there's no communication overhead.​</div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="white" link="blue" vlink="purple" lang="EN-US"><div class="m_-4518679095259478802WordSection1"><p class="MsoNormal">As opposed to a typical plug-in architecture where everything runs under the host process. It is amazing to me that an interprocess scheme wouldn’t run into major problems under compute load when running with the small buffers needed for low latency. </p></div></div></blockquote><div><br><div style="font-family:arial,helvetica,sans-serif" class="gmail_default">​be amazed :)​</div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="white" link="blue" vlink="purple" lang="EN-US"><div class="m_-4518679095259478802WordSection1"><p class="MsoNormal"><u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">What am I missing here?<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">The other thing I’m used to seeing in a plug in API is setup for buffer sizes, sample rates, audio IO. The host centralizes this process.</p></div></div></blockquote><div><br><div style="font-family:arial,helvetica,sans-serif" class="gmail_default">​JACK does the same thing. Each client has no control over those things (at least, not in the normal way).​ They can ask to change the buffer size, but their request may be ignored, or it may be reset by something else. Just like in a plugin architecture.<br></div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="white" link="blue" vlink="purple" lang="EN-US"><div class="m_-4518679095259478802WordSection1"><p class="MsoNormal"> Then there is advertising your pins and capabilities. I was mystified when looking at the simple JACK examples that I didn’t see code for dealing with these issues (e.g. being sample rate aware).</p></div></div></blockquote><div><br><div style="font-family:arial,helvetica,sans-serif" class="gmail_default">​JACK clients have only one thing of interest to other clients: ports. These are all clearly visible, and tagged appropriately (though for most clients, there's almost no tagging to do)<br></div><br> <div style="font-family:arial,helvetica,sans-serif;display:inline" class="gmail_default">​<br></div></div></div></div></div>