Hey everybody, Novocaine is my baby, and it's completely awesome to see folks already using it.
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.
Your timing couldn't be better. I was literally in the process of trying to figure out how the heck the SpeakHere demo actually works -- now maybe I don't have to.
It would be nice to have a little more documentation. How do you set audio sample formats? (I assume you can.)
Documentation will be forthcoming. What do you mean by audio sample formats? One of the things I tried to do was make sure that you never, ever, EVER have to think about anything but floating point audio. In my experience, audio comes in as either float or SInt16s (I've never seen fixed-point coming in by default, but I haven't done an enormous amount of odd-peripheral Mac audio), and novocaine just handles it for you.
I've done a bunch of work with PortAudio on OS X. I only ever wanted a stream of Float32, and was annoyed with the setup required. This looks like what I wanted but didn't think to ask for. It would also be great if it were a C api.
In what sense?
Linux has a number of ways of accessing the audio device, from the simple Open Sound System (OSS), to Advanced Linux Sound Architecture (ALSA), and Jack Audio Connection Kit (JACK).
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.
Consider the ISC License [1]. "It is functionally equivalent to the Simplified BSD License, with language "made unnecessary by the Berne convention" removed. Initially used for the ISC's own software releases, it has since become the preferred license of OpenBSD (starting June 2003), among other projects."
Wow, this is really useful, I'd love to attend to your conference, but I'm a little too much to the south (Argentina) to attend. Is there any chance to get the conference transcript or a recording of any kind after the event? It'd be of real help in my current project.
This looks great. Most audio and image processing libraries are a pain and I always end up wrapping them in something like this. It is nice to see someone open source a well written wrapper.
Whoa this look great! I haven't had a chance to dig through, but is it possible to capture the audio that's being played? I'm thinking of recording gameplay audio. Thanks!
Ah, interesting, reminds me of RtAudio. (Similar thing for C++, though this seems to require even less boilerplate.. on the other hand RtAudio is cross-platform.)
I'm thinking of abstracting out some of the quirks and open-sourcing the audio engine at some point, but it isn't nearly as intuitive or compatible as this library as it was developed recently along with the application that uses it...
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.
By vector operations do you mean using something like the Accelerate framework? or SSE/NEON primitives? or just retooling your code so that your compiler can make attempts to vectorize when possible?
I'm a bit new to this stuff, so I'm not exactly sure to be honest! It looks like he is piping several array operations through Accelerate, and I suspect there is at least one part of my render callback function that would finish faster with appropriate vectorization.
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.
Correct me if I'm wrong, but isn't Novocaine still an abstraction layer that interfaces with Core Audio (I haven't had a moment to look at the sources yet)? I understand that it's simpler to deal with, but how is it more "high-performant" than working with Core Audio directly?
I think he means "painless" in comparison with working directly with audio units, and "high-performance" in comparison with the higher-level abstractions provided by Apple.
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.
I really like the name. Doing Core Audio development on its own can be almost as bad as having dental work done, if you don't know what you're doing. Novocaine makes things better.
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…)
Because it gives you absolutely no idea what the product actually does, and it's un-googleable. Try googling novocaine - guess what, you won't find this in the first page of results. Good luck with it. I'm sure it may be one awesome piece of software, but the name is just dumb.
> Try googling novocaine - guess what, you won't find this in the first page of results. Good luck with it. I'm sure it may be one awesome piece of software, but the name is just dumb.
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.
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