[sdiy] Newbie code porting question

Justin Owen juzowen at gmail.com
Fri Apr 26 12:48:40 CEST 2013

Thanks Brian - interesting answer.

I should have pointed out this isn't something I was considering doing myself. I was more interested in the feasibility of the concept. 

Seems like maybe it's feasible, maybe it's not - good odds!



-----Original Message-----
From:  [rsdio at sounds.wa.com]
Received: 25.04.2013 22:26:12
To: Justin Owen
Cc: SDIY List
Subject: Re: [sdiy] Newbie code porting question

On Apr 25, 2013, at 09:30, Justin Owen wrote:
> Brian Willoughby touched on a point I've been meaning to ask for  
> ages...
> "...porting a VST from a DAW to an embedded, battery-powered
> platform is much, much harder than porting a VST to AU"
> In general, is it feasible to consider porting code from software  
> e.g. a plug-in or an app to code used in embedded hardware or (in  
> general) would there be so little common ground between the two  
> sets of code (or the two platforms) that you'd (generally) be  
> better off starting with code dedicated to the platform you were  
> running?

If you're just starting, then think of the porting process as  
multiple steps.

First, you need to become familiar with the original code. In that  
sense, it's probably quite worthwhile for a new programmer to study  
existing code to the point where it is mostly understood.  
Unfortunately, this should probably be done in the original  
environment, e.g., VST host, and thus it's not porting at this stage.  
But if you can gain an understanding of the existing code, then  
you'll probably learn a lot about the DSP techniques involved.

Second, you need to really understand the strengths and weaknesses of  
the target platform. These are less about the task at hand and more  
about the general capabilities. Is there DMA? Is the CPU fast enough  
to respond to an interrupt per sample? What is the overhead of the  
interrupt call on this particular processor? Are there ramifications  
to doing major work in an interrupt routine? What is the operating  
system that you'll use, if any at all?

After studying both sides of the equation, you'll know whether the  
specific porting process you're considering has enough common ground  
to make the effort worthwhile. If there is too little common ground,  
at least you now fully understand the original code, and can perhaps  
rewrite the algorithms from scratch (or from building blocks  
available on the target platform) using that new knowledge. If there  
is common ground, you'll probably have a much better chance fitting  
the pieces into the new system.

DSP often involves some heavy weight math subroutines that are  
generally available on every platform. I've even ported VST code  
where the operating system and DAW stayed the same, but the math  
libraries changes. Apple offers Accelerate.framework and vecLib,  
supporting multiple processors. Intel offers common DSP that  
leverages SSE for optimization. Embedded systems hopefully implement  
these same math functions, but if they don't then you'll need to pull  
them together yourself. This is just one example where understanding  
high-level concepts about DSP allows you to swap out equivalent  
pieces even though the overall C code remains largely unchanged. In  
fact, optimization is one major area where code might not be  
portable, because what is optimal for one platform might be terribly  
inefficient for another.

You can't learn this without diving in, but I'd suggest working on  
open source "in place" for a while in order to become familiar with  
it before trying to port to a new platform. You can also play around  
with simpler code on the new platform until you're ready to try to  
get a large code base running.

Brian Willoughby
Sound Consulting

More information about the Synth-diy mailing list