scipyとか使ってみる


octaveからscipy/numpy/matplotlibに移行する事にした.

octaveも別に悪くはないんだけど,GUIとの連携が弱すぎた…

とりあえず,このサイトを参考にしてスペクトログラムを表示してみた.

spectrogram.py
#!/usr/bin/env python

import sys
import wave
import urllib2
import scipy as sp
import matplotlib.pyplot as plt

if __name__ == "__main__":
    if len(  sys.argv ) > 1:
        wo  = wave.open( sys.argv[1], 'rb' )
    else:
        url = 'http://www.it.ice.uec.ac.jp/SRV-DB/archive/HENSHU00_PF00/HENSHU00_PF00_0951.wav'
        wo = wave.openfp( urllib2.urlopen( url ).fp, 'rb' )

    chunk = 65536
    data = sp.fromstring( wo.readframes( chunk ), sp.int16 )
    srate = wo.getframerate()
    nFFT = 1024
    window = sp.hamming(nFFT)

    Pxx, freq, bins, im = plt.specgram(
            data,
            NFFT=nFFT,
            Fs=srate,
            noverlap=512,
            window=window)

    plt.show()