rportaudio 0.1.1

PortAudio bindings for Rust
Documentation
static SECONDS: usize = 1;

fn main() {
  rportaudio::initialize().unwrap();
  print_devs();
  println!("{:?}", demo());
  rportaudio::terminate().unwrap();
}

fn print_devs() {
  for i in 0..rportaudio::device::count().unwrap() {
    match rportaudio::device::info(i) {
      None => {}
      Some(info) => println!("{}: {}", i, info.name),
    }
  }
}

fn demo() -> rportaudio::rpa_error::PaResult {
  let stream = rportaudio::stream::Stream::open_default(1, 1, 44100.0, rportaudio::stream::FRAMES_PER_BUFFER_UNSPECIFIED, None)?;

  stream.start()?;

  let input = stream.read(44100)?;

  let mut phase = 0.0f32;
  let mut buffer = Vec::with_capacity(44100 * SECONDS);
  for _i in 0..44100 * SECONDS {
    buffer.push(phase);

    phase += 0.007;
    if phase > 1.0 { phase -= 2.0; }
  }

  let waiter = std::thread::spawn(move || {
    std::thread::sleep(std::time::Duration::from_secs(SECONDS as u64));
  });

  match stream.write(&*buffer) {
    Err(e) => { println!("write 1: Err({:?})", e); }
    Ok(()) => {}
  }

  match stream.write(&*input) {
    Err(e) => { println!("write 2: Err({:?})", e); }
    Ok(()) => {}
  }

  let _ = waiter.join();

  Ok(())
}