Read the data of a single channel from a stereo wave file in Python
Question: I have to read the data from just one channel in a stereo wave file in Python.
For this I tried it with scipy.io:

    
    
    import scipy.io.wavfile as wf
    import numpy
    
    def read(path):
        data = wf.read(path)
        for frame in data[1]:
            data = numpy.append(data, frame[0])
        return data
    

But this code is very slow, especially if I have to work with longer files. So
does anybody know a faster way to do this? I thought about the standard _wave_
module by using _wave.readframes()_ , but how are the frames stored there?


Answer: [`scipy.io.wavfile.read`](http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.wavfile.read.html)
returns the tuple `(rate, data)`. If the file is stereo, `data` is a numpy
array with shape `(nsamples, 2)`. To get a specific channel, use a
[slice](http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html) of
`data`. For example,

    
    
    rate, data = wavfile.read(path)
    # data0 is the data from channel 0.
    data0 = data[:, 0]
    

