<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">As Benoit suggested, there are plugin APIs on Linux too (both LV2 and LinuxVST). If you would write an AU for MacOS, you could write a plugin on Linux too. There are plentiful hosts, some of them extremely lightweight (i.e. they don't really do anything themselves).<br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Normal JACK clients introduce a tiny amount of overhead and add no latency whatsoever. It is quite common (unfortunately in my view these days) to implement things as JACK clients (i.e. standalone programs) on Linux, rather than as plugins (though this changing).<br><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 9, 2018 at 11:07 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_-2162897349332926544WordSection1"><p class="MsoNormal">Hi,<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Maybe I need to ask a different question. My goal is to stick my real time processing algorithm in between x number of audio inputs coming from a USB audio interface, and then send the outputs to y number of audio outputs on the same USB audio interface. Low latency is important. Being able to add in other processing from third parties would be nice, but it isn’t essential.<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Is writing a JACK client the right way to do this? If so, what is the right approach? If not, what is the right way to do this?  <u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">On the Apple platform, I do this by writing an Audio Unit, and either leverage a DAW host application like Logic or the Apple AVAudioEngine to serve as a host for my processing algorithm. The host gets the inputs from the audio interface, I process the audio in my Audio Unit in a callback routine, and the host sends the outputs to the audio interface. In Windows a similar thing happens, but with VST plugins and an ASIO host, which is either a DAW or a custom ASIO host. I’ve done both.<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">So what is the best “linux way” to do this? Out-of-process seems high overhead and not suited for low latency, so I figure I must be misunderstanding something quite fundamental. <u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Thanks so much for the help, I really do appreciate it.<u></u><u></u></p><p class="MsoNormal"><u></u> <u></u></p><ul style="margin-top:0in" type="disc"><li class="m_-2162897349332926544MsoListParagraph" style="margin-left:0in">Andy<u></u><u></u></li></ul><p class="MsoNormal"><u></u> <u></u></p><div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal"><b><span style="font-size:12.0pt;color:black">From: </span></b><span style="font-size:12.0pt;color:black">Paul Davis <<a href="mailto:paul@linuxaudiosystems.com" target="_blank">paul@linuxaudiosystems.com</a>><br><b>Date: </b>Tuesday, January 9, 2018 at 8:22 PM<br><b>To: </b>Andrew Voelkel <<a href="mailto:jandyman.voelkel@gmail.com" target="_blank">jandyman.voelkel@gmail.com</a>><br><b>Cc: </b>Benoît Rouits <<a href="mailto:brouits@free.fr" target="_blank">brouits@free.fr</a>>, linux-audio-user <<a href="mailto:linux-audio-user@lists.linuxaudio.org" target="_blank">linux-audio-user@lists.<wbr>linuxaudio.org</a>><br><b>Subject: </b>Re: [LAU] How to get started writing a JACK app? (also what distro for BeagleBone)<u></u><u></u></span></p></div><div><div class="h5"><div><p class="MsoNormal"><u></u> <u></u></p></div><div><div><p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-family:"Arial",sans-serif">In-process JACK clients are a very special case and almost nobody implements or uses them. They are like plugins for the JACK server, and that's not really the point of JACK (which was designed to connect distinct processes).<u></u><u></u></span></p></div><div><p class="MsoNormal"><span style="font-family:"Arial",sans-serif">Look at the out-of-process ("normal") example(s) instead.<u></u><u></u></span></p></div></div><div><p class="MsoNormal"><u></u> <u></u></p><div><p class="MsoNormal">On Tue, Jan 9, 2018 at 9:39 PM, Andrew Voelkel <<a href="mailto:jandyman.voelkel@gmail.com" target="_blank">jandyman.voelkel@gmail.com</a>> wrote:<u></u><u></u></p><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in"><div><div><p class="MsoNormal">Hi and thanks.<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">So looking at the in-process example, I’m guessing it compiles to a dynamic library which the server loads? If so, how does the server know the capabilities of the in-process client. <u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">I’m coming from writing VST plug-ins on Windows or Audio Units on Apple platforms, in case I sound confused.<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">I’m also having trouble getting used to the idea of the client being the plug in, normally I would think the client would be what is called the “host” on Windows or Apple, and the plug-in would closer to a “server”. But here the terminology is reversed. Am I understanding correctly? The “client” in JACK is the plug-in (for in-process use), correct?<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">Finally, I’d like to get started seeing whether the eco-system works for low latency with existing apps and components for diving in. Is AVLinux the way to go, and is there any reason it will not work on BeagleBone?<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">I’m not a Linux expert in case you can’t already tell! It’s not that I have zero experience, but sometimes it’s close, depending on context.<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><p class="MsoNormal">But I do know audio, and operating system design, and threading, and SIMD, and etc.<u></u><u></u></p><p class="MsoNormal"> <u></u><u></u></p><ul type="disc"><li class="MsoNormal" style="margin-left:0in">Andy<u></u><u></u></li></ul><p class="MsoNormal"> <u></u><u></u></p><div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal"><b><span style="font-size:12.0pt;color:black">From: </span></b><span style="font-size:12.0pt;color:black">Linux-audio-user <<a href="mailto:linux-audio-user-bounces@lists.linuxaudio.org" target="_blank">linux-audio-user-bounces@<wbr>lists.linuxaudio.org</a>> on behalf of Paul Davis <<a href="mailto:paul@linuxaudiosystems.com" target="_blank">paul@linuxaudiosystems.com</a>><br><b>Date: </b>Tuesday, January 9, 2018 at 4:41 PM<br><b>To: </b>Benoît Rouits <<a href="mailto:brouits@free.fr" target="_blank">brouits@free.fr</a>><br><b>Cc: </b>linux-audio-user <<a href="mailto:linux-audio-user@lists.linuxaudio.org" target="_blank">linux-audio-user@lists.<wbr>linuxaudio.org</a>><br><b>Subject: </b>Re: [LAU] How to get started writing a JACK app?</span><u></u><u></u></p></div><div><p class="MsoNormal"> <u></u><u></u></p></div><div><div><p class="MsoNormal" style="margin-bottom:12.0pt"><span style="font-family:"Arial",sans-serif">please. not sourceforge.</span><u></u><u></u></p></div><div><p class="MsoNormal"><span style="font-family:"Arial",sans-serif">JACK code lives on github ...  <a href="https://github.com/jackaudio/example-clients" target="_blank">https://github.com/jackaudio/<wbr>example-clients</a></span><u></u><u></u></p></div></div><div><p class="MsoNormal"> <u></u><u></u></p><div><p class="MsoNormal">On Tue, Jan 9, 2018 at 6:21 PM, Benoît Rouits <<a href="mailto:brouits@free.fr" target="_blank">brouits@free.fr</a>> wrote:<u></u><u></u></p><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0in;margin-bottom:5.0pt"><p class="MsoNormal">Hello  Andy<br><br>as a starting point, you could look at:<br><br><a href="http://jackit.sourceforge.net/cgi-bin/lxr/http/source/example-clients/" target="_blank">http://jackit.sourceforge.net/<wbr>cgi-bin/lxr/http/source/<wbr>example-clients/</a><br><br>This is C client code samples for jack.<br><br>HTH,<br> Benoît<br><br>Le 09/01/2018 à 16:19, Andrew Voelkel a écrit :<br>><br>>     Hi,____<br>><br>>     __ __<br>><br>>     I’m new to this list. I’m thinking of giving low latency real time<br>>     audio in Linux another try after my last unsuccessful attempt a few<br>>     years ago. My goal is to put some of my own DSP code into a hardware<br>>     appliance and use it to process audio signals during music<br>>     rehearsals and performances.____<br>><br>>     __ __<br>><br>>     I think this boils down to getting an appropriate distro, getting<br>>     JACK working in a low latency configuration with a multichannel USB<br>>     interface. And then …____<br>><br>>     __ __<br>><br>>     Writing a JACK app to process the audio. ____<br>><br>>     __ __<br>><br>>     I’ve done some googling and found a lot about _/using/_ JACK, but<br>>     not much about writing a JACK app. ____<br>><br>>     __ __<br>><br>>     Are there any examples or tutorials out there?____<br>><br>>     __ __<br>><br>>     I’m already up to speed on doing C++ cross development with Eclipse.____<br>><br>>     __ __<br>><br>>     I’ve got a BeagleBone black sitting around here I could use to<br>>     experiment.____<br>><br>>     __ __<br>><br>>       * Andy____<u></u><u></u></p><div><div><p class="MsoNormal">><br>><br>><br>><br>> ______________________________<wbr>_________________<br>> Linux-audio-user mailing list<br>> <a href="mailto:Linux-audio-user@lists.linuxaudio.org" target="_blank">Linux-audio-user@lists.<wbr>linuxaudio.org</a><br>> <a href="https://lists.linuxaudio.org/listinfo/linux-audio-user" target="_blank">https://lists.linuxaudio.org/<wbr>listinfo/linux-audio-user</a><br>><br>______________________________<wbr>_________________<br>Linux-audio-user mailing list<br><a href="mailto:Linux-audio-user@lists.linuxaudio.org" target="_blank">Linux-audio-user@lists.<wbr>linuxaudio.org</a><br><a href="https://lists.linuxaudio.org/listinfo/linux-audio-user" target="_blank">https://lists.linuxaudio.org/<wbr>listinfo/linux-audio-user</a><u></u><u></u></p></div></div></blockquote></div><p class="MsoNormal"> <u></u><u></u></p></div><p class="MsoNormal">______________________________<wbr>_________________ Linux-audio-user mailing list <a href="mailto:Linux-audio-user@lists.linuxaudio.org" target="_blank">Linux-audio-user@lists.<wbr>linuxaudio.org</a> <a href="https://lists.linuxaudio.org/listinfo/linux-audio-user" target="_blank">https://lists.linuxaudio.org/<wbr>listinfo/linux-audio-user</a> <u></u><u></u></p></div></div></blockquote></div><p class="MsoNormal"><u></u> <u></u></p></div></div></div></div></div>
</blockquote></div><br></div>