Einer der wichtigsten Unitgeneratoren, und einer, den wir schon
kennengelernt haben ist oscil
mit der Variante oscili
Abbildung 3.1 zeigt seinen schematischen Aufbau.
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.
wobei die Amplitude, den initialen Phasenwinkel, die Frequenz, die Samplingrate, die Tabelle und 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 (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