nannou-org / ether-dream

A full implementation of the Ether Dream Laser DAC protocol in pure Rust.
Other
32 stars 1 forks source link

Asyncify the dac_emulator with `smol`. Improve visualiser example. Publish dac-emulator 0.3. #17

Closed mitchmindtree closed 4 years ago

mitchmindtree commented 4 years ago

This makes the dac_emulator far more concise by using futures to represent I/O, broadcast timer and point emission timers.

The visualiser has also been vastly improved. Rather than retrieving "frames" from the LASER DAC, we instead create a "persistence of vision" effect based on how recently the point was emitted. The weight and luminosity of the lines are affected by the points age. This could be made more efficient by using the point rate to determine the age rather than creating a new instant for every emitted point, update and frame. Independent points should also now appear correctly, whereas before they were discarded by the renderer.

Publishes ether-dream-dac-emulator version 0.3.

NOTE: Currently, the dac-emulator produces a stream that yields an individual point at the specified point rate. This is highly CPU intensive and will likely fall apart at very high point rates (10khz+). The plan is to swap out this per-point emission rate in favour of buffering points over a user-specified window of time, but I have not yet had the time to implement this.