Springe zum Inhalt

1

Mit der Qualität des eigenen Internet-Anschlusses ist es so eine Sache. Selbst wenn man den Abieter wechseln würde, bliebe der letzte Meter, der Weg von der Straße ins Haus, in der Regel der gleiche.

Vor allem bei Echtzeitanwendungen wie zB Jamulus geht es gar nicht in erster Linie um die Geschwindigkeit, sondern die Reaktionsschnelle des Anschlusses, also den Ping (und Jitter). Wichtigste Regel dabei: Es soll keine Funkstrecke im Weg sein, denn durch die notwendigen Fehlerkorrektur-Mechanismen verlieren wir wertvolle Millisekunden. Deswegen scheiden WLAN und LTE/5G schon mal aus.

Aber wie verbessert man den Ping?

Meine sehr subjektive Lösung

Bei meinen Jamulus-Proben mit insgesamt Tausenden von Teilnehmern ist mir aufgefallen, dass manche einen sehr viel besseren Ping hatten als ich und andere. Und immer war es die gleiche Anschlussart und der gleiche Anbieter! Das hat mich bewogen zu wechseln.

Ich hatte jahrelang einen Internetanschluss über Kabel(fernsehen) genutzt: Riesen-Bandbreite, 1000 MBit/s für ca. 40 €/Monat. Allerdings lag der Ping bei zirka 27 ms.
Merke: Bei Kabel teilen sich alle Haushalte den Anschluss bis zum ersten Verteilerknoten.

Nach meinem Wechsel von Vodafone, ehemals Unitymedia, ehemals Kabel-BW, zu DSL der deutschen Telekom, bekomme ich für das gleiche Geld zwar nur noch 100 MBit/s. (Und mehr gibt die Leitung in der Straße wohl auch nicht her, bis irgendwann mal Glasfaser kommt.) Aber der Ping ist von 27 auf 11 ms gesunken und der Jitter hat sich ebenfalls verbessert!

Ich könnte ein isolierter Einzelfall sein. Ich kann natürlich nicht versprechen, dass ein Wechsel von Kabel zu DSL in jedem Fall den Ping verbessert!

Mein Internet ist jetzt zwar langsamer, aber zackiger! Und meinem Single-Haushalt reicht die Bandbreite allemal.

10

Hier wird die Einrichtung eines solchen Servers umrissen, mit besonderem Augenmerk auf die Zielgruppe Chor.

zurück zum Beitrag „Gemeinsam musizieren mit Jamulus“

Der Betrieb der Jamulus-Software erfordert einen Server, mit dem sich alle Teilnehmer („Klienten“) verbinden. Hier wird die Einrichtung eines solchen Servers umrissen, mit besonderem Augenmerk auf die Zielgruppe Chor.

Warum ein heimischer Server keine gute Idee ist

Nun könnte man einen zuhause herumstehenden Computer als Server verwenden, z. B. ein altes Laptop oder einen RaspberryPi. Die Hardware-Anforderungen sind nicht besonders hoch. Die Anforderungen an die Netzwerkverbindung schon.

Heimische Internetanschlüsse teilen die Bandbreite zwischen Senden und Empfangen von Daten nicht gleichmäßig auf. Der typische Kunde empfängt ja auch viel mehr Daten aus dem Internet als er sendet.

Film auf Netflix anfordern:0,001 MB Upload
Film anschauen:4000 MB Download
Beispiel, weswegen private Internet-Anschlüsse asymmetrisch ausgelegt sind.

Ein typischer Internet-Anschluss hat eine Bandbreite von 100 MBit/s für den Download, aber nur 10 MBit/s für den Upload. Unser Jamulus-Server muss jeden Klienten mit etwa 0,4 MBit/s versorgen. 10 : 0,4 = 25, das wäre die maximale Anzahl von Klienten. Da eine Internetverbindung aber selten die versprochene Leistung liefert — typisch sind 70-80% — und eventuelle Mitbewohner, Smartphones und Smart-Home-Geräte ebenfalls im Netz sind, sinkt die Anzahl versorgbarer Klienten eher auf die Hälfte. Das kann schnell zum Nadelöhr werden.

