SvxLink Roger Beep: Unterschied zwischen den Versionen

Zeile 64: Zeile 64:
 
sox beep500-10.wav -r 16k -c1 out/beep500-10.wav
 
sox beep500-10.wav -r 16k -c1 out/beep500-10.wav
 
</syntaxhighlight>
 
</syntaxhighlight>
Nachdem nun Töne in Sprachdateien vorhanden sind können diese nun in das Skript integriert werden, etwa folgendermaßen:
+
Nachdem nun Töne in Sprachdateien vorhanden sind, können diese nun in das Skript integriert werden, etwa folgendermaßen:
  
 
<syntaxhighlight>
 
<syntaxhighlight>

Version vom 20. November 2023, 14:21 Uhr

Svxlink kann optional am Ende der Aussendung einen Roger-Beep senden.

Dieser wird in der Konfigurationsdatei "svxlink.conf" im Abschnitt "[RepeaterLogic]" durch die Einstellung RGR_SOUND_DELAY gesteuert.

Der Wert "-1" deaktiviert den Ton, positive Werte definieren die Verzögerung in ms bis der Ton ausgesendet wird.

In der Standard-Konfiguration wird die konkrete Aussendung durch das TCL-Script "Logic.tcl" im Verzeichnis "/usr/share/svxlink/events.d" definiert, konkret durch die Prozedur "send_rgr_sound{}":

#
# Executed when the squelch have just closed and the RGR_SOUND_DELAY timer has
# expired.
#
proc send_rgr_sound {} {
  variable sql_rx_id

  if {$sql_rx_id != "?"} {
    # 200 CPM, 1000 Hz, -10 dBFS
    CW::play $sql_rx_id 200 1000 -10
    set sql_rx_id "?"
  } else {
    playTone 440 500 100
  }
  playSilence 100
}


Diese kann durch ein eigenes Script ersetzt werden. Dazu wird das Untervereichnis "local" angelegt und dort ein TCL-Script erstellt, etwa "rogerbeep.tcl" im Verzeichnis "/usr/share/svxlink/events.d/local/":

namespace eval Logic {

variable is_rf 0;

proc squelch_open {rx_id is_open} {
        variable sql_rx_id;
        variable is_rf;
        set sql_rx_id $rx_id;
        if {!$is_open} {
                set is_rf 1;
        }
}

proc send_rgr_sound {} {
        variable is_rf;
        if {!$is_rf} {
                # Signal wurde vom Netzwerk empfangen
                playTone 500 300 150;
        } else {
                # Signal wurde von lokal empfangen
                playTone 1633 300 50;
                playSilence 80;
                playTone 1209 300 50;
        }
        set is_rf 0;
        }
}
# end of namespace

In obigen Script wird unterschieden, ob über Funk (rf) oder anders (Svxreflector) empfangen wurde, je nachdem wir ein tiefer oder ein hoher Ton ausgesendet.

Alternativ zum integrierten Tongenerator kann auch eine Sounddatei abgespielt werden. Diese ist (sprachabhängig) zu hinterlegen, etwa in "/usr/share/svxlink/sounds/en_US/Core".

Svxlink erwartet die Sprachdatei in einem bestimmten Format (RIFF-Magic, 16k, mono), dieses kann mit "sox" erzeugt werden:

sox beep500-10.wav -r 16k -c1 out/beep500-10.wav

Nachdem nun Töne in Sprachdateien vorhanden sind, können diese nun in das Skript integriert werden, etwa folgendermaßen:

proc send_rgr_sound {} {
        variable is_rf;
        if {!$is_rf} {
                # Signal wurde vom Netzwerk empfangen
                playMsg "Core" "beep500-30";
                playSilence 80;
        } else {
                # Signal wurde von Lokal empfangen
                playMsg "Core" "beep1633-30";
                playSilence 80;
                playMsg "Core" "beep1209-30";
                playSilence 80;
        }
        set is_rf 0;
        }
}

Beispielsdateien im korrekten Format finden sich im Anhang (siehe unten).

Diskussionen