synthesizer: iterate over samples in a duration

Given a `duration` and `sample-rate`, this iterates from time 0 to
duration as `t` in increments of `1/sample-rate`. Thus, `t` at each
step is the time at which each sample occurs.

This is the basis of a synthesizer loop.

The output is such that it can be fed into a spreadsheet program.
synthesizer: generate a sine wave at 440Hz
synthesizer: send the audio to the default device
synthesizer: support amplitude (volume)
synthesizer: support specifying the device name
synthesizer: support recording to a file
ogg: support the float32le sample format
wav: support the s8 and float32le sample formats