Der heimische Server muss von außen, von jenseits des Routers erreichbar sein. Jamulus nutzt das IPv4-Protokoll. Nicht jeder Internet-Anbieter garantiert die Erreichbarkeit über dieses Protokoll, gerade Kabelanbieter tricksen oft mit DS-Lite-Verfahren. (Die Details würden hier den Rahmen sprengen.)

Ein lokaler Server macht eigentlich nur dann Sinn, wenn es um eine Vernetzung im Haus geht, also ohne Internet, z. B. innerhalb einer Musikhochschule.

Damit kein falscher Eindruck entsteht:

Die Bandbreite ist nicht das größte Problem! Viel wichtiger ist die Pünktlichkeit des Datenstroms. Anders gesagt: Wenn die Daten eine Sekunde lang stocken, ist es egal, mit welch hoher Geschwindigkeit sie nachgeliefert werden: Sie werden einen halben Takt zu spät sein (bei Tempo 120) und deshalb von Jamulus verworfen werden. So entsteht das typische Blubbern. Die Lücke bleibt.

Drei Möglichkeiten, an einen Server zu kommen

Der einfachste Weg: ein öffentlicher Server

Die Gemeinde der Jamulus-Anwender stellt zahlreiche öffentliche Server zur Verfügung. (Sie werden beim Programmstart angezeigt.) Diese kann man nutzen. Natürlich ist die Probe dann nicht privat, jeder kann zuhören. Die maximale Teilnehmerzahl entspricht leider oft der Voreinstellung zehn.

Wenigstens kann man Zuhörer stummschalten, sollten sie falsch mitsingen.

Jamulus zeigt öffentliche Server an

Vorkonfigurierten Server stundenweise mieten

Es gibt Dienstleister, die Jamulus-Server stundenweise zur Verfügung stellen, z. B. Melomax oder koord.live. Teilweise ist das sogar kostenlos. Klarer Vorteil: Man muss sich nicht um die technischen Details kümmern.

Eigenen Server im Rechenzentrum anmieten

Meiner Meinung nach die beste Lösung! Ein solcher Server steht mitten im Internet und nicht an einem Endpunkt wie dem eigenen Wohnzimmer. Server kann man schon ab 5€/Monat mieten (z. B. bei IONOS, die hier verlinkte Konfiguration ist für 40 Probenteilnehmer auf jeden Fall ausreichend). Es macht Sinn, einen nahegelegenen Server zu suchen, denn der Ping hängt davon ab, wieviele Schaltstellen sich zwischen Client und Server befinden. Eine große Festplatte ist nicht notwendig, es sei denn, man will aufnehmen. Übertrieben viel RAM braucht man ebenfalls nicht.

Server nutzen typischerweise das Betriebssystem Linux und werden ohne grafische Benutzeroberfläche über eine Kommandozeile verwaltet.

Installation eines Jamulus-Servers unter Linux

Die nun folgende Beschreibung wird recht technisch und ist nur etwas für Menschen, die sich mit Servern auskennen.

Ich bin gerne bei der Ersteinrichtung behilflich.

Server und Client sind das gleiche Programm. Der Vorgang ist hier auf der Jamulus-Homepage gut beschrieben, allerdings werden dort vorgefertigte Distributionen verlinkt, die nicht für jeden Anwender funktioniert haben.

Update 2022: Mittlerweile sind die o. g. Distributionen von solcher Qualität, dass die im folgenden beschriebene Installation from source nur in Ausnahmefällen notwendig sein wird. Sie funktioniert aber nach wie vor, deshalb lasse ich diese historische Beschreibung aus dem Jahr 2020 unverändert stehen — außerdem sind die Statistiken zum Resourcenverbrauch auch jetzt noch interessant und zutreffend. Die Installation selbst geht mittlerweile einfacher.

Ich empfehle die Installation from source. Da wir nur die Serverfunktionen brauchen, können wir bestimmte Bibliotheken weglassen. Für die Linux-Distribution Ubuntu habe ich dazu folgendes Skript geschrieben:

