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:43]
cnaumann [Töne selbst erzeugen]
ws1314:audio [2016/05/10 14:46] (aktuell)
Zeile 2: Zeile 2:
  
 ===== Töne selbst erzeugen ===== ===== 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. 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>
Zeile 16: Zeile 16:
  
 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 28: 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 38: 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 63: 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 90: 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 implementieren. Dieser 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. 
 + 
 +==== Diskret ​==== 
 +Zunächst haben wir probiert selbst einen Code für die Diskrete ​Fourier Transformation zu implementieren. Dieser sieht folgendermaßen aus:
 <code python> <code python>
 </​code>​ </​code>​
  
 +==== Fast ====
 Da wir hier leider auf Speicher Probleme stießen, mussten wir doch auf den in Numpy vorhandenen Fast-Fourier-Transformation Code zurückgreifen:​ 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 python>
 </​code>​ </​code>​
- 
- 
-__**KRASSER SHIT ODER!?**__ 
ws1314/audio.1393933425.txt.gz · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)