This is my final project for Parallel and Distributed computing.
It plays music using multiple networked computers and their motherboard speakers. My first (and hopefully only attempt) at this will be in golang.
This will only work on linux. It uses kernel level calls to get at the speaker.
In the cmd
directory, there are three programs.
- gobeep - this is a simple beeper program to make sure I know how to use the library
- conductor - responsible for gathering players and feeding them notes
- beepster - receive note commands from the conductor and plays them
- Original beep program
- ioctl implementation in go
- Programming the internal speaker
- Tour of golang
- Simple chat server
- Read gob data from a network connection
- First order functions in golang
- Learn go
- Play a beep with go
- Play different pitched beeps
- Create library for beeping
- Design test program which uses the library
- Learn goroutines
- Create a Player client
- Create a Conductor server
- Simple test to play across network connection
- Sync multiple computers to play together
- Play Row, Row, Row Your Boat in a round
- Two clients synced with one server
- Polish server and client
- Handle when the songs over intelligently
- Move song definition and creation out of main, too much clutter
- Remove debug output
- Play
midiMusicXML?!- Can create two tracks for two computers to play in sync
- Handle chords without going out of sync
- Handle ties correctly (no note delay)
- Handle articulaton (change delay)
- Handle transposition
- Test for robustness
- General Polish
- Error handling in library (pass to actual program)
- Document everything, add program usage examples, also limitiations
- Let a conductor take less computers than there are parts (ignore the rest)
- Handle compressed mxl documents, because XML is very verbose
- Make gobeep a better alternative to the beep program, handle all original