QUICK Ecke 29 von Harald Schönfeld Sind die Ohren noch heil? Dann geht es heute in die nächste Runde des QUICK Musicplayers. Das bisherige Klangbild ist etwas hart und grell und sicher auch langweilig. Deshalb ist es wichtig die Einzeltöne interessanter zu gestalten. Dazu benutzt man bei elektronischen Musikinstrumenten im Normalfall Hüllkurven. Hüllkurven Diese definieren den zeitlichen Lautstärkeverlauf einer jeden Note die gespielt wird. Bisher hatten wir die STEADY-Hüllkurve, d.h. einen durchgehend gleich lauten Ton: 15,15,15,15,15,15,.... Andere Möglichkeiten sind z.B. eine Percussion: 15,14,13,12,11,... Das ist ein Ton, der immer leiser wird. Ein Zupfinstrument wird noch schneller leiser: 15,12,7,3,0,... Soll ein Ton nachklingen (wie beim Klavier), so muß er zwar leiser werden, aber nach loslassen der Taste (also nach Notenende) weiterklingen: 15,15,14,14,13,13,... In diesem Fall ist es nötig nach Tonende die Hüllkurve weiter abzuarbeiten, so als ob keine Pause wäre. Kommt dann wirklich eine neue Note, muß natürlich diese neue Note gespielt werden. Der neue VBI Der VBI muß nun also einen Ton nicht nur einfach anschalten, sondern er muß jedesmal den Ton mit der durch die Hüllkurve angegebenen Lautstärke darstellen. D.h. auch wenn L nicht 0 ist, und auch wenn der Tempozähler noch nicht abgelaufen ist, muß der Interrupt sich um das Weiterklingen des Tons kümmern. Dazu gibt es einen Zeiger, der angibt an welcher Stelle der Hüllkurve der Ton bereits angekommen ist. Diese Lautstärke wird benutzt und dann wird der Zeiger um eins erhöht - für den nächsten VBI. Natürlich ist die Hüllkurve nicht unendlich lang. Nach 32 Werten wird deshalb der 32. immer wieder benutzt. Um verschiedene Lautstärken benutzen zu können wird folgendes gemacht: Man zieht von 15 den im Melodiedatenfeld als Lautstärke eigegebenen Wert ab und erhält somit eine Zahl zwischen 0 und 15. Diese wird dann jeweils vom in der Hüllkurve angegebenen Wert subtrahiert. Das ergibt dann die echte Lautstärke. Die Hüllkurven-ARRAYs Jede der allgemein möglichen Hüllkurven wird in ein ARRAY geshrieben. Dazu wird einfach der DATA-Befehl benutzt. Jeder Kanal hat nun ein Hüllkurven ARRAY für sich, d.h. jede einzelne Stimme kann anders klingen. Dazu kopiert man die allgemeine Hüllkurve in das ARRAY das für diesen Kanal zuständig ist. Will man, daß der Ton nach Ende der Note nachklingt (wenn eine Pause folgt), so setzt man das SUSTAIN-Flag für den entsprechenden Kanal. Das Nachklingen ist nur sinnvoll bei Hüllkurven, die nicht zu schnell 0 werden. Im folgenden Beispiel ist Kanal 0 auf ZUPF eingestellt (sehr kurze Töne), Kanal 1 spielt den Bass mit Sustain (Nachklang) und Kanal 2 und 3 spielen Akkorde mit PERC - d.h. ein mittelschnelles Abklingen der Lautstärke. Man hört schon: Das klingt wesentlich besser. Kann's noch besser klingen? Man wird sehen :-) Das Quelltextfile QE29.QIK zeigt wie das komplette Programm nun aussieht. P.S.: Sollte jemand diese Routine für ein kommerzielles Programm benutzen wollen, so möge er sich bitte mit mir in Verbindung setzen.