Progress report, and an attempt to figure out what to do next. It is hard to write about the design issues without cranking out a full article.
Updated project file: PFTheremin.jar.
I’ve started collecting YouTubes of famouse examples, and then try to duplicate the sounds. It’s been an interesting exercise.
Can I publish a video with short clips from famouse uses: clip of Theremin himself playing, clip from “Day the Earth Stood Still”, “My Favorit Martian”, “Dark Shadows”, wav clip from Beach-Boys “Good Vibrations” and keep the shots under something like 5-10 seconds and have it be considered a “Fair Use”?
It would be nice to show this theremin recreating those sounds, to the best of its ability. Seems like a video like this could be made inexpensively (assuming the only additional footage is just deskcam and screenshots). I have a decent microphone, so it seems like it should be possible to make something like this to support sales without spending multiple thousands on video production. As an indy programmer, we get some latitude on video “polish”, yes?
Mulling (need to prioritize):
- Maybe make a finer discrimination on the pitch width: to the nearest 0.5 or 0.25 octave rather than just a number of octaves. [EDIT: Just changed it to 0.5. Haven’t uploaded yet.]
PURPOSE: can more finely tune the screen to spread an intended note range (e.g., you have a specific song in mind) over as much screen real estate as possible.
The function also addresses the pitch-range vs. accuracy problem, by allowing one to move the screen location of a pitch.
- Make the window resizable. This was partially addressed by making the settings panal have two sizes. To do this, I made the horizontal width a variable rather than a constant. That gets us partially there.
PURPOSE: again, addressing the pitch range vs accuracy issue.
- Add a couple more synths? I came across an algo for making an FM synth have a “formant”. If it works, it would be possible to make the Y-axis cover a range of vowel sounds. Could be going oooh-aaah-eeee-aaah with the synth. IF it works as a synth. Algo was from Bill Schottstaedt, mentioned in Charles Dodge’s “Computer Music” book.
Other synths might be an actual sawtooth or square via wave-table synthesis + filter, or some nice string synth options.
PURPOSE: more tonal qualities possible.
Add another “effect”, e.g., a flanger with standard modulator controls. Flangers are relatively easy effects to code. Or add some other effect? Chorus and distortion come to mind. If so, and a question in general: should the effects settings be part of the save/load? Or separate save/loads?
Record mouse/keyboard events as macros. Allow playback of macros. Allow export to wav of macros. (I am reluctant to simply try to put in a direct save-to-wav for various reasons.) I did some refactoring so that the data going to the audio player comes exclusively via the AnimationTimer (JavaFX) and not from the asynchronous inputs. This makes the input data 60FPS, and it should be straightforward to read from a “macro” file rather than from the “control” level variables.
Mouse tails? Design mouse cursors? What to do about skins on the design. Keep this color-scheme, keep it simple, or do something to give it a cooler look?
Ability to move or stretch the keyboard guide vertically?
8 ) Add an alternative “vibrato” key? (V? I am reserving for macro recording.) This would be used as an alternate way to intensify the vibrato for given pitches. The configuration could get complex: as we have both the amount it would add and the rate at which this additional vibrato would come on and drop off.
PURPOSE: theremin players often reserve vibrato for given notes, like a musician or singer would. On a real theremin, this is done with a separate hand, not with the mouse doing everying. Clear example: listen to “Good Vibrations” where the vibrato is mostly on the third note of the pattern that is played.
Come up with a better name for the program?
Free or $1 version and “deluxe” version (only a couple more $)? If so, what features would go on each?
I’m thinking of marketing on itch.io, for starters.
Definite TO-DO list:
- Clean up the use of .properties file. [I’ve been avoiding finshing/testing the details of save/load.]
- Add JVM so it can be stand-alone.
- Add “Help/instructions” (how much? post online link instead?) and “About” info.
- Make some patches to go along with the instrument.