Skip to content

Repository files navigation

moon_cpal

CPAL-like audio I/O for MoonBit (native-only).

Install

Add dependency in moon.mod:

{
  "deps": {
    "moonbit-community/moon_cpal": "0.11.6"
  }
}

moon_cpal supports native target only.

Quick Start (Typed Output Stream)

let host = @moon_cpal.default_host()
let device = match host.default_output_device() {
  Some(d) => d
  None => fail!("no output device")
}
let cfg = try! device.default_output_config()
let stream_cfg = cfg.config()
let stream = try! device.build_output_stream_f32(
  stream_cfg,
  fn(samples, _info) {
    for i = 0; i < samples.length(); i = i + 1 {
      samples[i] = 0.0
    }
  },
  fn(err) { println("stream error: \{err}") },
  None,
)
try! stream.play()

Quick Start (Raw Output Stream)

Use build_output_stream_raw when you need format-specific writes:

///|
let stream = try! device.build_output_stream_raw(
  stream_cfg,
  cfg.sample_format(),
  fn(data, _info) {
    match data.sample_format() {
      @moon_cpal.SampleFormat::F32 =>
        ignore(data.write_f32(Array::make(data.len(), 0.0)))
      @moon_cpal.SampleFormat::I16 =>
        ignore(data.write_i16(Array::make(data.len(), 0)))
      @moon_cpal.SampleFormat::I24 =>
        ignore(data.write_i24(Array::make(data.len(), @moon_cpal.I24::new(0))))
      _ => data.clear()
    }
  },
  fn(_err) {  },
  None,
)

Data exposes full numeric write APIs: write_i8, write_u8, write_u16, write_i16, write_u24, write_i24, write_u32, write_i32, write_f32, write_u64, write_i64, write_f64.

Notes

  • Use stream.pause() / stream.close() to control lifecycle.
  • Use default_input_device() + build_input_stream_* for capture.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages