Next Steps - msmallegan/cicada GitHub Wiki
Our first step will just be to get two laptops to produce two separate tones, and converge on each other by listening to the microphone port.
We'll start by exploring audio capabilities in Python. It looks like Friture ( http://friture.org/ ) will be relevant. They are using pyaudio ( http://people.csail.mit.edu/hubert/pyaudio/ ) to get audio from the microphone.
Also, if we end up going the hybrid app route to use the iPads, here's Ionic: http://ionicframework.com/
Pitch detection
The "pitch detection problem" apparently has a long history: http://en.wikipedia.org/wiki/Pitch_detection_algorithm It seems that doing it well requires fiddling, so we probably want to use something someone's already written...
Some potential Python algorithms:
- YAAPT (though more often used for speech?) http://ws2.binghamton.edu/zahorian/yaapt.htm https://pypi.python.org/pypi/AMFM_decompy/1.0.1
- https://gist.github.com/endolith/255291
- aubio http://aubio.org/ e.g. http://aubio.org/manpages/latest/aubiopitch.1.html
To do 11/3/2014
- More pleasant sound! (MIDI?)
- (Eventually) Multiple platforms
- Look into www.pygame.org
- Try chords?
- Web-based database for visualizations
- Signal propagation with many individuals
To do 11/17/2014
- Tempo/rhythm matching
- Use frequency plots from real-world examples (e.g. orchestra tuning, or more random process)
To do 12/8/2014
- Send pitches to server for plotting
- Get running on Windows laptops
To do 12/15/2014
Time to do a web-based implementation!
- Sound input and Pitch detection: https://github.com/cwilso/pitchdetect
- Sound output using p5js and WebGL: http://p5js.org/learn/examples/Sound__Note_Envelope.php
- (Can also do sound input with p5js: http://p5js.org/learn/examples/Sound_Mic_Input.php )
- More info about p5.js (we probably want "instance mode"): https://github.com/lmccart/p5.js/wiki/p5.js-overview#instantiation--namespace
- Another HTML tuner: http://www.leshylabs.com/apps/tuner/
- An HTML Guitar tuner: http://www.freetuner.co/
- A tuner which is supposed to show autocorrelation: http://deibelman.github.io/dart-mic/demo.html
- Signal processing for javascript: https://github.com/corbanbrook/dsp.js/
To Do 1/28/2015
- Initialize frequencies randomly
- Dropdown on positions
- Don't send data until a valid position is set.
- Implement multiple stepping methods & allow for changes to gap duration.
- Pause button.
- Curmudgeon button?
- Make old cicadas disappear
- Historical visualization