How to write stereo wav files in Python?
Question: The following code writes a simple sine at frequency 400Hz to a mono WAV file.
How should this code be changed in order to produce a **stereo** WAV file. The
second channel should be in a different frequency.

    
    
    import math
    import wave
    import struct
    
    freq = 440.0
    data_size = 40000
    fname = "WaveTest.wav"
    frate = 11025.0  # framerate as a float
    amp = 64000.0     # multiplier for amplitude
    
    sine_list_x = []
    for x in range(data_size):
        sine_list_x.append(math.sin(2*math.pi*freq*(x/frate)))
    
    wav_file = wave.open(fname, "w")
    
    nchannels = 1
    sampwidth = 2
    framerate = int(frate)
    nframes = data_size
    comptype = "NONE"
    compname = "not compressed"
    
    wav_file.setparams((nchannels, sampwidth, framerate, nframes,
        comptype, compname))
    
    for s in sine_list_x:
        # write the audio frames to file
        wav_file.writeframes(struct.pack('h', int(s*amp/2)))
    
    wav_file.close()
    


Answer: Build a parallel `sine_list_y` list with the other frequency / channel, set
`nchannels=2`, and in the output loop use `for s, t in zip(sine_list_x,
sine_list_y):` as the header clause, and a body with two `writeframes` calls
-- one for `s`, one for `t`. IOW, corresponding frames for the two channels
"alternate" in the file.

See e.g. [this](http://www.sonicspot.com/guide/wavefiles.html) page for a
thorough description of all possible WAV file formats, and I quote:

> Multi-channel digital audio samples are stored as interlaced wave data which
> simply means that the audio samples of a multi-channel (such as stereo and
> surround) wave file are stored by cycling through the audio samples for each
> channel before advancing to the next sample time. This is done so that the
> audio files can be played or streamed before the entire file can be read.
> This is handy when playing a large file from disk (that may not completely
> fit into memory) or streaming a file over the Internet. The values in the
> diagram below would be stored in a Wave file in the order they are listed in
> the Value column (top to bottom).

and the following table clearly shows the channels' samples going left, right,
left, right, ...

