From: Michael Schwendt <3schwend@informatik.uni-hamburg.de>

On 10 May 1996, Wolfgang Lorenz wrote:

> Hallo Michael, sag mal, hat SIDPlay 1.23c (der auf der High Voltage CD)
> eigentlich Ringmodulation eingebaut? Mir kam es jedenfalls so vor (beim Anhoeren
> von SHADES von Chris Huelsbeck).

Ring Modulation und Synchronization habe ich bereits seit v1.04b implementiert.
Dies steht auch in der Dokumentation und auf den Seiten der SIDPLAY web 
page :-) Seit Anfang Maerz habe ich dann beta-testweise Per Haakan Sundell's 
Methode verwendet, aber nicht in der DOS Version.

> Was haeltst Du davon wenn Du mir ein paar Tips bezgl. Ringmodulation gibst und
> ich Dir im Gegenzug zwei Loesungen fuer die Software-Implementierung von Filtern
> gebe?

Ja. Hoert sich gut an ! Mit Filtern habe ich mich bisher nur etwas in meinem
Nebenfach (Geophysik) beschaeftigt, kenne einige Verfahren und auch einige 
Algorithmen fuer LowPass-, HighPass- und BandPass-Filter, konnte letztere aber 
bisher nicht verwenden, weil sie undokumentiert waren. Jene Formeln sind 
iterativ, erzeugen eine filter (-aehnliche ?) Ausgabe. Leider ist mir die 
Parameterermittelung nicht gelungen. Und FFT waere meiner Meinung nach zu
aufwendig, es sei denn, es bleibt nichts anderes uebrig.

Ring Modulation ist ja auch nicht dokumentiert, also hatte ich 1994 meinen C64
im einem Physik-Labor der Uni an ein 2-Strahl-Oszilloskope angeschlossen und 
das Ausgangssignal untersucht. 
In dem C64 Hardware Reference Book und vergleichbarer Literatur, wie z.B. 
C64 Intern, steht ja nur: "Das Tonsignal wird durch Ring Modulation (Summe und
Differenz der beiden Grundstimmen), d.h. durch ein kombiniertes Signal der 
beiden entsprechenden Tongeneratoren ersetzt."
Dieses habe ich dann versucht, zu beweisen. Es scheint auch prima hinzukommen
(siehe SIDPLAY/DOS), aber eine wichtige Information konnte ich nicht heraus-
finden, naemlich die einzelne Verstaerkung der beiden Signale. Es scheint als
ob die Verstaerkung proportional zur Frequenz ist. Konnte ich aber nicht fest-
stellen, und ich habe keine weiteren Tests gemacht.
Ich habe mich also fuer eine Annaeherung entschieden und das ueberlagerte 
Signal einfach "geclippt". Scheint bis auf wenige Ausnahmen gut zu klingen. 
Die verwendeten Formeln sind

 Frequenzsumme = Carrierfrequenz + Modulatorfrequenz
 Frequenzdifferenz = | Carrierfrequenz - Modulatorfrequenz |

Hat der Carrieroperator das Dreieckwellenform-Bit gesetzt, erzeugst Du 
Dreieckschwingungen fuer beiden Frequenzen und ueberlagerst diese additiv. 
Im Falle einer richtigen Amplifikation beider Signale sollte das resultierende
Signal nicht groesser sein als die einzelne Amplitude (z.B. 255 bei 8-Bit),
so sieht das auf einem C64 aus (meiner Meinung nach).
Ohne Amplifikation, also mit Clipping, werden alle Werte ueber 255 gleich 255
und alle Werte unter 0 gleich 0. Ring Modulation scheint zu funktionieren fuer
die Carrierwellenformen $10 (Dreieck), $30 (Dreieck AND Saegezahn) und 
$50 (Dreieck AND Rechteck). $70 klingt wie $10.

Per Haakan Sundell's Methode ist rein mathematisch gesehen voellig anders, 
klingt aber bei rund 99.9% der Sidtunes ziemlich wie meine. Bei Rob Hubbard's
Mega Apocalypse z.B. hoert man das Clipping in SIDPLAY, der Klang sollte viel
rauher sein. Es gibt aber wiederum einige Spezialfaelle, die seine Methode 
nicht gut abdeckt. Ich diskutiere mit ihm gerade einige Unterschiede 
zwischen PlaySID und SIDPLAY.
Er laesst die Carrier- und Modulatorfrequenz unveraendert, erzeugt eine
Dreieckschwingung mit der Carrierfrequenz und eine gleichmaessige Rechteck-
schwingung (quadratisch = halbe Pulsbreite) mit der Modulatorfrequenz. Ist
das Rechtecksignal HIGH ist das Ausgangssignal gleich dem momentanen
Dreieckwert, ist das Rechtecksignal LOW erfaehrt die Dreieckschwingung eine
positive Phasenverschiebung um eine halbe Phasenlaenge.

Er meint, diese anhand Betrachtens des internen SID-Leseregisters herausge-
funden zu haben. Ich bin ueberzeugt davon, dass dies auch keine 100%-tige
Methode ist, denn ist z.B. die Modulatorfrequenz ungefaehr gleich der
Carrierfrequenz, die Frequenzdifferenz also sehr klein, erzeugt der SID
einen schwebenden Klang, was sich rein theoretisch und auch akustisch mit 
meinen Formel deckt. Nur eben ist in diesem Fall die Amplifikation nicht 
wesentlich.

Habe ich hoffentlich halbwegs verstaendlich erlaeutert, oder ? Habe hier
momentan maechtig viel zu tun ...

Wie weit bist Du denn mittlerweile mit dem Sound in Deinem C64-Emulator ?
Ich bin nicht auf dem aktuellen Stand der Dinge, was macht die Konkurrenz ?
(Btw, zum gelegentlichen Rippen von Sidtunes nehme ich immer noch C64Alive
von Frank Littmann, wegen dem Schreiben/Lesen direkt auf DOS-Format und
dem eingebauten Modul-aehnlichen Maschinensprache Monitor)

Gruss,
--
## Michael Schwendt <3schwend@informatik.uni-hamburg.de>           ##
##                  <Michael_Schwendt@public.uni-hamburg.de>       ##
## Department of Computer Science - University of Hamburg, Germany ##
