Would SampledTypes maybe be a bit clearer? Otherwise it reads a bit like it 
would contain examples.


On Sunday, March 20, 2016 at 2:31:28 AM UTC-7, Spencer Russell wrote:
>
> Hey there, Julians.
>
> So AudioIO has been languishing for some time now, and I’ve been busily 
> working away at the next generation. One of the issues with AudioIO is that 
> it was a lot to swallow if you just wanted to play or record some audio. 
> I’ve been focusing on getting the fundamental APIs right, so that the fancy 
> stuff can be built on top.
>
> There’s a new JuliaAudio <https://github.com/JuliaAudio> organization and 
> 5 shiny new packages. They’re still pretty young, but most of them have 
> good test coverage. I’m planning on registering to METADATA soon, but I 
> wanted to solicit some feedback first.
>
> SampleTypes.jl <https://github.com/JuliaAudio/SampleTypes.jl> is the most 
> important as it defines the architecture that glues together the rest of 
> the packages. It defines a set of stream and buffer types that should make 
> it easy to move sampled data around. It’s called SampleTypes instead of 
> AudioTypes because it should be useful for any sort of regularly-sampled, 
> multi-channel data (e.g. complex samples from an SDR, multi-channel EEG, 
> etc.). The types are sample-rate aware, and the samplerate can be stored in 
> real units using SIUnits.jl. That allows cool features like reading in data 
> using seconds instead of samples. 
>
> Part of the idea with SampleTypes is to make it really easy to plug in a 
> streaming audio backend, for instance SampleTypes handles conversion 
> between formats, channel counts, and sample rates (currently just linear 
> interpolation), so the underlying device libraries don’t have to. SampleBuf 
> (the buffer type) is an AbstractArray, and it should be pretty drop-in 
> replaceable to normal Arrays, but with extra goodies. If there are cases 
> where it doesn’t act like an Array please file an Issue.
>
> LibSndFile.jl <https://github.com/JuliaAudio/LibSndFile.jl> and 
> PortAudio.jl <https://github.com/JuliaAudio/PortAudio.jl> used to be part 
> of AudioIO, but are now separate packages. They wrap well-established 
> cross-platform C libraries for interacting with files and real-time audio 
> devices, respectively.
>
> LibSndFile has been designed to work with FileIO, so loading a file is as 
> easy at `load(“myfile.wav”)` and it will figure out the format from the 
> extension and magic bytes in the file header.
>
> PortAudio.jl has been massively simplified from what was in AudioIO. Test 
> coverage is at 95%, but because PortAudio doesn’t provide a way to simulate 
> input the tests aren’t very strong. They also don’t run on Travis.
>
> JACKAudio.jl <https://github.com/JuliaAudio/JACKAudio.jl> is a wrapper 
> for libjack, a great audio routing tool designed for low-latency, pro audio 
> applications. Unfortunately we’re not yet at the point where we can get 
> super low latency from Julia, but it’s working pretty well now and I think 
> there’s still room to tune it for better performance.
>
> RingBuffers.jl <https://github.com/JuliaAudio/RingBuffers.jl> is a small 
> utility package that provides the RingBuffer type. It’s a fixed-size 
> multi-channel circular ringbuffer with configurable overflow/underflow 
> behavior. It uses normal Arrays and is not specific to this architecture, 
> except that is assumes each channel of data is a column of a 2D Array.
>
> Here’s a screenshot from the PortAudio README that gives a good flavor for 
> the sort of things these packages can do together:
>
>
> Please kick the tires and let me know what doesn’t work or is confusing. 
> Also, if you maintain an audio-related package and want to plug into this 
> architecture, I’d be happy to start growing the JuliaAudio organization 
> both in maintainers and packages.
>
> -s
>

Reply via email to