Crate cybergrape
source ·Expand description
CyberGrape consists of a system of tactile blocks that represent audio sources, or audio blocks, that track their angle and movement relative to a central block, called the listener block. As audio blocks and the listener block move relative to each other, their relative angles are recorded. A software pipeline should be able to either encode the streamed positional data into a well-defined serialization format or create spatial audio directly using user-provided audio data.
This is the host-side software that makes all of that happen, to see the embedded software, take a look at this GitHub repository.
You can find our final report in this documentation site.
This is the 2023/2024 senior capstone project for Team CyberGrape, which is comprised of Ayda Aricanli, Skylar Gilfeather, Liam Strand, and Tyler Thompson.
Modules§
- Command line argument parser using clap for CyberGrape
- Defines the Component trait, which was going to be used by each CyberGrape processing module.
- A dummy implementation of a
HardwareDataManager
that pretends that there is a static circle of sound sources around the listener - The various functions and utilities that wrap around ratatui to make our project look nice.
- An interface definition for the hardware/software barrier.
- A combinator parser built with nom that reads u-blox events.
- The thread-safe buffer where we will store
UUDFEvent
s from the antennas. - A wrapper for the hound library that writes binauralized audio to the user-speciifed output file.
- Converts radial points into cartesian points
- Our final report for the CyberGrape project
- A safe api into the Spatial Audio Framework.
- saf_raw 🔒This module places unsafe SAF rust bindings in the crate under their own namespace.
- This module provides an API to read and write GrapeFiles, a file format developed to contain spatial data in the time domain. The files have the following structure:
- The system for converting readings from two antenna into one spherical coordinate.
- Where we store our time-domain spatial data.
- Stores the most recent
Update
for any given source/destination pair.
Structs§
- An iterator function that transposes the order of iteration based on this StackOverflow answer. I think this might stall on an empty iterator…not sure