In [ ]:


In [2]:
import numpy as np
import pyaudio
import wave
from scipy.fftpack import fft
import matplotlib.pyplot as plt
import matplotlib.animation as animation

data_type = 16 # mapped to 2 ** 15 possible values

FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
CHUNK = 1024

audio = pyaudio.PyAudio()

stream = audio.open(format=FORMAT, channels=CHANNELS,
                rate=RATE, input=True,
                frames_per_buffer=CHUNK)

def init():
    line.set_visible(False)
    return line,

fig, ax = plt.subplots()
line, = ax.plot(0, 0, color='DarkViolet')

def update(frame, line):
    if frame==1:
        line.set_visible(True)
    data = stream.read(CHUNK)
    decoded = np.fromstring(data, dtype=np.int16)
    sound = decoded #/ (2.0 ** (data_type - 1))
    t=np.arange(sound.size)
    line.set_data(t, sound)
    line.axes.axis([0, sound.size, -7000, 7000])
    return line,

ani = animation.FuncAnimation(fig, update, init_func=init, fargs=[line],
                              interval=25, blit=True)

plt.show()

In [38]:
import numpy as np
import pyaudio
import wave
from scipy.fftpack import fft
from __future__ import division
import matplotlib.pyplot as plt
import matplotlib.animation as animation

data_type = 16 # mapped to 2 ** 15 possible values

FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
CHUNK = 4410

audio = pyaudio.PyAudio()

stream = audio.open(format=FORMAT, channels=CHANNELS,
                rate=RATE, input=True,
                frames_per_buffer=CHUNK)

def init():
    line.set_visible(False)
    return line,

fig, ax = plt.subplots()
line, = ax.plot(0, 0, color='DarkViolet')

def update(frame, line):
    if frame==1:
        line.set_visible(True)
    data=stream.read(CHUNK)
    decoded = np.fromstring(data, dtype=np.int16)

    signal = np.fft.rfft(decoded)
    if signal.ndim>1:
        signal=np.mean(signal,axis=1)  # average both channels

    n_samples=signal.size

    magnitude = np.abs(signal)/CHUNK
    magnitude = np.asarray(magnitude)
    f = [(j*1.0/n_samples)*RATE 
         for j in range(n_samples)]
    frequencies = np.asarray(f)
    #print(np.amax(frequencies))
    #print(np.amax(magnitude))
    line.set_data(frequencies, magnitude)
    line.axes.axis([0, frequencies.size, 0, 500])
    return line,

ani = animation.FuncAnimation(fig, update, init_func=init, fargs=[line],
                              interval=25, blit=True)

plt.show()

In [ ]:


In [ ]: