Wer seinen Falcon nicht an der Stereoanlage angeschlossen hat und ihn statt dessen per Kopfhörer oder eingebautem Lautsprecher betreibt, wird sicherlich per Kontrollfeld eine Lautstärkenstufe eingestellt haben, die deutlich unter dem Normalwert 15 liegt (ansonsten ist es wohl „etwas“ zu laut). Nun gibt es aber leider Programme (meistens Demos), die dessen ungeachtet erstmal wieder auf volle Lautstärke schalten (warum auch immer). Der folgende Artikel stellt ein kleines Programm vor, mit dem dieses Problem entschärft werden kann. Zunächst einmal muß man wissen, wie beim Falcon030 die Lautstärke des Ausgangssignals festgelegt wird. Dies geschieht indirekt über die XBIOS-Funktion soundcmd (Funktionsnummer 130), mit ihr kann u.a. für den rechten und den linken Kanal getrennt angegeben werden, wie stark das Signal vor der Ausgabe abgedämpft werden soll [1 ]. Ein Aufruf von soundcmd(LTATTEN, x) stellt die Dämpfung für den linken, von soundcmd (RTATTEN, x) die Dämpfung für den rechten Kanal ein (LTATTEN steht dabei für 0, RTATTEN für 1). Der Parameter x ist 16 Bit groß, allerdings werden nur die Bits 4 bis 7 berücksichtigt, so daß effektiv lediglich Dämpfungswerte von 0-240 in 16’er-Schritten möglich sind (dies ergibt genau die 16 Lautstärkestufen des Sound-CPX, wobei 15 der Dämpfung 0 entspricht).
Um nun zu erreichen, daß soundcmd einen gewissen Mindestdämpfungswert erwartet (und somit der Lautstärke eine obere Schranke gesetzt wird), muß man sich in den XBIOS-Vektor einklinken. Bei jedem Aufruf von soundcmd(0/1, x) muß nun überprüft werden, ob x größer oder gleich dem Mindestwert ist. Ist dies nicht der Fall, wird x entsprechend angehoben.
Listing 1 zeigt ein kleines Programm, das genau dies bewerkstelligt. Beim Start wird zunächst der Mindestdämpfungswert aus dem File-Namen ermittelt. Dazu muß das übersetzte Listing LIMITxx.PRG genannt werden, wobei xx von 00-15 gehen darf (es bestimmt die maximal erlaubte Lautstärke). Die auf diese Weise angegebene Maximallautstärke wird auch gleich eingestellt. Soll später ein anderer Mindestdämpfungswert gesetzt werden, muß soundcmd(255, x) aufgerufen werden, wobei x für die gewünschte Dämpfung steht. Hierbei wird die aktuelle Lautstärke jedoch nicht beeinflußt, auch wenn sie höher als die durch x festgelegte neue Schranke ist.
Das Programm ist jedoch machtlos, wenn die Lautstärke nicht sauber per XBIOS eingestellt wird. Leider gibt es nämlich immer mehr Falcon-Programme, die direkt auf die Hardware-Register zugreifen, auch wenn dies in vielen Fällen unnötig ist. Außerdem ist es sowieso fragwürdig, die Dämpfung zu verändern, da sie ja normalerweise vom Kontrollfeld vorgenommen wird und der Benutzer sie sicher nicht ohne Grund an seine Bedürfnisse angepaßt hat.
Literaturangaben:
[1] Alexander Herzlinger, Die Audio-Hardware und das XBIOS-Interface, ST-Magazin 03/1993
;* (c)1995 by MAXON Computer
;* Modulname : LIMIT.S
;* Autor : Thomas Binder
super
equ _longframe,$59e
text
; Ist die Routine bereits installiert?
pea is_installed(pc)
move.w #38,-(sp) ; Supexec
trap #14
addq.l #6,sp
tst.w d0
bne already_installed
; Ist der Rechner wirklich ein F030?
pea check_f030(pc)
move.w #38,-(sp) ; Supexec
trap #14
addq.l #6,sp
tst.w d0
beq no_falcon
; Das Lautstärkelimit aus dem Filenamen ermitteln;
; 3 annehmen, wenn Filename nicht auffindbar
move.w #192, max_volume
pea my_dta(pc)
move.w #26,-(sp) ; Fsetdta
trap #1
addq.l #6,sp
; Zunächst im aktuellen Ordner nach LIMIT??.PRG
; suchen
move.w #7,-(sp)
pea filename(pc)
move.w #$4e,-(sp) ; Fsfirst
trap #1
addq.l #8,sp
tst.w d0
beq.s found
; Wenn nicht dort gefunden, dann nochmal im AUTO-
; Ordner des aktuellen Laufwerks nachschauen
move.w #7,-(sp)
pea filename2(pc)
move.w #$4e,-(sp) ; Fsfirst
trap #1
addq.l #8,sp
tst.w d0
bne.s no_filename
; Aus Filenamen die Maximallautstärke auslesen
found:
lea my_dta(pc),a0
move.b $1e+5(a0),d0
sub.w #48,d0
mulu #10,d0
add.b $1e+6(a0),d0
sub.w #48+15,d0
neg.w d0
lsl.w #4,d0
move.w d0,max_volume
Das Listing wurde nicht vollständig in der ST-Computer abgedruckt.