Dieses Skript kann man entpacken, als Datei in sein Heimatverzeichnis auf seinem Server hochladen, mit sudo chmod +x install_jamulus ausführbar machen und mit sudo ./install_jamulus starten.

Dann sollte man Jamulus testweise starten. (Zum Beenden: Strg-C)

Jamulus -s

Das Starten des Programms im Alltag überlässt man, zumindest unter Ubuntu 20, am besten systemd. Dazu kopiert man folgendes Startup-Skript nach /etc/systemd/system/jamulus.service und setzt die Berechtigungen mit sudo chmod 644 /etc/systemd/system/jamulus.service.

Falls man Jamulus nicht selbst kompiliert, sondern aus einer Distro installiert hat, muss man den Pfad hinter ExecStart evtl. anpassen. Im Zweifelsfall hilft whereis Jamulus weiter.

Die Willkommensnachricht kann natürlich angepasst werden und darf HTML enthalten. Man kann sie auch in eine Datei auslagern (die für den User jamulus lesbar sein muss), z.B. /home/jamulus/welcome.html.

Die hier beschriebene Technik zum Autostart eines Services wurde unter Ubuntu 20 entwickelt und funktioniert auf anderen Linuces evtl. anders.

Nun kann man das Programm bequem mit systemctl start jamulus starten, mit systemctl stop jamulus beenden und mit systemctl status jamulus den Status abfragen. Damit es beim Systemstart automatisch gestartet wird, verwendet man systemctl enable jamulus. Das kann mit systemctl disable jamulus rückgängig gemacht werden.

Falls der Server durch eine Firewall geschützt wird, muss man dort den Port 22124/UDP freigeben. (IONOS-vServer werden durch eine Hardware-Firewall geschützt, die man nicht über den Server, sondern über die Server-Kontroll-Seite im Kundenbereich der IONOS-Homepage konfiguriert.)

Das Jamulus-Serverprogramm wird über folgende Kommandozeilenoptionen gesteuert. Typisch wäre

jamulus -s -n -T -u 20

Die Option -s lässt das Programm im Server-Modus starten, -n deaktiviert die Benutzeroberfläche, die wir auf dem Server nicht benötigen, -T aktiviert Multithreading. -u gibt die max. Anzahl der Clienten an, die sich verbinden dürfen.

Es existiert eine Option -F Fastupdate, die die internen Puffer serverseitig auf 64 samples verkleinert. (Um das zu nutzen, muss in den Einstellungen des Klienten die Option Aktiviere kleine Netzwerkpuffer gewählt werden.) Das kann die Latenz etwas verbessern — um den Preis einer höheren Serverlast. Bei mehr als 10 Teilnehmern würde ich es nicht empfehlen.

Serverlast

Hier die Netzlast einer Chorprobe mit 37 Teilnehmern:

Spitzenlast: 14MBit/s jeweils in/out

Hier die CPU-Last der gleichen Probe:

155% Last (von max. 400% bei 4 CPUs)

Ein Low-Latency-Kernel bringt uns nichts. Er würde zwar die Latenz einer Audio-Ausgabe direkt am Server verbessern, aber auch die CPU-Last erhöhen. (Der Server steht typischerweise im Rechenzentrum, dort hört selten jemand zu. 😉)

Die Festplatte des Servers wird quasi nicht benutzt, es sei denn, man nimmt auf:

Aufzeichnung der Probe

Der Server kann die Sitzung aufzeichnen, und zwar jede Spur einzeln. Man könnte also im Nachhinein einen Mix erstellen. Da unkomprimiert im WAV-Format aufgezeichnet wird, muss man genügend Speicherplatz vorhalten: 5,5 MB pro Minute ergeben bei einer zweistündigen Probe mit 37 Teilnehmern ca. 24,4 GB.

Um aufzunehmen, reicht es, die Kommandozeile zur Steuerung um den Parameter -R zu ergänzen, gefolgt vom Pfad für die Aufnahmen, also z.B.

