Benutzer-Werkzeuge

Webseiten-Werkzeuge


ws1314:audio

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
ws1314:audio [2014/03/04 12:35]
cnaumann
ws1314:audio [2016/05/10 14:46] (aktuell)
Zeile 1: Zeile 1:
-====== ​Töne selbst erzeugen ​======+====== ​Audio ======
  
-Bei uns geht es darum Töne/​Geräusche ​zu erzeugen, was hauptsächlich über die Erzeugung von Sinuskurven mit verschiedenen Frequenzen und Amplituden realisierbar ist.+===== Töne selbst erzeugen ===== 
 +Bei uns ging es zunächst ​darum Töne zu erzeugen, was hauptsächlich über die Erzeugung von Sinuskurven mit verschiedenen Frequenzen und Amplituden realisierbar ist.
  
 +==== Eigene Variante ====
 Eine Sinuskurve allgemein mit variabler Frequenz und Amplitude zu erzeugen ist mit dem Modul Numpy relativ einfach. Eine Sinuskurve allgemein mit variabler Frequenz und Amplitude zu erzeugen ist mit dem Modul Numpy relativ einfach.
 <code python> <code python>
 def erzeuge_sinus(f,​T):​ def erzeuge_sinus(f,​T):​
- 
  global RATE  global RATE
- 
  yy=np.zeros(int(T*RATE))  yy=np.zeros(int(T*RATE))
- 
  for i in range(0,​len(yy)):​  for i in range(0,​len(yy)):​
- 
  yy[i]=np.sin(2*np.pi*f*i/​float(RATE))  yy[i]=np.sin(2*np.pi*f*i/​float(RATE))
- 
  return yy  return yy
 </​code>​ </​code>​
  
 Mit diesem Code kann man einzelne Sinuskurven generieren. Mit diesem Code kann man einzelne Sinuskurven generieren.
 +Ebenso kann man die Sinuskurve durch verschiedene periodische Funktionen begrenzen, wodurch sich die Töne ebenfalls modellieren lassen.
 +Als Beispiel haben wir eine Dreiecksperiode:​
 +<code python>
 +def erzeuge_dreieckhk(T0,​T1,​T=2.):​
 + global RATE
 + yy=np.zeros(int(T*RATE))
 + for i in range(0,​len(yy)):​
 + t=i/​float(RATE)
 + if 0<​=t<​=T0:​
 + yy[i]=t/​float(T0)
 + elif T0<​t<​=T1:​
 + yy[i]=-t/​float(T1-T0)+T1/​float(T1-T0)
 + return yy
  
 +def erzeuge_dreieckperiode(frq,​T=2.):​
 + global RATE
 + T_periode=1./​frq
 + ya=erzeuge_dreieckhk(T_periode/​2.,​T_periode/​2.,​T=T_periode)
 + y=ya.copy()
 + for i in range(0,​int(T*frq)):​
 + y=np.concatenate((y,​ya))
 + return y
 +</​code>​
 +
 +
 +==== Mit Stefans Hilfe ====
 Da wir allerdings mehrere Sinuskurven mit unterschiedlichen Frequenzen und Amplituden aneinanderreihen wollten, mussten wir uns Gedanken machen, wie wir das Umsetzen. Da dies und das erstellen eines Interface über unseren Fähigkeiten lag, hat Stefan uns bei der Lösung dieser Probleme ausgeholfen. Da wir allerdings mehrere Sinuskurven mit unterschiedlichen Frequenzen und Amplituden aneinanderreihen wollten, mussten wir uns Gedanken machen, wie wir das Umsetzen. Da dies und das erstellen eines Interface über unseren Fähigkeiten lag, hat Stefan uns bei der Lösung dieser Probleme ausgeholfen.
 Hierbei entstand folgender krasser Code: Hierbei entstand folgender krasser Code:
- 
 <code python> <code python>
 #### Sinusgenerator-Klasse #### Sinusgenerator-Klasse
- 
 class sinus_generator(generator):​ class sinus_generator(generator):​
  '''​Sinus-Tongenerator'''​  '''​Sinus-Tongenerator'''​
Zeile 31: Zeile 51:
  self.freq=freq  self.freq=freq
  self.phaseshift=0.0  self.phaseshift=0.0
-  +
- +
  def generate(self,​T):​  def generate(self,​T):​
  '''​Erzeugt einen Sinusklang der Dauer T.  '''​Erzeugt einen Sinusklang der Dauer T.
Zeile 41: Zeile 60:
  +self.phaseshift*np.ones(int(T*RATE))  +self.phaseshift*np.ones(int(T*RATE))
  yy=np.sin(yy)  yy=np.sin(yy)
- self.phaseshift+=T*2*np.pi*self.freq + self.phaseshift+=T*2*np.pi*self.freq
- +
  return yy.copy()  return yy.copy()
 +
  
 class fm_generator(generator):​ class fm_generator(generator):​
Zeile 66: Zeile 85:
  return yy.copy()  return yy.copy()
   
-  
-  
- 
 #### Der '​große Generator',​ der aus Verknüpfung von anderen besteht: #### Der '​große Generator',​ der aus Verknüpfung von anderen besteht:
  
Zeile 93: Zeile 109:
 </​code>​ </​code>​
  
-__**KRASSER SHIT ODER!?**__+
  
  
  
 ===== Fourier Transformation ===== ===== Fourier Transformation =====
-Zunächst haben wir probiert selbst einen Code für die Fourier Transformation ​zu implementierenDieser sieht folgendermaßen aus: +Mit der Fourier Transformation ​lassen sich unter anderem bereits existente Töne analysieren und in Daten umwandeln, sodass man sie modellieren kann.
-''​Code Text''​+
  
-Da wir hier leider auf Speicher Probleme stießen, mussten wir doch auf den in Numpy vorhandenen Fast-Fourier-Transformation ​Code zurückgreifen+==== Diskret ==== 
-''​Code Text''​+Zunächst haben wir probiert selbst einen Code für die Diskrete ​Fourier Transformation ​zu implementieren. Dieser sieht folgendermaßen aus
 +<code python>​ 
 +</​code>​
  
-__**KRASSER SHIT ODER!?**__+==== Fast ==== 
 +Da wir hier leider auf Speicher Probleme stießen, mussten wir doch auf den in Numpy vorhandenen Fast-Fourier-Transformation Code zurückgreifen:​ 
 +<code python>​ 
 +</​code>​
ws1314/audio.1393932934.txt.gz · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)