createwav takes the following arguments (all optional), in no particular order:

- size=n resp. duration=T, where n resp. T is the total number of samples resp. the length in seconds,
- bit_depth=b, where b is the number of bits reserved for each sample value and may be 8 or 16 (by default 16),
- samplerate=r, where r is the number of samples per second (by default 44100),
- channels=c where c is the number of channels (by default 1),
- D or channel_data=D, where D is a list or a matrix,
- normalize=db, where db≤ 0 is a real number representing the amplitude peak level in dB FS (decibel "full scale") units.

Additionally, passing the desired number of samples n as a single argument produces a single-channel clip on 16 bits/44100 Hz containing n samples initialized to zero.

Data matrix should contain the k-th sample in the j-th channel at position (j,k). The value of each sample must be a real number in range [−1.0,1.0]. Any value outside this interval is clamped to it (the resulting effect is called *clipping*). If the data is provided as a single list, it is copied across channels. If the number of samples or seconds is provided alongside the data list/matrix, the rows are truncated or padded with zeros to match the desired length.

If the option normalize is given, audio data is normalized to the specified level prior to conversion. This can be used to avoid clipping.

For example, input :

s:=createwav(duration=3.5):; playsnd(s)

Output :

three and a half seconds of silence at rate 44100

Input :

wave:=sin(2*pi*440*soundsec(2)):;

s:=createwav(channel_data=wave,samplerate=48000):;

playsnd(s)

s:=createwav(channel_data=wave,samplerate=48000):;

playsnd(s)

Output :

two seconds of the 440 Hz sine wave at rate 48000

Input :

t:=soundsec(3):;

L,R:=sin(2*pi*440*t),sin(2*pi*445*t):;

s:=createwav([L,R]):; playsnd(s)

L,R:=sin(2*pi*440*t),sin(2*pi*445*t):;

s:=createwav([L,R]):; playsnd(s)

Output :

3 secs of a vibrato effect on a sine wave (stereo)