Generating audio with GNU Octave

The following script writes a single audio channel to a wav file. The 5 second long tone is a sine wave of 4Hz with 30% fade in and fade out.

bps = 16;       % bits per sample
sps = 8000;     % sample rate [samples/s]
freq = 4;       % frequency of the tone [Hz]
nsecs = 5;      % number of seconds of the audio file

nsamples = sps*nsecs;

time = linspace(0, nsecs, nsamples);
wave = sin(time*2*pi*freq)';

% create the amplitude window (creates the fade in and fade out when multiplied with the sine wave)
a = b = floor(.3*nsamples);
window = [linspace(0,1,a), ones(1,nsamples-a-b), linspace(1,0,b)]';

wavwrite(wave.*window, sps, bps, 'audio.wav')

An audio file can be read back using wavread(). Channels are saved each one as separate column in the resulting vector.