Das Schneider CPC Systembuch

Die Abteilungen des Betriebssystems

Der Sound Manager

Amplituden-Hüllkurve

Die Abteilungen des Betriebssystems: Der Sound ManagerDer Sound Manager bietet die Möglichkeit, neben der unveränderbaren Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurve 0 (konstante Amplitude) 15 eigene Der Sound Manager: Amplituden-Hüllkurve
BCBC: SOUND AMPL ENVELOPE: Der Parameterblock der Amplituden-Hüllkurve:
Amplituden-Hüllkurven
zu definieren. Das ist für jeden Musiker unabdingbar, damit der Die ICs im Überblick: Der PSG AY-3-8912
Die Anschlussbelegungen der wichtigsten ICs im CPC: Der PSG AY-3-8912
PSG
auch nur annähernd 'natürliche' Töne produzieren kann. Kein Ton, der in der Natur vorkommt, hat bis zum letzten Verklingen eine konstante Lautstärke. Dann würde er nämlich nicht 'verklingen' sondern abrupt enden. Vielmehr kann man bei den meisten Geräuschen drei Phasen unterscheiden:

Attack:    Anschwellen (nicht bei 'angeschlagenen' Tönen)
Substain:  Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: HaltHalten
Delay:     Ausklingen

Für jede Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurve können bis zu fünf Abschnitte definiert werden, in denen man jeweils eine bestimmte Anzahl von Schritten, die Schritthöhe (Lautstärke-Änderung pro Schritt) und die Schrittlänge (Dauer eines Schrittes) festlegen kann.

Damit kann man man leicht die drei Abschnitte (Attack, Sustain, Delay) nachbilden und, wenn man will, noch ein bisschen mehr. In Einleitung: BASIC
Anhang: Basic
Basic
benutzt man dazu das ENV-Kommando (ENvelope Volume).

In Maschinensprache geschieht die Programmierung einer Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurve fast genauso: Man muss nur den Vektor &SOUND MANAGER: BCBC: SOUND AMPL ENVELOPEBCBC SOUND AMPL ENVELOPE aufrufen, und ihm in Operationen: BD5B / 349A / 349A: FLO SUBA die Nummer der Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurve und in HL den Zeiger auf einen Datenblock übergeben.

Der erste Eintrag im Datenblock ist die Anzahl der angegebenen Hüllkurven-Abschnitte und danach folgen die Angaben in der selben Reihenfolge wie im ENV-Statement. Dabei müssen nur soviele Abschnitte definiert werden, wie das erste Datentypen: Bytes
Datenbreite: Bytes
Byte
im Parameterblock angibt:

+------------------------------------------------------+
!         Basic und Maschinencode: ParameterParameter der Der Sound Manager: Amplituden-Hüllkurve
BCBC: SOUND AMPL ENVELOPE: Der Parameterblock der Amplituden-Hüllkurve:
Amplituden-Hüllkurven
! +------------------------------------------------------+ ! ! ! Einleitung: BASIC
Anhang: Basic
BASIC
: ENV nummer, SZ1,SH1,SL1, ... SZ5,SH5,SL5 ! ! MCode: Vektor &SOUND MANAGER: BCBC: SOUND AMPL ENVELOPEBCBC: Operationen: BD5B / 349A / 349A: FLO SUBA=Nummer HL -> Datablock ! ! ! !HL -> DEFB ANZ = Anzahl Hüllkurvenabschnitten ! ! DEFB SZ1 \ ! ! DEFB SH1 > Basic und Maschinencode: ParameterParameter des ersten Abschnittes ! ! DEFB SL1 / ! ! ... ... ! ! DEFB SZ5 = Schrittzahl ! ! DEFB SH5 = Schritthöhe ! ! DEFB SL5 = Schrittlänge ! +------------------------------------------------------+

Folgende Werte sind erlaubt:

Hüllkurven-Abschnitt (Software-kontrolliert)
Schrittzahl:      0 ... 127 (0 setzt die Amplitude Adressierungsarten der Z80: Absolutabsolut auf die S.Höhe)
Schritthöhe:   -128 ... 127 (entspricht 0 ... 255 in Assembler)
Schrittlänge:     0 ... 255 (wobei 0 einer Länge von 256 entspricht)

Um eine Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurve zu programmieren muss man den gewünschten Verlauf der Amplitude in einem Diagramm eintragen und in bis zu 5 verschiedene Abschnitte unterteilen.

