Skip to content

BillyDM/rtaudio-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RtAudio-rs

Documentation Crates.io License

Safe Rust wrapper and bindings for RtAudio (version 6).

Usage Example

use rtaudio::{Api, Buffers, DeviceParams, SampleFormat, StreamInfo, StreamOptions, StreamStatus};

fn main() {
    let host = rtaudio::Host::new(Api::Unspecified).unwrap();
    let out_device = host.default_output_device().unwrap();

    let mut stream_handle = host
        .open_stream(
            Some(DeviceParams {
                device_id: out_device.id,
                num_channels: 2,
                first_channel: 0,
            }),
            None,
            SampleFormat::Float32,
            out_device.preferred_sample_rate,
            256,
            StreamOptions::default(),
            |error| eprintln!("{}", error),
        )
        .unwrap();

    let mut phasor = 0.0;
    let phasor_inc = 440.0 / stream_handle.info().sample_rate as f32;

    stream_handle
        .start(
            move |buffers: Buffers<'_>, _info: &StreamInfo, _status: StreamStatus| {
                if let Buffers::Float32 { output, input: _ } = buffers {
                    // By default, buffers are interleaved.
                    for frame in output.chunks_mut(2) {
                        // Generate a sine wave at 440 Hz at 50% volume.
                        let val = (phasor * std::f32::consts::TAU).sin() * 0.5;
                        phasor = (phasor + phasor_inc).fract();

                        frame[0] = val;
                        frame[1] = val;
                    }
                }
            },
        )
        .unwrap();

    // Wait 3 seconds before closing.
    std::thread::sleep(std::time::Duration::from_millis(3000));
}

Prerequisites

CMake is required on all platforms.

Linux

apt install cmake pkg-config libasound2-dev libpulse-dev

If the jack_linux feature is enabled, then also install the jack development headers:

apt install libjack-dev

MacOS

Install CMake: Option 1

Download at https://cmake.org/.

Install CMake: Option 2

Install with Homebrew:

brew install cmake

Windows

Install CMake

Download at https://cmake.org/.

Features

By default, Jack on Linux and ASIO on Windows is disabled. You can enable them with the jack_linux and asio features.

rtaudio = { version = "0.3.2", features = ["jack_linux", "asio"] }

Notes

Bindings were made from the official C header. No bindings to the C++ interface are provided.

This currently builds a static library from source on all platforms. Once RtAudio version 6 is commonly available in Linux package managers I might change it to link to the dynamic library on Linux.

I haven't figured out how to get Jack on MacOS to work yet. If you know how to install and link the Jack libraries on MacOS, please let me know.

I haven't thoroughly tested every API on every platform yet. If you run into any bugs or issues with building, please create an issue.

About

Safe Rust wrapper and bindings to RtAudio

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages