next up previous contents
Nächste Seite: foscil,foscili Aufwärts: Standard Generatoren Vorherige Seite: Standard Generatoren   Inhalt

oscil,oscili

Nachdem wir uns mit dem grundsätzlichen Aufbau von CSound Eingabedateien beschäftigt heban, wollen wir uns heute mit den wichtigsten Unitgeneratoren beschäftigen, und quasi nebenbei die verschiedenen Signaltypen von CSound (Audio,Kontroll, Init) kennenlernen.

Einer der wichtigsten Unitgeneratoren, und einer, den wir schon kennengelernt haben ist oscil mit der Variante oscili

Abbildung 3.1 zeigt seinen schematischen Aufbau.

Abbildung 3.1: CSound oscil und oscili Generatoren
\begin{figure}
\epsfxsize =12cm
\epsfbox {oscili.ps}\end{figure}

Wie dort zu sehen ist, hat dieses Gerät 4 Eingänge, einen für die Amplidude (als absoluter Wert), einen für die Frequenz (in Hertz) einen für die Nummer der Wellenform (als ganze Zahl) und einen für die Anfangsphase (als Teil einer Periode, also als Zahl zwischen 0 und 1).

Dieser Generator geht von folgenden Voraussetzungen aus:

Er liest dann die Werte der Tabelle, beginnend mit der entsprechenden Anfangsphase, und mit der entsprechenden Geschwindigkeit periodisch aus und multipliziert diese mit der angegebenen Amplitude.


\begin{displaymath}
x(n) = AT[(\phi + nf)\times l_T/sr \mbox{ mod } l_T]
\end{displaymath}

wobei $A$ die Amplitude, $\phi$ den initialen Phasenwinkel, $f$ die Frequenz, $sr$ die Samplingrate, $T$ die Tabelle und $l_T$ die Länge der Tabelle angibt.

Da CSound normalerweise 16 Bit Samples ausgibt, und die Tabellen normalisiert sein müssen, ergibt sich für die Amplitude (wenn spaeter nicht noch abgeschwächt wird) ein Maximum von $2^{15}-1$ (32767) um Übersteuerungen zu vermeiden.

Aus der obigen Formel ergibt sich, daß die ausgegebene Wellenform bei Wellentafeln mit wenig Stützwerten relativ ungenau ist. Der daraus entstehende Fehler führt zu Störgeräuschen im Ausgangssignal. Um diesem Problem zu begegnen kann man:

Der Generator oscili ist ein solcher (linear) interpolierender Generator, der allerdings mehr Rechenzeit beansprucht, als der einfache oscil

Das folgende Beispiel demonstriert diese Fehler:


; interpol.orc Demonstration von Oversampling (oscili)

sr     = 44100 ; samplerate 44.1 kHz
kr     = 441   ; Kontrollrate, 441 Hz
ksmps  = 100   ; Anzahl Audiosamples pro Kontrollsample
nchnls = 1     ; Mono

instr 1

iamp   =      p4
ifreq  =      p5
iwtab  =      p6

asig   oscil  iamp,ifreq,iwtab
       out    asig
endin

instr 2

iamp   =      p4
ifreq  =      p5
iwtab  =      p6

asig   oscili  iamp,ifreq,iwtab
       out    asig
endin

; interpol.sco Demonstration von Oversampling (oscili)

f 1 0 129 10 1   ; wenig stuetzwerte
f 2 0 4097 10 1  ; viele  Stuetzwerte

; instr start dauer ampl  freq      wave
i 1     0     2     20000 100       1 ; oscil, wenig Werte
i 1     3     .     20000 100       2 ; oscil, viele Werte

i 2     6     2     20000 100       1 ; oscili, wenig Werte
i 2     9     .     20000 100       2 ; oscili, viele Werte

e


next up previous contents
Nächste Seite: foscil,foscili Aufwärts: Standard Generatoren Vorherige Seite: Standard Generatoren   Inhalt
Thomas Neuhaus
2001-01-14