Read and write audio wav files with scipy


In [ ]:
%matplotlib inline

import numpy as np
import matplotlib
matplotlib.rcParams['figure.figsize'] = (12, 9)

# Import Jupyter's sound player widget
# See: https://ipython.org/ipython-doc/dev/api/generated/IPython.display.html#IPython.display.Audio

from IPython.display import Audio

Notes

This function cannot read wav files with 24-bit data.

Common data types:

WAV format Min Max NumPy dtype
32-bit floating-point -1.0 +1.0 float32
32-bit PCM -2147483648 +2147483647 int32
16-bit PCM -32768 +32767 int16
8-bit PCM 0 255 uint8

Note that 8-bit PCM is unsigned.

Write wav file


In [ ]:
from scipy.io import wavfile

In [ ]:
sample_rate = 44100 # in samples/sec

t = np.linspace(0, 5, sample_rate*5)
data = np.sin(2*np.pi*220*t) + np.sin(2*np.pi*224*t)
data /= 2.          # to keep data between -1 and 1

In [ ]:
data.min(), data.max()

In [ ]:
wavfile.write("foo.wav", sample_rate, data)

In [ ]:
Audio(data, rate=sample_rate)

In [ ]:
Audio("foo.wav")

Read wav file


In [ ]:
sample_rate, data = wavfile.read("foo.wav")

In [ ]:
sample_rate, data.shape, data.min(), data.max()

In [ ]:
Audio(data, rate=sample_rate)

In [ ]:
plt.plot(data[0:20000]);

Another example


In [ ]:
#!wget -O sound.wav https://github.com/karoldvl/ESC-50/raw/master/audio/1-100038-A-14.wav
!wget -O sound.wav https://github.com/jdhp-misc/sample-sounds/raw/master/piano_notes/386725__luckylux__sol.wav

In [ ]:
sample_rate, data = wavfile.read("sound.wav")

In [ ]:
data.shape

In [ ]:
Audio(data[:,0], rate=sample_rate)

In [ ]:
plt.plot(data[:,0]);

In [ ]:
!rm sound.wav