-R /home/jamulus/recording/

Der Pfad muss natürlich existieren. Zu den Audiodateien erstellt Jamulus Audioprojekte im Format der Programme Reaper und Audacity.


Diese Anleitung wird laufend ergänzt. Ich freue mich über Feedback!

2

Du willst Jamulus auf Deinem Computer unter Windows 10 benutzen… (Eine Schritt-für-Schritt-Anleitung)

zurück zum Beitrag „Gemeinsam musizieren mit Jamulus“

Eine Schritt-für-Schritt-Anleitung

Szenario

  1. Du willst Jamulus auf Deinem Computer unter Windows 10 benutzen.
  2. Du hast ein Mikrofon und einen Kopfhörer, vielleicht beides in einem Gerät vereint.
  3. Prinzipiell funktionieren diese Geräte, z. B. für Zoom.
  4. Der Hersteller der Geräte hat keinen speziellen ASIO-Treiber zur Verfügung gestellt. (Sonst würden wir diesen verwenden, den folgenden ersten Schritt überspringen und mit dem zweiten Schritt fortfahren.)

1. Schritt: ASIO-Treiber installieren

Der Haken:

Jamulus benutzt zum Einbinden Deiner Audiogeräte nicht die normalen Windows-Audiotreiber, sondern benötigt einen für musikalische Zwecke besonders geeigneten, latenzarmen ASIO-Treiber. Dieser wird von den Herstellern professioneller Musikausrüstung speziell erstellt. Consumer-Geräten liegt ein solcher Treiber nicht bei.

Die Lösung:

Um trotzdem mit preisgünstigen Mikrofonen usw. arbeiten zu können, gibt es erfreulicherweise eine Lösung: Das Programm ASIO4ALL verpackt den normalen Windows-Treiber so, dass er von Jamulus als ASIO-Treiber erkannt wird!

Besuche www.asio4all.org und lade den neuesten deutschsprachigen ASIO4ALL-Treiber herunter. Während des Herunterladens ignoriere die lästige Werbeanzeige.

Nach dem Herunterladen fragt Dich Windows: Wie möchten Sie mit ASIO4ALL [...] verfahren? Wähle Ausführen.

Dann fragt Windows: Möchten Sie zulassen, dass durch diese App von einem unbekannten Herausgeber Änderungen an Ihrem Gerät vorgenommen werden? Antworte mit Ja.

Es öffnet sich der ASIO4ALL Installationsassistent. Klicke auf Weiter, stimme den Nutzungsbedingungen zu, ein paarmal auf Weiter, bis die Installation abgeschlossen ist. An etwaigen Voreinstellungen musst Du nichts ändern.

Starte den Computer neu. Sicher ist sicher.

Am unteren Bildschirmrand befindet sich die dunkelgrau unterlegte Taskleiste mit Symbolen. Rechts befindet sich u. a. ein Lautsprechersymbol. Klicke es mit der rechten Maustaste an. Ein Menü klappt auf. Wähle Sound-Einstellungen öffnen.

Unter Ausgabegerät kannst Du im Ausklappmenu eine Auswahl treffen. Leider sind die Bezeichnungen etwas kryptisch. Wähle die, in der der Name Deines Headset-Herstellers vorkommt, oder mindestens das Kürzel USB. Wähle nicht High Definition Audio Device aus, das sind die eingebauten Lautspecher des Computers.

Unter Eingabegerät wähle im Ausklappmenu Dein Mikrofon aus. Evtl. ist das der gleiche Eintrag wie eben. Klicke auf Geräteeigenschaften. Unter dem Punkt Lautstärke kannst Du einstellen, wie sehr Dein Mikrofonsignal vorverstärkt wird, wenn es im Computer ankommt. Das ist Deine Mikrofon-Lautstärke, der Pegel, den Du an Jamulus sendest — eine wichtige Einstellung, die wir später wieder benötigen werden. Stelle für den Augenblick 80 ein, das ist ein guter Startwert. Schließe das Fenster wieder.

2. Schritt: Jamulus installieren

