Dies ist eine alte Version des Dokuments!
Vorläufige Definition der Meilensteine:
Erweiterung der Erweiterungen:
# -*- coding: utf8 -*- import pyaudio import numpy as np import matplotlib.pyplot as plt CHUNKSIZE = 1024 #festgelegte Chunksize #den Audioeingang initialisieren p = pyaudio.PyAudio() stream = p.open(format=pyaudio.paInt16, channels=1, rate=44100, input=True, frames_per_buffer=CHUNKSIZE) #Daten schreiben frames = [] #Liste von Chunks(Blöcken) for i in range(0, int(44100 / CHUNKSIZE*5)): data = stream.read(CHUNKSIZE) frames.append(np.fromstring(data, dtype=np.int16))#evtl nur normal int? Datengröße müssen wir wohl später abschätzen was sinnvoll ist #Liste der numpy-arrays in 1D-array konvertieren numpydata = np.hstack(frames) print numpydata #Daten plotten plt.plot(numpydata) plt.show() #stream schließen stream.stop_stream() stream.close() p.terminate
from __future__ import division # -*- coding: utf-8 -*- import scipy import numpy.fft as FFT import matplotlib.pyplot as plt """ füge aus schallwerkzeuge ein, um schallwerkzeuge datei redundant zu machen DAUER = RATE = ANZAHL = """ execfile("schallwerkzeuge.py") """ Short-Time Fourier Transform """ def stft(x, fs, framesz, hop): x=np.concatenate((x,np.zeros(1))) halfwindow = int(np.round(framesz*fs/2)) framesamp=2*halfwindow+1 hopsamp = int(np.round(hop*fs)) w = scipy.hamming(framesamp) X = scipy.array([scipy.fft(w*x[i-halfwindow:i+halfwindow+1]) for i in range(halfwindow, len(x)-halfwindow, hopsamp)]) return X """ berechne Spektrum """ def spect(): global DAUER global RATE global ANZAHL fensterdauer=0.1 fensterueberlappung=0.05 # jeweils in Sekunden sig=wavread("i.wav") # füge hier array aus audiostream ein A=stft(sig,RATE,fensterdauer,fensterueberlappung) eps=1e-8 # Offset, um logarithmieren zu koennen r,s=A.shape yl=scipy.linspace(0,DAUER, r) xl=scipy.linspace(0,RATE/2,s/2) X,Y=scipy.meshgrid(xl,yl) plt.figure(1) plt.pcolor(Y,X,np.log10(np.absolute(A[:,:s/2]+eps))) plt.show()
To Do: Zeige nur Spektrum bis 4000Hz (oder so) an, zur Geräuschunterdrückung (mit Slicing)
# -*- coding: utf8 -*- from __future__ import division import pyaudio import numpy as np import numpy.fft as FFT import matplotlib.pyplot as plt import scipy """ globale Variablen """ CHUNKSIZE = 1024 # CHANNELS = 1 # RATE = 44100 # DAUER = 5 # Dauer, wie lange aufgenommen wird """ empfange Audiosignale und schreibe sie in ein Numpy-Array """ def getAudio(): # Audioeingang initialisieren p = pyaudio.PyAudio() stream = p.open(format=pyaudio.paInt16, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNKSIZE) # Daten schreiben frames = [] # Liste von Chunks(Blöcken) for i in range(0, int(RATE / CHUNKSIZE*DAUER)): data = stream.read(CHUNKSIZE) frames.append(np.fromstring(data, dtype=np.int16)) # evtl nur normal int? Datengröße müssen wir wohl später abschätzen was sinnvoll ist # Liste der numpy-arrays in 1D-array konvertieren numpydata = np.hstack(frames) # Daten plotten plt.plot(numpydata) plt.show() # Stream schließen stream.stop_stream() stream.close() p.terminate return numpydata """ Short-Time Fourier Transform """ def stft(x, fs, framesz, hop): print x.shape x=np.concatenate((x,np.zeros(1))) halfwindow = int(np.round(framesz*fs/2)) framesamp=2*halfwindow+1 hopsamp = int(np.round(hop*fs)) w = scipy.hamming(framesamp) X = scipy.array([scipy.fft(w*x[i-halfwindow:i+halfwindow+1]) for i in range(halfwindow, len(x)-halfwindow, hopsamp)]) #print X.shape return X """ berechne Spektrum """ def spect(): fensterdauer=0.1 fensterueberlappung=0.025 # jeweils in Sekunden sig = getAudio() # Daten aus Audiostream A=stft(sig,RATE,fensterdauer,fensterueberlappung) A = A[:,0:800] eps=1e-8 # Offset, um logarithmieren zu koennen r,s=A.shape #print r #print s # Größe des transformierten Arrays yl=scipy.linspace(0,DAUER, r) xl=scipy.linspace(0,4000,s/2) X,Y=scipy.meshgrid(xl,yl) plt.figure(1) plt.pcolormesh(Y,X,np.log10(np.absolute(A[:,:s/2]+eps))) plt.show() return 0 spect() #scipy sig spect