home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Maximum MODS
/
MaximumMODS.iso
/
amiga
/
delitracker_1.36
/
docs
/
delitracker.dok
< prev
next >
Wrap
Text File
|
1996-01-23
|
56KB
|
1,498 lines
***************************************************************************
* DeliTracker *
***************************************************************************
⌐ 1992 by Delirium
$VER: V1.36 (07.01.1993)
1. INHALTSVERZEICHNIS
1.INHALTSVERZEICHNIS
2.RECHTLICHES UND VERTRIEB
3.EINLEITUNG
3.1 Was ist DeliTracker ?
3.2 Wieso gerade DeliTracker benutzen ?
4. START VON DELITRACKER
4.1 Systemanforderungen
4.2 Start vom CLI bzw. von der Shell
4.3 Start von der Workbench
4.4 Installation
5. GRUNDKONZEPTE
5.1 Player
5.2 gepackte Module
5.3 Optionen und Voreinstellungen
5.4 Das Konfigurationsfile
6. DIE STEUERUNG VON DELITRACKER
6.1 Das Kontroll Fenster
6.1.1 Gadgets
6.1.2 Menus
6.1.3 Shortcuts
6.1.4 Appwindow
6.2 Das Setup Fenster
6.2.1 Gadgets
6.2.2 Shortcuts
6.3 ARexx
6.4 Commodities
7. PROBLEMECKE
8. DIE PROGRAMIERUNG EXTERNER PLAYER
8.1 Das externe Player Konzept
8.1.1 Schematischer Aufbau von externen Playern
8.1.2 Schematischer Aufbau von Custom Modulen
8.2 Anpassung von Playern
8.2.1 Playerheader
8.2.2 Modulerkennung
8.2.3 Interrupts
8.3 Bedeutung der Tags
8.4 DeliTracker support Funktionen
8.5 Tips zur Anpassung
9. DANKSAGUNGEN
2. RECHTLICHES UND VERTRIEB
DeliTracker (c) 1991 - 1993 by Peter Kunath und Frank Riffel.
DeliTracker ist Shareware. Das hei▀t, wenn Ihnen dieses Programm gefΣllt
und Sie es ÷fters benutzen, erwarten wir von Ihnen, da▀ Sie sich bei uns
registrieren lassen. Die Sharewaregebⁿhr betrΣgt 20 DM bzw. $US 20 und ist
in BAR oder als EUROCHEQUE zu entrichten. Leider ist es uns nicht m÷glich,
andere Schecks (insbesondere Amerikanische) zu akzeptieren. Als Gegen-
leistung erhalten Sie die neueste Version auf Disk. Durch Ihren Beitrag
helfen Sie mit, die stΣndige Verbesserung dieses Tools zu sichern. Schicken
Sie die ausgefⁿllte Registrierkarte (Orderform) und den Betrag an:
Frank Riffel
Merkstr. 27
8129 Wessobrunn
Germany
An diese Adresse k÷nnen Sie auch schreiben, falls Sie irgendwelche Bugs
finden oder VorschlΣge und Bemerkungen zu diesem Programm haben. Wenn Sie
ein neues Soundsystem geschrieben haben und Interesse an der Anpassung
an DeliTracker haben, k÷nnen Sie sich natⁿrlich auch an uns wenden.
DeliTracker darf auf Public-Domain-, Shareware-Disketten und Netzwerken
vertrieben und verbreitet werden, solange folgende Bedingungen
eingehalten werden:
░ alle Dateien mⁿssen komplett weitergegeben werden. Die zu
DeliTracker geh÷renden Dateien sind in 'Distribution' aufgelistet.
░ Programm und Dokumentation dⁿrfen in keiner Weise geΣndert werden.
Eine Ausnahme stellt das Packen dar, wenn sich der Orginalzustand
wieder zu 100% herstellen lΣ▀t (z.B. mit LhA).
░ Der Gesamtpreis fⁿr Disketten, auf denen DeliTracker enthalten ist,
und die ▄bertragungsgebⁿhren in Netzwerken dⁿrfen nicht h÷her als
8 DM bzw. $US 6 oder einen gleichwertigen Betrag in einer anderen
WΣhrung sein.
░ Jegliche kommerzielle Nutzung, insbesondere die Verbreitung von
DeliTracker zusammen mit kommerziellen Produkten, bedarf einer
schriftlichen Genehmigung der Autoren.
Die Autoren ⁿbernehmen keinerlei Haftung fⁿr SchΣden, die durch die
Benutzung dieses Programms entstehen. Wir weisen in diesem Zusammenhang
aber darauf hin, da▀ DeliTracker sorgfΣltig entwickelt und getestet wurde.
3. EINLEITUNG
3.1 Was ist DeliTracker ?
DeliTracker ist ein flexibler Soundplayer, der viele verschiedene Sound-
formate abspielen kann. Man sollte ihn nicht mit einen Songeditor, MIDI-
sequenzer oder Digitizer verwechseln. Er ist ausschlie▀lich dazu gedacht,
komfortabel Musik abzuspielen. Die Player fⁿr die Unterstⁿtzung von
SoundTracker 15 instruments, SoundTracker 31 instruments, StarTrekker
ohne AM Sounds, NoiseTracker, ProTracker und Customplay Modulen sind
bereits intern eingebaut. Weitere Player k÷nnen bei Bedarf nachgeladen
werden. Das bedeutet, da▀ man sehr schnell, einfach und bequem neue Player
hinzufⁿgen kann.
3.2 Wieso gerade DeliTracker benutzen ?
Es gibt eine Vielzahl von Grⁿnden, DeliTracker zu verwenden, dazu zΣhlen:
░ lΣuft zuverlΣssig im Multitasking
░ábelegt die SoundkanΣle
░ hat ein ARexx - Interface
░ korrekte Abspielgeschwindigkeit auch auf NTSC-GerΣten
░ vertrΣgt sich mit dem serial.device
░ unterstⁿtzt mit xpk gecrunchte Soundfiles
░áverwaltet bis zu 64 Player
░álΣuft auf Turbokarten
░ hat ein Configurationsfile
░ enforcer und mungwall getestet
░ volle Unterstⁿtzung von CLI und Workbench (Tooltypes)
░ákinderleichte Bedienung durch ansprechende OberflΣche
░áVolume/Balance - Regler
░áMulitselect von Files
░ Resident Startup vom CLI
░ vollstΣndige PubScreen Unterstⁿtzung
░ Aktivierung per Hotkey (Commodity)
░ Module k÷nnen auch gespielt werden, indem ihr Icon in das
Kontrollfenster abgelegt wird (Appwindow).
░áwurde zu 100% in Assembler geschrieben
4. START VON DELITRACKER
4.1 Systemanforderungen
DeliTracker erfordert ab Version 1.31 mindestens Kickstart und Workbench
2.04. Wir empfehlen jedoch die Verwendung von Workbench 2.1 (bzw. 3.0).
Bei diesen Versionen ist der ASL Filerequester wesentlich verbessert
worden unterstⁿtzt nun auch Multiselect. Wenn gepackte Module abgespielt
werden sollen, mⁿssen zusΣtzlich die 'xpkmaster.library' und die
entsprechenden Sub-Libraries installiert sein. Der Grundbedarf an
Speicher ist etwa 70KB, dazu kommt dann noch der Speicher fⁿr evtl.
zusΣtzlich geladene Player, die Modulliste und das entpackte Soundfile.
Natⁿrlich sollte Ihr Amiga an einem Monitor mit Lautsprechern oder besser
noch an einer Stereo Anlage angeschlossen sein.
4.2 Start vom CLI bzw. von der Shell.
╓ffnen sie ein CLI- oder Shellfenster und gehen Sie mittels des 'CD'
Befehls in das Verzeichnis, in dem sich DeliTracker befindet. Geben Sie
jetzt 'DeliTracker' ein (ohne die Hochkommata !) und drⁿcken Sie die
Return-Taste. DeliTracker wird nun geladen und gestartet. Da DeliTracker
sich selbst vom CLI l÷st, mu▀ er nicht mit 'run' oder 'runback' gestartet
werden, um das CLI-Window wieder schlie▀en zu k÷nnen. Alle unter 5.4
erlΣuterten Optionen k÷nnen beim Start angegeben werden. Bei falschen
Eingaben oder ungⁿltigen Optionen wird ein Hilfstext ausgegeben.
Beispiel: 'DeliTracker config DT.config volume 32 filter no'
Startet DeliTracker mit dem Konfigurationsfile 'DT.config', schaltet den
Lowpass Filter ab (nicht beim A1000) und setzt die LautstΣrke auf 32.
4.3 Start von der Workbench
╓ffnen Sie den Ordner, in dem sich DeliTracker befindet und starten Sie
das Programm durch einen Doppelklick auf dessen Icon. Mit dem 'Info'-item
aus dem Workbench- bzw. Iconmenu (je nach Kickstart) k÷nnen alle unter
5.4 erklΣrten Optionen als ToolTypes eingetragen werden. Dabei ist jedoch
zu beachten, da▀ die Optionen von den Argumenten durch '=' getrennt
werden. Ungⁿltige Optionen werden beim Start von der Workbench ignoriert.
DeliTracker kann natⁿrlich auch als 'Default Tool' angegeben werden.
Beispiel: Config=DT.config
PrefWinXY=0/11
Volume=43
CX_Popup=NO
Diese Tooltypes bewirken, da▀ als Konfigurationsdatei 'DT.config'
geladen und die LautstΣrke auf 43 gesetzt wird. Die Koordinaten fⁿr
das Setupfenster werden auf Position 0/11 gestellt. Das Kontrollfenster
wird ⁿberhaupt nicht ge÷ffnet.
4.4 Installation
Falls Sie schon im Besitz einer Σlteren Version von DeliTracker sind,
sollten Sie diese (bis auf evtl. selbstgeschriebene Player) vor der
Installation der neuen Version komplett l÷schen.
Kopieren Sie dann DeliTracker in ein Verzeichnis Ihrer Wahl. In dieses
Verzeichnis mⁿssen Sie jetzt nur noch die 'DeliPlayers' Schublade
kopieren. Wir schlagen vor, da▀ Sie selten oder (noch) nicht ben÷tigte
Player von DeliPlayers/ nach DeliPlayers/PlayerStore/ kopieren. Sie
k÷nnen die Player dann bei Bedarf nachladen. Hinweis: Jeder Player,
der sich direkt im 'DeliPlayers' Verzeichnis befindet, wird beim Start
automatisch geladen. Das hei▀t aber auch, da▀ er Speicher ben÷tigt.
Wenn Sie gepackte Module besitzen mⁿssen Sie noch die XPK Libraries
installieren. Sollten sie sich noch nicht in Ihrem LIBS: Verzeichnis
befinden, k÷nnen Sie diese automatisch installieren lassen. CopyLibs
kopiert nach einem Doppelklick auf das Icon die powerpacker.library
und die XPK Libraries nach LIBS:.
5. GRUNDKONZEPTE
5.1 Player
Mit DeliTracker ist es m÷glich, einzelne Player nachzuladen. Ist ein
solcher Player geladen worden, erkennt und spielt DeliTracker die Module,
die von diesem Player unterstⁿtzt werden. Derzeit k÷nnen maximal 64
externe Player nachgeladen werden. Dies sollte jedoch erst mal fⁿr eine
Weile reichen. Beim Start von DeliTracker werden alle Player, die sich im
Verzeichnis 'DeliPlayers' (b.z.w im Configfile gespeicherten Playerpfad)
befinden, geladen. ZusΣtzlich haben Sie jederzeit die M÷glichkeit einen
weiteren bzw. neueren Player nachzuladen. Dieses Playerkonzept ist legt
den Grundstein fⁿr die gro▀e FlexibilitΣt von DeliTracker. Einer der
Vorteile davon ist, da▀ der Benutzer eine einheitliche OberflΣche
anspricht, um die unterschiedlichsten Musikformate abzuspielen. Soweit
dies m÷glich ist, bleiben die gesamten M÷glichkeiten von DeliTracker
voll erhalten. Die ist z.B. besonders nⁿtzlich im Zusammenhang von Multi-
Media Anwendungen und ARexx. Um Speicher zu sparen ist es m÷glich, die
ben÷tigten Player erst bei Bedarf zu laden b.z.w unbenutzte Player wieder
zu entfernen. Durch die nachladbaren Player ist es wesentlich einfacher
und schneller m÷glich, neue Entwicklungen (Verbesserungen alter Player,
Anpassung neuer Player) zu verbreiten. Das Player Interface gibt dem
Anwender au▀erdem die M÷glichkeit, selbst externe Player zu schreiben.
Im Augenblick sind ProTracker/NoiseTracker/SoundTracker15/SoundTracker31
und StarTrekker ohne AM Sounds bereits intern in DeliTracker enthalten.
CustomPlay ist ebenfalls ein interner Player, der fⁿr spezielle Module,
die ihren Player bereits beinhalten, geschaffen wurde. Dabei ist zu
beachten, da▀ diese Module nicht gepackt werden dⁿrfen, weil sie, um eine
Relozierung zu erm÷glichen, mit LoadSeg() geladen werden! Alle externen
Player sind in 'Player.dok' aufgelistet.
5.2 gepackte Module
Falls die xpkmaster.library V2 oder h÷her installiert ist, benutzt
DeliTracker deren Entpackroutinen. Ob Sie Soundmodule packen dⁿrfen,
k÷nnen Sie im PlayerInfo-Feld erfahren. Wenn dort 'Packable....NO'
steht, darf das Soundmodul auf keinen Fall gepackt werden, sonst wird
von DeliTracker nicht mehr erkannt. Bei 'Packable....YES' unterstⁿtzt
der jeweilige Player mit gr÷▀ter Wahrscheinlichkeit gepackte Module.
Zumindest kann in JEDEM Fall das von Ihnen angewΣhlte File gepackt
werden. Werden von diesem Player weitere Dateien nachgeladen, dⁿrfen
Sie diese m÷glicherweise nicht mehr packen. Lesen Sie dazu die zugeh÷rige
DeliPlayer Dokumentation.
Hinweis: Custommodule dⁿrfen nicht gepackt werden, da sie im Gegensatz
zu normalen Files nicht mit Read() sondern mit LoadSeg() geladen werden
(Relozierung des Playercodes) ! Eine m÷glichkeit Custom-Module dennoch
zu packen ist die verwendung des XFH Filehandlers.
5.3 Optionen und Voreinstellungen
Um eine flexible Konfiguration von DeliTracker zu erlauben, wurden
folgende Optionen eingefⁿhrt. Diese Optionen werden von DeliTracker als
KEYWORDS in TOOLTYPES, CLI Templates und in Konfigurationsdateien benutzt.
Die Gro▀- oder Kleinschreibung der Optionen ist unwichtig!
Option Defaultwert und Beschreibung
------------------- ----------------------------
cx_priority <pri> 0 bzw. normale PrioritΣt
Setzt die PrioritΣt, mit der DeliTracker als
Commodity gefⁿhrt wird. Gⁿltige Werte sind
-128 bis 127.
cx_popup <yes|no> yes bzw. Fenster offen
Legt fest, ob das Kontrollfenster beim Start
ge÷ffnet wird. Wird 'no' angegeben bleibt das
Kontrollfenster geschlossen. Es kann bei Bedarf
dann mittels Hotkey, Commodities Exchange oder
ARexx ge÷ffnet werden.
cx_popkey <string> "" d.h. kein Hotkey
Hiermit lΣ▀t sich ein beliebiger Hotkey zum
╓ffnen und Schlie▀en des Kontrollfensters
angeben. Ein Schlie▀en des Kontrollfensters ⁿber
Hotkey schlie▀t automatisch auch das Setup
Fenster. Gleiches gilt auch fⁿr Hide Interface.
Um einen Hotkey zeitweilig abzuschalten, kann
DeliTracker im Commodities Exchange Programm
auf INACTIVE gestellt werden.
config <Datei> "ENV:DeliTracker.config"
LΣdt die angegebene Datei beim Start als
Konfigurationsdatei.
Hinweis: Diese Option kann in Konfigurations-
dateien nicht angegeben werden !
module <Datei> Keine Datei bzw. die Modulliste ist leer.
Fⁿgt die angegebene Datei in die Modulliste ein.
pubscreen <Screen> "", d.h. der default PubScreen (meist Workbench)
Setzt den Namen fⁿr den PublicScreen, auf dem
sich DeliTracker ÷ffnen soll. Wenn der angegebene
Screen nicht verfⁿgbar ist (z.B. nicht existiert),
dann ÷ffnet sich DeliTracker auf dem derzeitigen
default PublicScreen.
Hinweis: Screennamen sind case-sensitive !
playerpath <Pfad> "DeliPlayers"
Legt den Pfad fest, aus dem DeliTracker die
externen Player nachlΣdt.
windowxy<XPos>/<YPos> 0/0
Das Kontrollfenster wird an der neuen Position
ge÷ffnet. Gelingt dies nicht, so ÷ffnet sich das
Fenster bei 0/0.
prefwinxy<XPos>/<YPos> 0/1
Das Setupfenster wird an der gewⁿnschten Position
ge÷ffnet. SchlΣgt dies fehl, so ÷ffnet sich das
Fenster bei 0/1.
volume <Volume> 64 (volle LautstΣrke)
Setzt die LautstΣrke auf den angegebenen Wert.
Werte werden im Bereich von 0 bis 64 akzeptiert.
balance <Balance> 0 (ausgewogene Balance)
Die Balance wird auf den angegebenen Wert
gesetzt. Werte von -64 (nur links) bis 64 (nur
rechts) sind gⁿltig.
reqlines <Nummer> 0 (Standardeinstellung des Requesters)
Legt die Anzahl der Zeilen im Filerequester fest.
subsong <Nummer> 0 bzw. erster Subsong
Falls das erste Modul in der Liste Subsongs
unterstⁿtzt, wird nicht der erste sondern der
angegebene Subsong gespielt.
playing <yes|no> yes bzw. Modul wird geladen
Legt fest, ob nach dem Start das erste Modul in
der Liste geladen werden soll.
Hinweis: Ob das Modul nach dem Laden sofort ge-
spielt wird, hΣngt von 'quick' (s. dort) ab!
filter <yes|no> no bzw. Filter aus
Schaltet den Amiga-internen Tiefpassfilter ein
oder aus. Es ist von Vorteil, den Filter ab-
geschaltet zu lassen, da dann Frequenzen ⁿber
7 kHz nicht mehr ausgefiltert werden, dies fⁿhrt
zu einer merklichen Klangverbesserung.
Hinweis: Dieser Schalter ist beim Amiga 1000
ohne Wirkung !
quick <yes|no> yes bzw. Modul wird sofort gespielt
Legt fest, ob ein Modul sofort nach dem Laden
oder erst nach explizitem Play (Gadget/Shortcut/
ARexx) abgespielt wird. Diese Option ist
hauptsΣchlich zur Synchronisation in ARexx-
Scripts gedacht.
random <yes|no> no bzw. sequentielle Reihenfolge
Legt fest, ob bei einer Next/Prev-Song Aktion das
nachfolgende bzw. vorhergehende oder ein zufΣllig
ausgewΣhltes Modul der Liste gespielt wird. Ein
einmal gespieltes Modul wird solange nicht mehr
gespielt, bis alle anderen Module in der Liste
gespielt wurden. Diese Vorgehensweise ist auch
unter dem Stichpunkt Shuffleplay bekannt. Diese
Option ist nur sinnvoll bei mehr als zwei Modulen
in der Modulliste.
append <yes|no> no bzw. die Modulliste wird vor jedem Selektieren
gel÷scht. Legt fest, ob bei jeder Fileauswahl
eine neue Liste angelegt werden soll oder die
Liste am Ende erweitert wird. Damit ist ein
Multiselect ⁿber mehrere Directorys m÷glich.
fadeout <yes|no> no bzw. kein Fading
Legt fest, ob bei einem Eject Ereignis der
aktuell spielende Song ausgeblendet werden soll
oder nicht. Diese Option ist nur bei Playern
wirksam, die eine LautstΣrkeneinstellung
unterstⁿtzen.
songend <yes|no> no bzw. kein Beachten des Songendes
Legt fest, ob das Songende beachtet wird oder
nicht. Einige Player k÷nnen DeliTracker
signalisieren, wenn das aktuelle Modul einmal
komplett gespielt wurde. Ist diese Option aktiv,
beachtet DeliTracker das Songende, d.h. das
aktuelle Modul wird gestoppt und dann eine
NextSong Aktion ausgel÷st. Bei nur einem Modul
in der Songliste wird dies nur gestoppt.
timeout <Nummer> 0 bzw. kein Timeout
Legt die Zeitspanne (in Sekunden) fest, die ein
Modul spielt. Danach wird eine NextSong Aktion
ausgel÷st. Bei 0 ist diese Funktion abgeschaltet.
5.4 Das Konfigurationsfile
Ein Konfigurationsfile ist eine Datei, in der mehrere Optionen mit den
gewⁿnschten Argumenten aufgefⁿhrt sind. Dabei ist zu beachten, da▀ die
'config'-Option als einzige nicht benutzt werden kann. Pro Zeile darf
nur eine Option verwendet werden. Eine Konfigurationsdatei kann entweder
mit den Save Optionen aus dem Setup Fenster oder manuell ertstellt werden.
Mit Hilfe von NewList k÷nnen sich Besitzer gro▀er Modulverzeichnisse eine
Modulliste eines kompletten Directorys erstellen. Tragen Sie dazu
'alias ModList NL -hTigfsF "module=\'%P\'" []' in Ihre Shell-Startup ein.
Der Output mu▀ nur noch in eine Datei umgeleitet werden.
Beispiel fⁿr eine Konfigurationsdatei:
windowxy=473/15
random=yes
songend=yes
timeout=300
reqlines=50
subsong=2
playerpath="Data:DeliPlayers"
module="Data:Modules/SonicArranger/MF__Slowmotion1.3"
module="Data:Modules/FutureComposer13/hidden part.pp"
Beim Start von DeliTracker haben die Optionen von CLI und Workbench
PrioritΣt ⁿber ein Konfigurationsfile, d.h. die Einstellungen im
Konfigurationsfile werden dann durch die angegebene Option ersetzt.
Bei Programmstart versucht DeliTracker das Konfigurationsfile
'ENV:DeliTracker.config' zu ÷ffnen. Ist diese Datei vorhanden, ⁿbernimmt
DeliTracker alle angegebenen Einstellungen daraus. Er lΣdt dann die
externen Player sowie das Modul und spielt es. Ist keine Konfigurations-
datei vorhanden, so wird versucht, externe Player aus dem Verzeichnis
'DeliPlayers' (im aktuellen Pfad) nachzuladen. Ist dieses Directory auch
nicht vorhanden, stehen dem Benutzer nur die internen Player zur
Verfⁿgung.
6. DIE STEUERUNG VON DELITRACKER
6.1 Das Kontroll Fenster
Das Kontrollfenster ist das zentrale Bedienelement von DeliTracker, alle
Einstellungen, die das Modul betreffen, k÷nnen hier gemacht werden.
6.1.1 Gadgets
Dies ist eine ▄bersicht ⁿber die Funktionen der einzelnen Gadgets.
Wenn bestimmte Gadgets gerastert dargestellt werden, ist fⁿr den
aktuellen Player diese Option nicht verfⁿgbar. Das kann zum einen
bedeuten, da▀ die Funktion vom Player gar nicht unterstⁿtzt wird
(wie z.B Subsongs beim SoundTracker) oder zum anderen, da▀ der Player
noch nicht optimal angepa▀t ist.
+---------+-+------------------------------------------------+-+
| | | [] | | [15]
[1] | ? + +------------------------------------------------+ +
| | | [] | | [14]
+---+-----+-+--+-----+-----+-----+----+-----+-----+-----+----+-+
[2] | + | | | | | | | | | | |»»\ |
+---+ |< | < | << | |> | >> | > | >| | [] | ^ | | | |
[3] | - | | | | | | | | | - | +--+ |
+---+-----+----+-----+-----+-----+----+-----+-----+-----+------+
[4] [5] [6] [7] [8] [9] [10] [11] [12] [13]
[1] ÷ffnet bzw. schlie▀t das Setupwindow (siehe unten)
[2] Faster: erh÷ht die Abspielgeschwindigkeit des aktuellen Moduls
[3] Slower: verringert die Abspielgeschwindigkeit des aktuell
spielenden Musikstⁿcks.
[4] Prev Song: wenn nur ein File angewΣhlt wurde und der Song mit
Kill entfernt wurde, wird er wieder eingeladen. Sind mehrere
Files selektiert, wird der VorgΣnger des aktuellen Songs
eingeladen (siehe auch Randomplay).
[5] Prev Subsong: spielt den vorherigen Subsong.
[6] Backward: der aktuelle Patternzeiger wird auf das vorherige
Pattern gesetzt. Wird gerade das erste Pattern gespielt, wird
er auf das letzte gesetzt.
á [7] Play/Pause: startet einen pausierenden bzw. gestoppten Sound oder
hΣlt den gerade spielenden Song an.
[8] Forward: der aktuelle Patternzeiger wird auf das nachfolgende
Pattern gesetzt. Wird gerade das letzte Pattern gespielt, wird
er auf das erste gesetzt.
[9] Next Subsong: spielt den nΣchsten Subsong. Manche Musikformate
erlauben es mehrere Melodien in einem Modul abzuspeichern, diese
und die 'Prev Subsong' Funktion erlauben das 'BlΣttern' in solchen
Modulen.
[10] Next Song: bei nur einem angewΣhlten File wie bei 'Prev Song',
sonst wird der Nachfolger des aktuellen Songs eingeladen.
[11] Stop Song: setzt die Abspielgeschwindigkeit und den Patternzeiger
auf den Startwert zurⁿck.
[12] Kill Song: stoppt ggf. den Song und entfernt ihn aus dem Speicher.
[13] Load Song: ÷ffnet den Filerequester. Wenn beim AuswΣhlen die SHIFT-
Taste gehalten wird, k÷nnen mehrere Files angewΣhlt werden. Diese
werden dann in eine zyklische Liste eingetragen. Nach Verlassen des
Requesters wird der erste ausgewΣhlte Song geladen und gespielt.
Alle weiteren k÷nnen ⁿber 'Next Song' bzw. 'Prev Song' erreicht
werden. Falls genⁿgend Speicher vorhanden ist, wird der aktuell
spielende Song erst gestoppt, wenn der angewΣhlte komplett geladen
wurde. Diese eingebaute Doublebuffering-Routine sorgt speziell bei
Floppybesitzern fⁿr Dauersoundgenu▀.
[14] Balance-Regler: dieses Gadget dient zur Regelung der Balance.
[15] Volume-Regler: Gadget fⁿr die LautstΣrke-Regelung
6.1.2 Menus
Project
Load Module <A> L .........╓ffnet den Filerequester.
Play/Pause .........Startet bzw. Pausiert das Modul.
Stop Playing .........Stopt das aktuelle Modul.
Eject Module .........Stoppt das aktuelle Modul und
entfernt es aus dem Speicher.
=================
Prefs ... .........╓ffnet das Setup Fenster.
=================
About ... <A> ? .........╓ffnet den 'About' Requester.
=================
Quit <A> Q .........Beendet DeliTracker.
Control
Faster .........Erh÷ht das Abspieltempo.
Slower .........Verringert das Abspieltempo.
Forward .........Springt ein Pattern vor.
Backward .........Springt ein Pattern zurⁿck.
Next SubSong .........Springt zum nΣchsten Subsong.
Prev Subsong .........Springt zum vorherigen Subsong.
Next Module .........LΣdt das nΣchste Musikstⁿck in
in der Liste, falls RANDOMPLAY
deaktiviert ist.
Prev Module .........LΣdt das vorherige Modul (s.o.).
6.1.3 Shortcuts
Alle Funktionen des Kontroll Fensters lassen sich durch Tastatur-
abkⁿrzungen ausl÷sen. Um die Shortcut m÷glichst einprΣgsam zu machen,
wurden die Kontrollfunktionen auf Tasten des Ziffernblocks hierarchisch
zugeordnet. Zudem gibt es noch die M÷glichkeit, einen Hotkey zum ╓ffnen
und Schlie▀en des Kontrollfensters zu definieren (siehe cx_hotkey).
* und <A> L Filerequester zur Modulauswahl ÷ffnen.
/ ÷ffnet Setupwindow.
] und ) nΣchsten angewΣhlten Song spielen (nur bei mehreren Files).
[ und ( VorgΣngersong spielen (nur bei mehreren Files).
8 nΣchsten Subsong spielen.
7 vorherigen Subsong spielen.
5 Patternzeiger auf nΣchstes Pattern setzen
6 Patternzeiger auf vorheriges Pattern setzen
+ erh÷ht Abspielgeschwindigkeit
- verringert Abspielgeschwindigkeit
1 Stop Song (Song anhalten, Patternzeiger auf Anfang setzen)
0 Play/Pause (spielen bzw. anhalten der Musik)
. Song anhalten und seinen Speicher freigeben (Eject)
9 verringert die LautstΣrke (neben -)
6 erh÷ht die LautstΣrke (neben +)
2 verΣndert die Balance so, da▀ der linke Kanal lauter wird.
3 verΣndert die Balance so, da▀ der rechte Kanal lauter wird.
<A> ? ÷ffnet den 'About' Requester.
<A> Q beendet DeliTracker.
6.1.4 Appwindow
Um die Modulselektion m÷glichst komfortabel zu halten, k÷nnen sie Icons
von Modulen und Modulschubladen auf dem Kontrollfenster ablegen. Die
Module werden dann behandelt, als seien sie im Filerequester selekitert
worden. Bei Schubladen werden alle Files in die Modulliste ⁿbernommen.
Files, bei denen es sich nicht um Module handeln kann, wie z.B '.info'
Files, werden ebenso wie Subdirectorys nicht eingelesen. Um diese
Funktion nutzen zu k÷nnen, mu▀ das DeliTracker Kontrollfenster natⁿrlich
auf der Workbench ge÷ffnet sein.
6.2 Das Setup Fenster
Das Setupfenster dient zur Einstellung von globalen Parametern sowie
Playerspezifischen Einstellungen. Es kann auf mehrere Arten ge÷ffnet
werden: Setup Gadget im Kontrollfenster, ⁿber den Menⁿpunkt 'Prefs ...',
ⁿber ShortCut '/' oder ⁿber das ARexx Kommando 'openprefswin'. Um einen
Player zu aktivieren, wΣhlen Sie den Player im Playerrequester an. Darauf
werden im PlayerInfo-Feld alle verfⁿgbaren Informationen ⁿber diesen
Player angezeigt.
6.2.1 Gadgets
ADD LΣdt den angewΣhlten Player und legt den Pfad fⁿr
externe Player fest. Ein schon geladener Player
gleichen Namens wird allerdings nur dann durch den
neuen Player ersetzt, falls seine Versionsnummer
kleiner als die des neu geladenen Players ist.
DEL L÷scht den selektierten Player, d.h. sein Speicher
wird freigegeben. Interne Player k÷nnen zwar ebenfalls
gel÷scht werden, jedoch wird deren Speicher nicht
freigegeben.
Filter siehe 5.4 Filter Voreinstellung
Quick siehe 5.4 Quick Voreinstellung
Random siehe 5.4 Random Voreinstellung
Songend siehe 5.4 Songend Voreinstellung
Append siehe 5.4 Append Voreinstellung
Fadeout siehe 5.4 Fadeout Voreinstellung
Time siehe 5.4 Timeout Voreinstellung
Load Config Eine Konfigurationsdatei laden und auswerten.
Save Config Schreibt alle aktuellen Einstellungen und die Modulliste
in eine Konfigurationsdatei.
Save List Schreibt nur die aktuelle Modulliste in eine
Konfigurationsdatei.
Config Falls vorhanden, wird die spezifische Konfigurations-
routine des angewΣhlten Players aufgerufen.
OK Schlie▀t das Setup-Fenster.
Sie k÷nnen das Playerdirectory auch angeben, indem sie den Pfad in das
Stringgadget (links neben ADD) eingeben.
6.2.2 Shortcuts
Um auch hier die Tastaturkⁿrzel einprΣgsam zu gestalten, wurde, so weit
m÷glich, der Anfangsbuchstabe der Funktion als Shortcut gewΣhlt. Die
Tastaturkⁿrzel k÷nnen als Gro▀- und Kleinbuchstaben eingegeben werden.
a <A>dd (Filerequester zum Playerladen ÷ffnen).
d <D>el (selektierten Player entfernen).
l <L>oad (Konfiguartionsdatei mittels Filerequester laden).
s <S>ave (Konfiguartionsdatei speichern).
c <C>onfig (selektierten Player, wenn m÷glich, konfigurieren).
o <O>k (Setupwindow verlassen).
q <Q>uickstart umschaltem.
f <F>ilterzustand wechseln.
r <R>andommodus umschalten.
p A<P>pendmodus umschalten.
e Song<E>nd Erkennung umschalten.
u Fadeo<U>t umschalten.
t <T>ime(out) Gadget aktivieren.
6.3 ARexx
Nahezu alle Funktionen von DeliTracker lassen sich auch ⁿber ARexx
steuern. Dies ist z.B. in Verbindung mit AmigaVision sehr nⁿtzlich.
DeliTracker kann ⁿber "rexx_DT" als Function Host angesprochen werden.
Folgende Kommandos stehen zur Verfⁿgung:
quit beendet DeliTracker
filter <yes|no> yes: Schaltet den Filter an.
no: Schaltet den Filter ab.
quickstart <yes|no> yes: Schaltet die Quickstart-Funktion an.
no: Schaltet die Quickstart-Funktion ab.
random <yes|no> yes: Schaltet Randomplay an.
no: Schaltet Randomplay ab
songend <yes|no> yes: Eintreffende Songendsignale werden beachtet.
no: Schaltet die Songend Erkennung ab.
append <yes|no> yes: Aktiviert den Appendmodus.
no: Deaktiviert den Appendmodus.
fadeout <yes|no> yes: Aktiviert den Fadeoutmodus.
no: Deaktiviert den Fadeoutmodus.
timeout <SECS> Timeout wird auf die angegebene Zeitspanne (SECS)
in Sekunden gesetzt. Bei SECS = 0 wird diese Option
abgeschaltet.
volume <VOL> Setzt Volume auf <VOL> (Bereich von VOL: 0 - 64)
balance <BAL> Setzt Balance auf <BAL>, 0 ist default, -64 nur
links, 64 nur rechts (Bereich von BAL: -64 bis 64)
forward NΣchstes Pattern spielen
backward Vorheriges Pattern spielen
nextsong NΣchsten Song spielen
prevsong Vorherigen Song spielen
nextsubsong NΣchsten Subsong spielen
prevsubsong Vorherigen Subsong spielen
faster Abspielgeschwindigkeit erh÷hen
slower Abspielgeschwindigkeit verrringern
loadconfig [DATEI] Konfigdatei [DATEI] laden, wenn [DATEI] angegeben
wurde, sonst Requester fⁿr 'Konfigdatei laden'
÷ffnen.
saveconfig [DATEI] Konfiguration und Modulliste in [DATEI] sichern,
wenn [DATEI] angegeben wurde, sonst entsprechenden
Requester ÷ffnen.
savelist [DATEI] Modulliste in [DATEI] sichern, wenn [DATEI]
angegeben wurde, sonst entsprechenden Requester
÷ffnen.
loadplayer [PLAYER] LΣdt den angegebenen Player, ansonsten wird der
Requester zum Player-Laden ge÷ffnet.
deleteplayer <NUMMER> Entfernt den Player mit der angegebenen Nummer aus
der Playerliste. Bei diesem Kommando ist allerdings
zu beachten, da▀ die Module des gel÷schten Players
ab sofort nicht mehr erkannt werden.
configplayer <NUMMER> Ruft die Konfigurationsroutine des dazugeh÷rigen
Players auf.
playpause Der aktuell spielende Song wird angehalten wenn er
spielt bzw. gespielt wenn er pausiert ist.
stop Stoppt den aktuell spielenden Song.
playmod [MODUL] Falls [MODUL] angegeben, wird es geladen und
abspielt, sofern es von einem Player erkannt wird.
Ansonsten ÷ffnet sich der Filerequester zur Datei-
auswahl.
eject Entfernt das derzeitige Modul aus dem Speicher.
makelist [MODUL] Falls [MODUL] angegeben ist, wird es an das Ende
einer internen Modulliste angehΣngt. Wird es nicht
angegeben, dann wird die interne Modulliste unter
Berⁿcksichtigung des Append-Flags zur aktuellen
Modulliste gemacht.
playlist <NUMMER> Spielt das Modul mit der angegebenen Listenposition.
pubscreen <SCREEN> Schlie▀t alle offenen DeliTracker Fenster auf dem
derzeitigen Screen und versucht, das Kontrollfenster
auf dem PubScreen mit dem Namen <SCREEN> wieder zu
÷ffnen.
openmainwin ╓ffnet das Kontrollfenster
closemainwin Schlie▀t das Kontrollfenster (nun kann DeliTracker
nur noch von ARexx aus gesteuert werden).
openprefswin ╓ffnet das Setup-Fenster
closeprefswin Schlie▀t das Setup-Fenster
status <group> <dependent> Gibt den aktuellen Status zurⁿck. Dabei
werden die drei Gruppen Globale Einstellungen (g),
ModulabhΣngige Einstellungen (m) und Playerab-
hΣngige Einstellungen (p) unterschieden. Je nach
Gruppe mⁿssen evtl. weitere Argumente ⁿbergeben
werden.
<group> = g : Global
<dependent> = <cmd>
<cmd> Bedeutung und Returnwert
ver DeliTracker Version Zahl
dir Playerverzeichnis String
num Playeranzahl Zahl
led Filter-Zustand <yes|no>
qst Quickstart-Zustand <yes|no>
rnd Random-Zustand <yes|no>
app Append-Zustand <yes|no>
fad Fadeout-Zustand <yes|no>
end Songend-Zustand <yes|no>
tim Song-Timeout (sec) Zahl
mwi Kontrollfenster offen <yes|no>
pwi Setup-Fenster offen <yes|no>
vol derzeitige LautstΣrke Zahl
bal derzeitige Balance Zahl
ply Song spielt <yes|no>
pub gewⁿnschter PubScreen String
<group> = m : Module
<dependent> = <cmd>
<cmd> Bedeutung und Returnwert
dir Modulverzeichnis String
fil Modulname String
pnr aktiver Player Zahl
max Module in Modulliste Zahl
num Position in Modulliste Zahl
<group> = p : Player
<dependent> = <playernum> <cmd>
<cmd> Bedeutung und Returnwert
nam Playername String
cre Creatorname String
ver Versionsnummer Zahl
vol LautstΣrke verΣnderbar <yes|no>
bal Balance verΣnderbar <yes|no>
jmp Patternjump verfⁿgbar <yes|no>
spd Playspeed regelbar <yes|no>
sub Subsong verfⁿgbar <yes|no>
cfg Player konfigurierbar <yes|no>
pck Supports Packed Mods <yes|no>
Bei eckigen Klammern [...] kann ein Argument angegeben werden, bei
spitzen Klammern <...> mu▀ es angegeben werden.
Hinweis: Fⁿr fast alle Kommandos existieren Beispiel Scripts. Alle
ARexx Kommandos dⁿrfen in Gro▀- oder Kleinschreibung verwendet werden.
6.4 Commodities
Da DeliTracker ein Commodity ist lassen sich einige dafⁿr typische Dinge
mit dem Commodies Exchange Programm steuern. Dazu mⁿssen sie zuerst unter
'Verfⁿgbare Commodities' DeliTracker anwΣhlen. Das Cycle Gadget zeigt
ihnen an, ob der Hotkey zum ÷ffnen bzw. schlie▀en des Kontrollfensters
aktiv oder inaktiv ist. Um das Kontrollfenster zu ÷ffnen bzw. ggf. zu
aktivieren klicken sie auf 'Anzeige sichtbar'. Das 'Anzeige verborgen'
Gadget dient zum schlie▀en der DeliTracker Fenster. Ein Klick auf das
'Entfernen' Gadget bewirkt, das DeliTracker beendet wird. Wie bei
Commodities ⁿblich bewirkt ein BetΣtigen des Closegadgets nur ein
Schlie▀en des Fensters, jedoch kein Beenden des Programms.
7. PROBLEMECKE
Symptom: Das Preferences Window lΣ▀t sich nicht ÷ffnen. ▄berprⁿfen Sie,
ob die H÷he des Screens, auf dem DeliTracker lΣuft, mindestens 190 Pixel
plus die Titelbarh÷he ist. Bei einem zu schmalen oder zu niedrigen
Screen lΣ▀t sich nΣmlich das Preferences Window nicht ÷ffnen.
Gegenma▀nahme: Verkleinern Sie den Font (topaz 8) oder benutzen Sie
einen gr÷▀eren Screen.
Ein Hinweis an alle Besitzer von Turbokarten (speziell 68030 und h÷her):
Obwohl DeliTracker selbst problemlos auf schnelleren Prozessoren lΣuft,
kann es bei einigen nicht sauber programmierten (externen) Playern zu
Problemen kommen. Das Timing mancher Abspielroutinen ist nΣmlich nur auf
den 68000'er zugeschnitten und verursacht dann ein Klirren oder Auslassen
von Noten. Zum Abstⁿrzen der Player oder gar von DeliTracker selbst kann
dies aber nicht fⁿhren. Auch in spΣteren Versionen von DeliTracker wird
es voraussichtlich keine turbofeste Version solcher Player geben, da es
oft fast unm÷glich ist, diese entsprechend umzuprogrammieren. Bei Playern,
die absolut auf die Interrupt Vectortabelle ($70 Vector/Audio-DMA Ende)
schreiben, kann es passieren, da▀ man nichts h÷rt, wenn das VBR-Register
geΣndert wurde. In der Playerdokumentation ist vermerkt, auf welche
Player dies zutrifft.
Ein Hinweis an alle Besitzer von NTSC-Amigas und Amigas mit ECS-Denise:
Prinzipiell spielen alle Player sowohl auf PAL- als auch auf NTSC-GerΣten
gleich schnell, da die Abspielgeschwindigkeit durch einen CIA-B Interrupt
gesteuert wird. Einige (externe) Player ben÷tigen jedoch unbedingt einen
VBlank Interrupt. Da dessen Frequenz vom jeweiligen Videomodus abhΣngt,
spielt ein solcher Player im Productivity-, NTSC- oder PAL-Modus
unterschiedlich schnell.
Screens mit 16 Farben in Hires oder mit 2 Farben in SuperHires b.z.w.
Productivity ben÷tigen ca. 60% aller Buszyklen des ChipRam. Wenn dann
gleichzeitig ein besonders rechenintensiver Player (z.B. einer mit mehr
als 4 Stimmen) aktiv ist, steht das System fast still und der jeweilige
Player kann mangels Rechenzeit falsch spielen.
Ein Hinweis an alle Modem-Besitzer:
Wenn ein Player den internen DeliTracker Timer-Interrupt benutzt, treten
keine ▄bertragungsfehler bei seriellen Transfers (getestet auf einem A500
mit NComm bis 19200 Baud) auf. Bei Playern, die selbst einen Timer-
Interrupt generieren, sind derartige St÷rungen nicht auszuschlie▀en.
8. DIE PROGRAMIERUNG EXTERNER PLAYER
DeliTracker unterstⁿtzt sog. externe Player. Das sind Executables, die in
einem speziellen Format vorliegen und von DeliTracker nachgeladen werden
k÷nnen.
8.1 Das externe Player Konzept
Externe Player sind Executables (Objekt Files), die den Replaycode eines
Soundsystems enthalten. Am Anfang besitzen sie eine charakteristische
Playerstruktur. Diese Struktur wird mit dem Macro aus dem Includefile
'misc/deliplayer.i' erzeugt. Es gibt zwei Arten von externen Playern:
normale Player und Custom Module.
8.1.1 Schematischer Aufbau von externen Playern
Normale Player unterscheiden sich von Custom Modulen durch das
Vorhandensein einer Check Routine und das Fehlen des DTP_CustomPlayer
Tags. Desweiteren enthalten sie natⁿrlich keine Musikdaten :-)
{ Playerheader } Kennzeichnet das Object als Player.
{ TagArray } Beschreibung, was der Player kann.
{ Interfacecode } Playername/Registerumsetzung/Checkcode u.Σ.
{ Replaycode } Eigentlicher Musikabspielcode.
{ evtl. Daten } und Daten
8.1.2 Schematischer Aufbau von Custom Modulen
Custom Module sind keine Module im herk÷mmlichen Sinn, sondern im
wesentlichen Player, die ein Spezialmodul beinhalten. Mit diesem Format
k÷nnen Sie auch die ausgefallensten Moduleformate leicht an DeliTracker
anpassen. Sollten fⁿr den Player jedoch mehrere Module existieren, ist
es in jedem Fall ratsam, einen richtigen Player zu schreiben.
{ Playerheader } Kennzeichnet das Object als Player.
{ TagArray } Beschreibung, was der Player kann.
{ Interfacecode } Routinen zur Registerumsetzung u.Σ.
{ Replaycode } Eigentlicher Musikabspielcode.
{ evtl. Daten } und Daten
{ SOUND DATEN } Das eigentliche Modul
8.2 Anpassung von Playern
Es ist relativ einfach, eine Replayroutine an DeliTracker anzupassen.
Alles was Sie tun mⁿssen ist ein wenig Interfacecode zu schreiben. Dies
ist aber halb so wild, denn DeliTracker stellt ihnen viele hilfreiche
Routinen zur Verfⁿgung. Um ein neues Soundsystem anzupassen, ben÷tigen
Sie zum einen den Quellcode oder ein linkbares Objektfile der Replay-
routine, zum anderen sollten mindestens ca. 5 Module zum Testen der
Funktionstⁿchtigkeit des Players vorhanden sein.
8.2.1 Playerheader
Das PLAYERHEADER Macro generiert den Header, der das File als externen
Player identifiziert. Dieses Macro mu▀ angegeben werden und ganz am
Anfang des Players stehen. Als einziger Parameter ist ein Pointer auf
ein Tag Array einzutragen, in dem alle Funktionen stehen, die der
Player DeliTracker zur Verfⁿgung stellt. Bei allen Funktionsaufrufen
au▀er der Interruptroutine (DTP_Interrupt) enthΣlt a5 die Base. Globale
Variablen k÷nnen dadurch adressiert werden (siehe 'misc/deliplayer.i').
Da DeliTracker vor Aufruf einer Playerroutine (au▀er bei DTP_Interrupt)
alle Register sichert, dⁿrfen diese verΣndert werden.
PLAYERHEADER <tagarray>
tagarray Pointer auf ein Tag Array, das mit TAG_DONE
abgeschlossen sein mu▀. Tags, bei denen ti_Data NULL
ist, werden ignoriert.
8.2.2 Modulerkennung
Damit DeliTracker die einzelnen Module unterscheiden kann, befindet
sich in jedem Player eine Erkennungsroutine, die auf ein zugeh÷riges
Modul testet. Diese Routine prⁿft auf Stellen im Modul, die bei allen
Modulen eines Players gleich sind. So z.B. auf 'M.K.' bei Offset $438
im NoiseTracker-Player. Bei Sound- und NoiseTracker ist nur das Modul
abgespeichert, z.B. bei MarkII hΣngt vor jedem Modul noch die Replay-
routine. Bei so einem Modul mⁿssen Sie auf signifikante Assembler-
befehle testen. Ein Vergleich auf ein oder zwei Sprungbefehle, egal
ob bra oder jmp, ist hier nicht ausreichend, da bei vielen Modulen
dieses Typs Sprungtabellen am Anfang stehen und der Player m÷glicher-
weise das falsche Modul erkennen k÷nnte, was in den meisten FΣllen zum
Absturz fⁿhrt. Der Player mu▀ genau eine Checkroutine verwenden. Daraus
ergeben sich zwei Grundtypen von Playern.
a) Typ eins Player - in der Regel etwas komplexer
Bei ihnen ist die Check1 Funktion implementiert.
Vorteil: Es lassen sich auch Player realisieren, die das Modul selbst
nachladen.
Nachteil: Gepackte Files werden nicht unterstⁿtzt.
Dieser Player sollte nur fⁿr HΣrtefΣlle verwendet werden.
(z.B: FTM, IFF-8SVX Player, der das Sample wΣhrend dem Spielen
nachlΣdt, ...)
b) Typ zwei Player - die einfachere Variante
Bei ihnen ist die Check2 Funktion implementiert
Vorteil: Das Modul kann gepackt sein, der Player bemerkt davon nichts.
Nachteil: Das Modul ist in jedem Fall im Chip-Memory.
Es sollte im Normalfall dieser Playertyp verwendet werden.
Egal ob Typ eins oder zwei, wenn der Player das Modul erkannt hat, mu▀
er in d0.l=0 zurⁿckliefern, wenn nicht d0.l<>0.
8.2.3 Interrupts
Hier gibt es auch eine Einteilung in zwei verschiedene Typen.
a) Player die den DeliTracker Interrupt verwenden
Vorteil: Der Player ist vom Videomodus unabhΣngig.
Besitzt automatisch die Faster/Slower Funktion.
Kein Aufwand fⁿr den Interrupt (Code + Interruptstruktur).
Ist kompatibel zum serial.device
Nachteil: Der Interrupt kommt nicht synchron zum VBlank. (Dies fⁿhrt
nur in den seltensten FΣllen zu Problemen.)
b) Player die ihren eigenen Interrupt erzeugen.
Vorteil: Es k÷nnen andere Interruptquellen benutzt werden
(z.B. AudioIRQ).
Nachteil: Erh÷hter Aufwand, bei VBlank nicht mehr unabhΣngig vom
Videomodus.
Wenn ein eigener Timerinterrupt verwendet wird, sollte die CIAB
(wg. OS2.0) und die entsprechenden Resourcefunktionen verwendet werden.
Au▀erdem ist es sehr sinnvoll die Replayroutine nicht direkt im CIA-B
TimerInterrupt abspielen zu lassen, sondern im Timerinterrupt einen
Soft-Interrupt mittels Cause() zu generieren. In diesem SoftInt kann
man dann die eigentliche Replayroutine ablaufen lassen. So hat man den
Vorteil, da▀ man wesentlich kompatibler zum serial.device ist. Dies
liegt daran, da▀ SoftInt eine niedrigere PrioritΣt als der der RBF
(Read Buffer Full) Interrupt hat d.h. erst wird der serielle Port
bedient, dann erst die Replayroutine. Es wird davor gewarnt, direkt in
die Interruptvektoren zu schreiben! Zur Erinnerung: vom Betriebssystem
werden die Funktionen AddIntServer() und SetIntVector() zur Verfⁿgung
gestellt!
8.3 Bedeutung der Tags
Au▀er den SystemTags (TAG_DONE, TAG_IGNORE, TAG_MORE, TAG_SKIP) dⁿrfen
folgende Tags verwendet werden:
DTP_CustomPlayer (BOOL) - dieser Tag deklariert einen Player als
Customplayer.
Bei Verwendung dieses Tags sind folgende Tags dann
bedeutungslos: DTP_PlayerVersion
DTP_PlayerName
DTP_Creator
DTP_Check1
DTP_Check2
DTP_ExtLoad
DTP_Config
DTP_UserConfig
DTP_RequestDTVersion (WORD) - damit kann man sicherstellen, da▀
mindestens eine bestimmte Version von DeliTracker
vorhanden ist. Dieser Tag mu▀ angegeben werden, wenn
bei den DeliTrackerGlobals neue Funktionspointer
hinzugekommen sind und diese vom Player benutzt werden.
ti_Data ist dabei die Playerrevision.
DTP_RequestV37 (BOOL) - wenn dieser Tag vorhanden ist, wird der Player
nur noch von der Kick 2.0 Version von DeliTracker geladen
(d.h. dtg_GadToolsBase ist gⁿltig).
DTP_PlayerVersion (WORD) - Tag, der die Revisionsnummer des Players
enthΣlt. Bei zwei Playern mit dem gleichen Playernamen wird
derjenige mit der gr÷▀eren Revisionsnummer geladen.
DTP_PlayerName (STRPTR) - ti_Data enthΣlt den Pointer auf den Namen des
Players. Dieser String kann zwar beliebig lang sein aber
zur Zeit werden nur die ersten 24 Zeichen angezeigt. Dieser
Tag mu▀ existieren!
DTP_Creator (STRPTR) - Pointer auf den Namen des Autors. Dieser wird im
Setupfenster im Playerinfofeld angezeigt. Dieser String
kann $A als Zeilenumbruch enthalten.
DTP_Check1 (FPTR) - Pointer auf eine Modulerkennungsroutine, die
aufgerufen wird, wenn 1024 Bytes des Moduls geladen sind.
Wird das Modul erkannt, liefert sie d0=0, ansonsten d0<>0.
DTP_Check2 (FPTR) - Pointer auf eine Modulerkennungsroutine, die
aufgerufen wird, wenn das komplette Modul geladen und evtl.
entpackt ist. Wird das Modul erkannt, liefert sie d0=0,
ansonsten d0<>0.
DTP_ExtLoad (FPTR) - Pointer auf eine optionale Laderoutine fⁿr Module.
Ist kein Fehler aufgetreten, wird d0=0 zurⁿckgegeben, sonst
d0<>0. Hinweis: Achten Sie darauf, da▀ im Fehlerfall alle
allocierten Ressourcen (Memory, Locks, ...) wieder
freigegeben werden, da dann keine weiteren Playerfunktionen
mehr angesprungen werden.
DTP_Interrupt (FPTR) - Pointer auf eine Interruptroutine, die mittels
eines Timerinterrupts standardmΣ▀ig alle 1/50 sec
aufgerufen wird. Dies ist die Standardmethode, um mit der
richtigen Abspielgeschwindigkeit im PAL/NTSC/Productivity
Videomodus zu spielen. Wenn keine DTP_Faster/DTP_Slower
Tags angegeben sind, ⁿbernimmt DeliTracker dies durch
VerΣndern der Interruptfrequenz. Dieser Tag kann auch nicht
existieren, dann mⁿssen aber DTP_StartInt/DTP_StopInt
vorhanden sein !
DTP_Stop (FPTR) - Pointer auf eine optionale Stoproutine. Wenn dieser Tag
nicht vorhanden ist, verfΣhrt DeliTracker folgenderma▀en:
Interrupt stoppen (DTP_StopInt)
Sound Cleanup (DTP_EndSnd)
Song initialisieren (DTP_InitSnd)
Ansonsten hat diese Routine die Aufgabe, einen evtl.
spielenden Song anzuhalten und so zu initialisieren, da▀
dieser beim nΣchsten Starten des Interrupts von Anfang an
zu spielen beginnt.
DTP_Config (FPTR) - Pointer auf eine optionale Initialisierungsroutine.
Diese wird nur einmal unmittelbar nach dem Laden des
Players aufgerufen. M÷gliche Anwendungen: Laden einer
playerspezifischen Konfigurationsdatei.
DTP_UserConfig (FPTR) - Pointer auf eine optionale Initialisierungs-
routine. Diese wird nur dann aufgerufen, wenn der User den
Player im Setupfenster anwΣhlt und das 'Config' Gadget
drⁿckt. M÷gliche Anwendungen: ╓ffnen eines Fensters zum
Setzen weiterer Optionen wie z.B. Instrumentenpfad und
Abspeichern einer playerspezifischen Konfigurationsdatei.
DTP_SubSongRange (FPTR) - Dieser Tag sollte angegeben werden, wenn der
Player MultiModule unterstⁿtzt. ti_Data zeigt dabei auf
eine Routine, die als Returnwert in d0 die minimale und
in d1 die maximale Subsongnummer zurⁿckgeben mu▀.
Hinweis: Wenn m÷glich sollte dieser Tag (evtl. zusammen
mit DTP_SubSongTest) anstelle von DTP_NextSong/DTP_PrevSong
verwendet werden.
DTP_InitPlayer (FPTR) - Pointer auf eine optionale Initialsierungs-
routine, die aufgerufen wird, wenn ein Modul erfolgreich
geladen wurde. Tritt kein Fehler auf, liefert sie d0=0,
ansonsten d0<>0. Hier mu▀ die Allocation der AudiokanΣle
stattfinden! (DeliTracker stellt dafⁿr eine eigene Routine
zur Verfⁿgung) Falls der Player Multi-Module unterstⁿtzt,
mu▀ hier dtg_SndNum(a5) auf die erste Subsongnummer gesetzt
werden. Falls eine Routine fⁿr DTP_SubSongRange existiert,
macht DeliTracker das automatisch (d.h. die Initialisierung
von dtg_SndNum(a5) kann weggelassen werden).
DTP_EndPlayer (FPTR) - Pointer auf eine optionale Cleanuproutine, die
aufgerufen wird, wenn das Modul aus dem Speicher entfernt
wird. Hier mu▀ die Freigabe der AudiokanΣle stattfinden!
(DeliTracker stellt dafⁿr eine eigene Routine zur
Verfⁿgung)
DTP_InitSound (FPTR) - Pointer auf eine optionale Initialsierungsroutine.
Diese mu▀ das Modul initialisieren, so da▀ beim Starten des
Interrupts der Song von Anfang an zu spielen beginnt.
DTP_EndSound (FPTR) - Pointer auf eine optionale Cleanuproutine. Diese
kann z.B. die LautstΣrkeregister und die Audio-DMA
rⁿcksetzen.
DTP_StartInt (FPTR) - Pointer auf eine Initialsierungsroutine, die
existieren mu▀, wenn DTP_Interrupt nicht vorhanden ist.
In diesem Fall mu▀ hier der Sound gestartet werden.
DTP_StopInt (FPTR) - Pointer auf eine Cleanuproutine, die existieren mu▀,
wenn DTP_Interrupt nicht vorhanden ist. In diesem Fall mu▀
hier der Sound gestoppt werden.
DTP_Volume (FPTR) - Pointer auf eine Funktion, welche die LautstΣrke neu
setzt. Die Funktion wird aufgerufen, wenn die Volume neu
gesetzt wird (Slider, ARexx) und beim Initialisieren des
Moduls vor DTP_InitSnd. Die Mastervolume steht in
dtg_SndVol(a5). Die Mastervolume ist dabei der maximale
Volumewert. Die effektive Volume errechnet sich also
durch: VOL_eff = (( dtg_Volume(a5) * modulevolume )>>6)
NΣheres siehe Beispielsourcen.
DTP_Balance (FPTR) - Pointer auf eine Funktion, welche die Balance neu
setzt. Die Funktion wird aufgerufen, wenn die Balance neu
gesetzt wird (Slider, ARexx) und beim Initialisieren des
Moduls vor DTP_InitSnd. Die Balance fⁿr die linken KanΣle
steht in dtg_SndLBal(a5), fⁿr die rechten KanΣle in
dtg_SndRBal(a5). Hinweis: Alle Player die Balance unterstⁿtzen
k÷nnen auch Volume! Man verwendet dann die gleiche Routine
zum Setzen der Volume&Balance. Die linke Volume errechnet
sich wie folgt: (( dtg_Volume(a5) * dtg_SndLBal(a5) )>>6)
Entsprechendes gilt fⁿr rechts.
DTP_Faster (FPTR) - Pointer auf eine Funktion, die den Abspielvorgang
beschleunigt.
DTP_Slower (FPTR) - Pointer auf eine Funktion, die den Abspielvorgang
verlangsamt.
DTP_NextPatt (FPTR) - Pointer auf eine Funktion, die den Patternzeiger
um eins erh÷ht.
DTP_PrevPatt (FPTR) - Pointer auf eine Funktion, die den Patternzeiger
um eins erniedrigt.
DTP_NextSong (FPTR) - Pointer auf eine Funktion, die Subsongnummer auf
den nΣchsten Subsong setzt und diesen spielt.
(Falls vorhanden)
DTP_PrevSong (FPTR) - Pointer auf eine Funktion, die Subsongnummer auf
den vorhergehenden Subsong setzt und diesen spielt.
(Falls vorhanden)
DTP_SubSongTest (FPTR) - (ab Version 1.35) Dieser Tag wird nur ausgewertet,
wenn schon der Tag DTP_SubSongRange angegeben wurde. ti_Data
zeigt dabei auf eine Routine, die als Returnwert in d0 einen
Boolschen Wert zurⁿckliefert. Dieser gibt an, ob der SubSong
mit Nummer dtg_SndNum(a5) gⁿltig ist (d0=0) oder nicht
(d0<>0). Dieser Tag ist nur bei den Playern n÷tig, bei denen
nicht jeder SubSong (innerhalb der durch DTP_SubSongRange
festgelegten Grenzen) benutzt ist.
8.4 DeliTracker support Funktionen
DeliTracker stellt zur Erleichterung der Playeranpassung einige
Funktionen zur Verfⁿgung. Eine Funktion wird wie folgt aufgerufen:
move.l dtg_XXX(a5),a0
jsr (a0)
Alle folgenden Funktionen au▀er dtg_SongEnd und dtg_SetTimer verwenden
d0/d1/a0/a1 als Scratchregister. In a5 mu▀ bei allen Aufrufen (au▀er bei
dtg_SongEnd und dtg_SetTimer) die Base stehen. Derzeit existieren
folgende Funktionen:
dtg_GetListData
SYNOPSIS
memory size = dtg_GetListData(number)
a0 d0 d0.l
FUNCTION
Liefert Adresse und LΣnge eines mit LoadFile() geladenen
Files.
INPUTS
number - Nummer eines Files beginnend mit 0 fⁿr das vom
User selektierte File.
RESULT
memory - ein Pointer auf die Startadresse des Files im
Speicher oder NULL im Fehlerfall.
size - LΣnge des Files in Bytes bzw. 0 im Fehlerfall.
dtg_LoadFile
SYNOPSIS
success = dtg_LoadFile(name)
FUNCTION
LΣdt und entpackt ggf. das angegebene File ins Chip-
Memory. (Hinweis: diese Funktion ergΣnzt automatisch,
falls das File mit dem angegebenen Namen nicht ge÷ffnet
werden konnte '.pp','.im' und '.xpk')
INPUTS
name - der Filename steht in einem internen Buffer (seine
Adresse steht in dtg_PathArray)
RESULT
success - alles ok d0.l=0, sonst d0.l<>0.
dtg_CopyDir
SYNOPSIS
dtg_CopyDir()
FUNCTION
Kopiert das Directory des von User angewΣhlten Files an das
Ende des Strings, auf den dtg_PathArray(a5) zeigt.
dtg_CopyFile
SYNOPSIS
dtg_CopyFile()
FUNCTION
Kopiert den Filenamen des von User angewΣhlten Files an das
Ende des Strings, auf den dtg_PathArray(a5) zeigt.
dtg_CopyString
SYNOPSIS
dtg_CopyString(string)
a0
FUNCTION
Kopiert den String, auf den das Register a0 zeigt, an das
Ende des Strings, auf den dtg_PathArray(a5) zeigt.
INPUTS
string - der Pointer auf den anzuhΣngenden String steht
in a0
dtg_AudioAlloc
SYNOPSIS
success = dtg_AudioAlloc()
FUNCTION
Belegt alle AudiokanΣle.
RESULT
success - alles ok d0.l=0, sonst d0.l<>0.
dtg_AudioFree
SYNOPSIS
dtg_AudioFree()
FUNCTION
Gibt die mit dtg_AudioAlloc belegten AudiokanΣle wieder
frei.
dtg_StartInt
SYNOPSIS
dtg_StartInt()
FUNCTION
Startet den Soundinterrupt. (Falls er nicht schon lΣuft.)
Falls DTP_Interrupt existiert, startet DeliTracker einen
Timerinterrupt, ansonsten wird DTP_StartInt aufgerufen.
dtg_StopInt
SYNOPSIS
dtg_StopInt()
FUNCTION
Stoppt den Soundinterrupt. (Falls er nicht schon angehalten
ist.) Falls DTP_Interrupt existiert, stoppt DeliTracker
seinen Timerinterrupt, ansonsten wird DTP_StopInt
aufgerufen.
dtg_SongEnd
SYNOPSIS
dtg_SongEnd()
FUNCTION
Signalisiert DeliTracker, da▀ das Modul einmal komplett
gespielt wurde. Diese Funktion verΣndert keine Register
und darf auch von Interrupts aufgerufen werden.
dtg_CutSuffix
SYNOPSIS
dtg_CutSuffix()
FUNCTION
Entfernt am Ende des Strings, auf den dtg_PathArray(a5)
zeigt ggf. die Endung '.pp', '.im' oder '.xpk'
dtg_SetTimer
SYNOPSIS
dtg_SetTimer()
FUNCTION
Programmiert den CIA-Timer mit dem Wert, der sich in
dtg_Timer(a5) befindet. Diese Funktion verΣndert keine
Register und darf auch von Interrupts aufgerufen werden.
8.5 Tips zur Anpassung
Der Player sollte den Zustand der LED unbeeinflu▀t lassen, da im
Setupwindow eine entsprechende Funktion existiert.
Diese kleine Checkliste fⁿr sollte fⁿr die Player/Custommodul Anpassung
erfⁿllt werden, damit der Player systemkonform ist und einwandfrei
funktioniert:
[ ] ist die Checkroutine prΣzise genug ?
[ ] werden die AudiokanΣle richtig belegt und freigegeben ?
[ ] wird aller allocierter Speicher freigegeben ?
[ ] werden alle Locks wieder freigegeben ?
[ ] enforcer und mungwall - Test bestanden ?
[ ] werden alle denkbaren Fehler korrekt abgefangen ?
[ ] wurde der Player mit 1.3, 2.0 und 3.0 getestet ?
[ ] spielt der Player in allen Videomodi korrekt ?
Problemecke:
Symptom m÷gliche Ursache Beseitigung
Absturz a5 ⁿberschrieben
Register nicht gesichert
falsche oder zu spΣte Initialisierung
Modul zu neu fⁿr den Player prΣziserer Check
klingt schrΣg Audiodaten nicht im Chipmem Player ins Chipmem
falsche Initialisierung
Modul zu neu fⁿr den Player prΣziserer Check
Player ben÷tigt bestimmte Werte in zusΣtzliche
einigen Registern Initialisierung
unvertrΣglicher Videomodus
kein Ton Audio-DMA abgeschaltet
bei >68000 Player schreibt direkt auf Betriebssystem
Interruptvektoren benutzen
fast keine fehlerhaftes Interrupt-Handling bei VBlank-IRQ:
freie CPU-Zeit Z-Flag setzen
9. DANKSAGUNGEN
Unser besonderer Dank gilt folgenden Personen:
unseren Testern Stefan Becker, Daniel, B÷rnie und Manfred fⁿr ihre
Bugreports und guten VorschlΣge.
Armin Sander (Oktalyzer) und Carsten Schlote (Sonic Arranger) fⁿr
die Anpassung Ihrer Soundsysteme.
J÷rg W. Schmidt fⁿr den Sourcecode von PlayFTM.
Tomas Partl fⁿr seinen Player.
DoIO fⁿr diverse Module, Demos und Diskmag-Werbung.
allen auf IRC #amiga (Internet Relay Chat)
Markus Illenseer und Christian Rattei fⁿr die Korrektur der Docs.
Kevin Dackiw fⁿr die Verbesserung der NoisePacker Player und die
Korrektur der englischen Docs.
Florian Vorberger fⁿr viele nette Module und die Verbesserung
einiger Player.
U. Dominik Mⁿller fⁿr XPK und seine dauernde N÷rglerei :-)
Colin Fox and Bruce Dawson fⁿr die phantastische req.library.
Eric Kennedy fⁿr TstApp.rexx.
und allen, die uns Replay-Routinen, Module oder eine Registration
geschickt haben.