Hi everyone,
I’m excited to announce a new suite of packages designed for sampled signal communications. These tools enable high-performance, low-latency signal processing entirely in native Julia—from hardware I/O to file storage.
The Core Philosophy: Literate & Surgical
My goal is to provide a unified ecosystem that brings the “literate programming” feel of Images.jl to 1D sampled data, while simultaneously providing surgical control over the signal path with extensive customizability and high code reuse.
The ecosystem is built to feel completely integrated yet highly flexible: data loaded via the file parser flows naturally into the hardware transport and can be probed, inspected, or modified at any stage with a literate feel. By leveraging Julia’s type system, the engine annihilates boilerplate by inferring parameters at compile time—enabling self-documenting code that executes with zero-cost efficiency.
The Initial Stack
-
SamplesCore.jl: The foundation. Just as
ImageCore.jltreats a pixel as a single unit, this revolves around theSample—the “Pixel” of the signal world. It provides the abstract traits and literate types (including nativeInt24andQ0f23support) needed to write generic algorithms that treat a single point in time as a first-class citizen. -
SoundIO.jl: A high-performance transport built on
libsoundio. It uses compile-time specialization to generate optimized, branchless hardware callbacks on the fly.-
Unified Synchronization: The library provides highly customizable, bidirectional mechanisms for both ends of the streaming spectrum:
-
The “Flow” Model (Frozen Audio Buffer): A unique, versatile mechanism that turns standard Julia arrays into managed ring buffers.
-
The “Reactive” Model (Audio Callback Synchronizer): Engineered for the lowest possible latency, notifying Julia tasks for every hardware event.
-
-
Extensible Infrastructure: Beyond the built-in mechanisms, users can define custom synchronizers and transport layers by inheriting from
<:SoundIOSynchronizer, benefiting from the library’s type-specialized pipeline. -
Interactive Design: Includes a “GUI-like” text interface for REPL-based hardware exploration and Symbol-based error handling.
-
-
WavNative.jl: A high-performance, pure-Julia
.wavparser. It leverages core traits to provide unfiltered, literate input streams. It is designed for speed and raw data integrity, ensuring data is loaded with no modifications unless you explicitly ask for conversion.
Current Status & Roadmap
These libraries are currently in pre-release. I have intentionally “cranked up” performance optimizations, prioritizing raw access and speed.
-
Roadmap: While WavNative currently focuses on a fast-path for mapping disk data to arrays, future updates will include a streaming I/O implementation and allow user-defined functions to process signals while allowing high performance and self-documenting code.
-
Beyond Audio: The architecture is built for any regularly sampled telemetry, from Biomedical signals (ECG/EEG) and Industrial sensors to Low-latency control loops in robotics.
I’d love to hear your thoughts on the architecture and see how these might fit into your DSP and communication workflows!
Acknowledgments
I would like to thank:
-
Andrew Kelley, the developer of libsoundio, for such a fantastic and robust C library.
-
The Images.jl developers for providing the architectural guidance and the concept of literate programming that inspired this ecosystem.
-
The Julia developers for creating such an awesome language that truly allows us to “have our cake and eat it too”—achieving high-level expressiveness without sacrificing low-level performance.