A miniature tone generator written in Ruby, intended to show how to create a minimal Ruby program that generates sound.
For a detailed description of how it works, check out this blog post: https://www.joelstrait.com/nanosynth/
- Download
nanosynth.rb
- Install the WaveFile gem:
gem install wavefile --version 1.1.1
NanoSynth expects 3 arguments: the waveform, frequency, and amplitude. It will then generate 1 second of sound and write it to a file called mysound.wav
in the current directory.
ruby nanosynth.rb <waveform> <frequency> <amplitude>
For example:
ruby nanosynth.rb square 440.0 0.2
The command above will generate a square wave of 440Hz, at 20% full volume, and write it to mysound.wav
in the current directory.
The waveform can be one of sine
, square
, saw
, triangle
, or noise
.
The amplitude should be between 0.0 (silence) and 1.0 (full volume). Amplitudes above 1.0 will result in clipping distortion.