Lade die aktuelle Jamulus-Version hier herunter. Wieder wirst Du gefragt werden: Wie möchten Sie mit Jamulus [...] verfahren? Wähle Ausführen.

Wieder fragt Windows: Möchten Sie zulassen, dass durch diese App von einem unbekannten Herausgeber Änderungen an Ihrem Gerät vorgenommen werden? Antworte mit Ja.

Es öffnet sich der Jamulus-Installationsassistent. Akzeptiere die Nutzungsbedingungen und klicke Dich durch die Installation. An den voreingestellten Werten sollst Du nichts ändern. Danach ist Jamulus installiert.

Beende alle noch laufenden Programme, insbsondere solche, die Ton abspielen könnten, insbesondere den Webbrowser. Starte Jamulus: Klicke auf das Windows-Symbol ganz links unten in der Taskleiste und wähle aus dem sich öffnenden Menü Jamulus aus. Oder klicke auf das Jamulus-Symbol, das auf der Schreibtischoberfläche angelegt wurde.

3. Schritt: Jamulus einrichten

Im Jamulus-Fenster klicke auf den Knopf links neben Einstellungen. Das Einstellungsfenster öffnet sich. Klicke links unten auf ASIO-Einstellungen. Das ASIO4ALL-Fenster öffnet sich. Im linken Bereich sind Deine Audiogeräte aufgelistet.

Mit dem Schraubenschlüssel-Symbol rechts unten öffnest Du die Detaileinstellungen. Dadurch erscheint im linken Bereich ein kleines Pluszeichen vor der Liste der Soundkarten.

Klicke darauf. Nun erscheinen die Ein- und Ausgabegräte Deiner Soundkarte.

Wähle die richtigen aus, indem Du den Schalter links des Namens aktivierst, so dass er türkis leuchtet. Wenn mehrere zur Auswahl stehen: Wähle genau ein einzelnes Eingabe- und ein einzelnes Ausgabe-Gerät aus.

Allerdings werden Deine Soundkarten und Audiogeräte anders heißen als hier im Beispiel. Sie können die unterschiedlichsten Namen haben. High Definition Audio-Gerät, das sind der eingebaute Lautsprecher und das eingebaute Mikrofon Deines Computers. Viele eingebaute Soundkarten heißen Realtek. Ein USB-Gerät würde wahrscheinlich das Kürzel USB irgendwo im Namen führen.

Schließe das ASIO4ALL-Fenster wieder. Du bist jetzt wieder im Einstellungsfenster. Stelle rechts oben bei Audiokanäle bitte "Mono-In/Stereo-Out" ein und setze den Pegel für neue Teilnehmer auf "50%". Schließe das Fenster.

Klicke am oberen Fensterrand auf Ansicht, dann auf Mein Profil...
Gib Deinen Namen ein. Der Rest ist nicht wichtig. In Chorproben hat es sich bewährt, das Kürzel der Stimmlage vor den Namen zu setzen, also „S1 Selina“ oder „B Rüdiger“.

Klicke auf Stummschalten, dann auf Verbinden. Eine Liste öffentlicher Jamulus-Server öffnet sich, aber das interessiert uns nicht. Unten kann man eine Serveradresse eingeben. Gib dort die Adresse unseres privaten Jamulus-Servers ein, die Du einer E-Mail oder einer internen Homepage entnommen hast. Klicke auf Verbinden.

4. Schritt: Inbetriebnahme

Links unter Eingang siehst Du eine große Pegelanzeige. Wenn Du singst, sollte sie ausschlagen und in Deinen lautesten Momenten den gelben Bereich* touchieren. Falls Du Dein Mikro lauter oder leiser stellen musst: Das geht wie oben unter Punkt 1 beschrieben.

*Die unterschiedlichen Farben sind nicht sichtbar, wenn Du in den Einstellungen als Oberfläche kompakt gewählt hast.

Du solltest Dich nun auch im Kopfhörer hören.

