Lautstärkeregulierung des Falcon030: Geht’s nicht leiser?

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.


Thomas Binder
Aus: ST-Computer 03 / 1995, Seite 72

Links

Copyright-Bestimmungen: siehe Über diese Seite