[SciPy-User] butterworth filter on .WAV file
Fabrice Silva
silva at lma.cnrs-mrs.fr
Thu Jul 8 09:21:20 EDT 2010
Le jeudi 08 juillet 2010 à 13:00 +0100, Peter Howard a écrit :
> Hang on a minute - my brain is working backwards... am I wasting
> everyone's time here...
>
> If a .WAV file contains stereo sound data - then it's never going to
> work sucking it in and simply applying a filter to the numbers is it?
>
> So how come it sort of works?
>
> Or is the entire NumPy/SciPy suite so clever about working in
> N-dimensions that it treats the two sound channels as
> multi-dimensioned arrays right from the .WAV read() call? - and the
> filtering is separate for each dimension?
>
So you might consider NumPy/SciPy clever! When reading a wav file, the
output array is a 2D array with shape (M,N) where M is the number of
samples of each channel (time range*sampling frequency) and N is the
number of channels. Each channel is stored in a column of the output
array.
And it is so clever that it handles to apply a filter (with
scipy.signal.lfilter) on each of the columns of the array.
Example
In [2]: import scipy.io.wavfile as wv
In [3]: Fs,Sig = wv.read("STE-023.wav")
Warning: %s chunk not understood
Reading fmt chunk
Reading data chunk
In [4]: Fs
Out[4]: 44100
In [5]: Sig.shape, Sig.dtype
Out[5]: ((4434112, 2), dtype('int16'))
In [6]: import scipy.signal as ss
In [8]: SigFilt = ss.lfilter([1],[1, .1], Sig)
Out[8]:
array([[ 0. , 0. ],
[ 4. , -9.4],
[ 7. , -20.7],
...,
[ 0. , 0. ],
[ 0. , 0. ],
[ 0. , 0. ]])
In [9]: SigFilt.shape, SigFilt.dtype
Out[9]: ((4434112, 2), dtype('float64'))
More information about the SciPy-User
mailing list