If I were feeling verbose I would say it’s a collection of types for managing multi-channel data sampled on a 1D uniform grid. Basically it provides stream (read/write) and buffer (array-like, random access) types for any regularly-sampled data, like EEG, Software-defined radio (complex samples), and audio. The samples themselves (in the sense of individual point measurements) are just a type parameter T.
I see your point Tony about “Sample” in the sense of “Example”. My brain doesn’t like to say “SampledTypes” though. Maybe just “Sampled.jl” (though that could be confused with other “samples”, like sampling from a distribution). “SampledSignals.jl” maybe? -s > On Mar 20, 2016, at 7:35 PM, Stefan Karpinski <[email protected]> wrote: > > I think it's a package of types for defining samples, not a collection of > types which are sampled, so I don't think that would be clearer (unless I'm > misunderstanding what the package is for). > > On Sun, Mar 20, 2016 at 7:10 AM, Tony Kelman <[email protected] > <mailto:[email protected]>> wrote: > 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 >