Jeden Abschnitt muss man dann in eine geeignete Anzahl Treppenstufen unterteilen, die alle die gleiche Länge und Höhe haben.

Die Diagramme im Handbuch des CPC 464, mit denen die Zerlegung eines Noten-Abschnittes in diese Treppenstufen für das ENV-Kommandos demonstriert werden, sind dabei nicht ganz korrekt: Hier sehen die einzelnen Treppenstufen so aus, als würde jeweils erst gewartet und dann das Volumen verändert. In Wirklichkeit ist aber genau andersrum: Zuerst wird das Volumen verändert, und dann gewartet.

Das folgende Diagramm ist ein Beispiel:

      Start des Tons
         ^    _
         |   |3|_
         |   | .1|_
         .   | .  2|_
         .  _| .    3|_
         . |2  .      4|_                         keine weitere Amplituden-
         . |   .        5|___                     Änderung, falls die Note
         . |   .         . 1 |___                 länger ist als diese
         ._|   .         .     2 |___             ^ Die Tonausgabe: Die möglichen Hüllkurvenformen  (Reg. 13)Hüllkurve.
         |1    .         .         3 |___         |
         |     .         .             4 |___.......................
         |     .         .                 5 .
_________|_____._________.___________________.______________________________

         ^_____^_________^___________________^

 ENV 1,  3,+4,1,  5,-1,1,     5,-1,3
                              ^  ^ ^
                              |  | Schrittlänge
                              |  Schritthöhe
                              Anzahl Schritte in diesem Abschnitt

Diese Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurve besteht aus drei Abschnitten. Der erste, Attack, ist drei hundertstel Sekunden lang und steigert die Lautstärke um 3*4 = 12 Werte. Daraus ergibt sich, dass diese Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurve mit einer Der Sound Manager: Start-AmplitudeStart-Amplitude im Bereich von 0 bis 3 benutzt werden kann! Größere Der Sound Manager: Start-AmplitudeStart-Amplituden bedeuten nämlich, dass die Lautstärke über den erlaubten Bereich (0...15) hinausgehen und, modulo 16, wieder bei 0 beginnen.

Würde die Der Sound Manager: Start-AmplitudeStart-Amplitude beispielsweise mit 5 festgesetzt, so würde sie wie folgt geändert:

  -  5+4 =  9 Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 1:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 0:
mod
16 = 9 (1. hundertstel Sekunde) - 9+4 = 13 Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 1:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 0:
mod
16 = 13 (2. hundertstel Sekunde) - 13+4 = 17 Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 1:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 0:
mod
16 = 1 (3. hundertstel Sekunde) <-- Überschreitung des - 1-1 = 0 Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 1:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 0:
mod
16 = 0 (4. hundertstel Sekunde) <-- zulässigen Bereichs. - 0-1 = -1 Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 1:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 0:
mod
16 = 15 (5. hundertstel Sekunde) - 15-1 = 14 Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 1:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 0:
mod
16 = 14 (6. hundertstel Sekunde)

Einige weitere Die CPU Z80: Besonderheiten der Z80 im Schneider CPCBesonderheiten müssen geklärt werden. Dauert eine angeschlagene Note länger, als die benutzte Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurve definiert ist, so wird der zuletzt erreichte Wert ausgehalten. Ist die Note kürzer, so wird die Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurve abgebrochen.

Wird in einem Bereich der Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Hüllkurve eine Schrittzahl mit 0 Schritten festgelegt, so wird die zugehörige Schritthöhe als Adressierungsarten der Z80: Absolutabsoluter Wert betrachtet, und die Lautstärke auf diesen Wert gesetzt. Macht man von dieser Möglichkeit im ersten Abschnitt Gebrauch, so wird die Angabe einer Der Sound Manager: Start-AmplitudeStart-Amplitude im Sound-Statement praktisch wirkungslos. Weil die Amplitude VOR der Wartezeit auf den neuen Wert gesetzt wird, kommt die Der Sound Manager: Start-AmplitudeStart-Amplitude keine einzige hundertstel Sekunde zum Zug. Wird die Lautstaeke auf einen Adressierungsarten der Z80: Absolutabsoluten Betrag gesetzt, so wird die angegebene Schrittlänge einmal abgewartet.

Bei den Schrittlängen wird die Angabe '0' als 256/100 Sekunden interpretiert.

Valid HTML   Valid CSS