Falls nur Gestotter zu hören ist, braucht Deine Hardware-Kombination mehr Timing-Spielraum. Setze in den Jamulus-Einstellungen unter Soundkarte die Puffergröße von 5,33 ms auf 10,67 ms hoch.

Hebe nun Deine Stummschaltung auf.

Im rechten, größeren Teil des Fensters siehst Du ein Mischpult. Jeder Teilnehmer erhält einen eigenen Kanalzug. Jeder kann sich seinen eigenen Mix erstellen, andere Teilnehmer individuell lauter oder leiser machen, und so die für ihn perfekte akustische Umgebung schaffen. Achte auf Deinen eigenen Kanal dort. Schlägt der Pegel aus, wenn Du sprichst? Dann spielt Jamulus Dein Signal erfolgreich zurück. Alle können Dich jetzt hören!

Der Rest folgt aus der Praxis...


Fehlt in dieser Beschreibung etwas Essentielles? Ich freue mich über Verbesserungsvorschläge!

Dieser Beitrag wird ständig erweitert und verbessert. Letzte Änderung: 17.2.21

Converting Logic files, I’m not working magic. What I do is open the files in legacy versions of the software, then re-saving them in order to make them compatible with recent iterations of the software. Sometimes, several iterations through differenent software versions are necessary. This being said, I’m totally dependent on the original programs to read what you have.

My setup includes:

  • Current Mac (MacBook Pro (2021) with M1 Pro CPU)
    • Logic Pro X, current version
  • Several Intel Macs
    • Logic Pro X, current version
  • PowerPC G4 Mac running OS X 10.5.8
    • Logic Pro 7.0.1
    • Logic Platinum 6.3.3
    • Logic Audio 5.5.1
  • PowerMac 9500 running OS 9.0.4
    • Logic Audio Platinum 4.7.0
    • Logic Audio Platinum 4.0.4
    • Logic Audio 2.6.6
  • Atari Mega-STE running TOS 2.06
    • C-LAB Notator 3.0
  • Atari 1040STF running TOS 1.04
    • C-LAB Notator 3.0

I do not currently have Logic running on a Windows PC.

My choir wants to advertise the number of rehearsals before the next concert on their website.

The problem

My choir wants to advertise the number of rehearsals before the next concert. We have a list of rehearsal dates and need to count those who have not yet passed.

The solution (JavaScript)

<div id="result"></div>
	
<script>
	
function dateDtoE(s)
{
  h = s.split(".");
  return '20' + h[2] + '-' + ('0'+h[1]).substr(-2) + '-' + ('0'+h[0]).substr(-2); 
}
	
var dates2go = [ '28.6.18','5.7.18','12.7.18','19.7.18','26.7.18','2.8.18','9.8.18','30.8.18'];

var count = 0;
var now = new Date();
var i = dates2go.length;
while(i){
  i--;
  h = dateDtoE(dates2go[i]);
  var test = new Date(dateDtoE(dates2go[i]) + 'T22:00:00');
  if(test > now)
    count++;
}
document.getElementById('result').innerHTML = '<p>Still ' + count + ' rehearsals!</p>';
</script>

The function dateDtoE converts a date from German format to javascript format, ie. from 13.6.18 to 2018-06-13.

When creating a Date object from the list of dates, the script assumes 10 p.m. as time of day. This is when our rehearsals usually end.

Note the use of a while loop. Lazybones might have used for(i=0;i<dates2go.length;i++), thus recounting the number of elements in the array for every iteration of the loop.

Extra: A solution in Ruby

I know next-to-nothing about ruby, sorry.

require 'time'

def dateDtoE(s)
  h = s.split('.');
  return '20' + h[2] + '-' + h[1] + '-' + h[0]
end

dates2go = ['28.6.18','5.7.18','12.7.18','19.7.18','26.7.18','2.8.18','9.8.18','30.8.18']
count = 0
now = Time.now()
dates2go.each{ |d|
  h = Time.parse(dateDtoE(d));
  if h > now 
    count += 1
  end
}
puts "Still #{count} rehearsals."

Note how the loop looks more elegant. Furthermore, ruby’s date parser doesn’t rely on leading zeros.