Novocaine: painless high-performance audio on iOS and OS X
alexbw.github.com
alexbw.github.com
For the record, it's open-source, I just forgot to stick the MIT license at the top. Or would folks prefer BSD? Let me know, I'm flexible. The only thing I care about is that people use it to make awesome software.
If anybody's a Boston local, I'll be talking about iOS audio (both novocaine and some fancier frequency analysis, I hope) at the Berklee College of Music CS club tomorrow, 6-8pm, at 150 Mass Ave, room 118.
And, if you dig novocaine, check out the apps I made with it: http://itunes.apple.com/us/artist/alex-wiltschko/id344345862
It would be nice to have a little more documentation. How do you set audio sample formats? (I assume you can.)
[[Novocaine audioManager] setInputBlock:^(float * inData, UInt32 numSamples, UInt32 numChannels) { for (int i=0; i < numSamples * numChannels; ++i) { dataForVoip[i] = YourType(inData[i]) * someScaling; } }];
Here's a question - what does Linux audio lack for you to be able to pull of something like Novocaine ?
JACK has become the most popular framework for nontrivial sound applications, but there is good support for the other interfaces as well. There is also no major shortage of applications for either sound generation or analysis. Compared to the applications listed, baudline provides a much more through analysis for instance.
Thanks!!
Made by a developer I met at WWDC. Good stuff and he puts a whole lot of love into them.
Cheers
On top of that, no vector operations or ring buffers are currently implemented, so I wouldn't be surprised if this library has significantly better performance. I do have a bit of a wish list of features to add to my code after taking a look at some of the techniques used here. It's complicated work, but I've never had a better experience learning a complicated system.
My implementation basically added a playback and mixing interface to the audio engine from this sample mixer project: http://developer.apple.com/library/ios/#samplecode/MixerHost...
If anyone has any relevant tips about how the Obj-C LLVM or whatever it is actually works and what it means for low-latency audio, please do share. My current strategy is ruthless and minimal static allocation but I don't know what is best.
Having tried my hand at core audio code a few times, this is an amazingly simple API. I've got some app ideas I'd like to use this in.
A lot of web projects are "un-googleable", especially when they are first kicking off. Django would be a good example of this—searching for "Django" would often return results about Django Reinhardt, a jazz musician, instead of the web framework.
I think it's a fair assumption to say that an interested programmer might think to append github[1] or audio[2] to their search, in which case the result is in the top 3.
[1] https://duckduckgo.com/?q=novocaine+github [2] https://duckduckgo.com/?q=novocaine+audio
I also assumed it was an Eels reference, which I found catchy and means I will remember it in the future.
That seems like a pretty good "hook" to hang your audio library off (I guess targeting your audio library marketing to people who were listening to pop music in 1996 is a questionable tactic though…)