#dac

nannou_laser

A cross-platform laser DAC detection and streaming API

10 releases (6 breaking)

0.19.0 Jan 17, 2024
0.18.0 Nov 18, 2021
0.17.0 Jun 20, 2021
0.16.0 Apr 22, 2021
0.3.0 Jun 8, 2019

#23 in #dac

MIT/Apache

135KB
2.5K SLoC

nannou_laser Crates.io Crates.io docs.rs

A cross-platform laser DAC detection and streaming API.

nannou_laser aims to be a higher-level API around a variety of laser protocols providing a unified interface for detecting DACs and streaming data to them.

Features

  • DAC Detection: Detect all DACs available to the system.
  • Specify maximum latency: Choose how much latency you wish to allow for achieving the right balance between stream stability and low-latency to suit the DAC.
  • Frame Streams: Stream data to the DAC as a sequence of 2D vector images without worrying about details like path optimisation, etc.
  • Raw Streams: While frame streams are convenient, sometimes direct access to the lower-level raw DAC stream is required (e.g. when visualising a raw audio stream). This can be accessed via the RawStream API.
  • Frame Optimisation: nannou_laser implements the full suite of optimisations covered in Accurate and Efficient Drawing Method for Laser Projection by Purkhet Abderyim et al. These include Graph optimisation, draw order optimisation, blanking delays and sharp angle delays. See the paper for more details.
  • Custom frame rate: Choose the rate at which you wish to present frames. nannou_laser will determine the number of points used to draw each frame using the connected DAC's points-per-second.

Note: Higher level features like pattern generators and frame graphs are out of scope for nannou_laser, though could be built downstream. The priority for this crate is easy laser DAC detection and high-quality, high-performance data streams.

Supported Protocols

Currently, nannou_laser only supports the open source Ether Dream DAC protocol. The plan is to progressively add support for more protocols as they are needed by ourselves and users throughout the lifetime of the project.

License

Licensed under either of

at your option.

Contributions

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~3.5MB
~58K SLoC