Scream ist ein virtueller Gerätetreiber für Windows, der ein separates Soundgerät bereitstellt. Über dieses Gerät abgespielte Audiodaten werden in Ihrem lokalen Netzwerk als PCM-Multicast-Stream veröffentlicht.
Empfänger im Netzwerk können den Stream empfangen und über ihre eigenen Audioausgänge abspielen. Empfänger sind für Unix/Linux (Schnittstelle mit PulseAudio oder ALSA) und für Windows verfügbar.
Für das spezielle Szenario eines Windows-Gasts auf einem QEMU-Host hat @martinellimarco Unterstützung für die Übertragung von Audio über den IVSHMEM-Treibermechanismus beigesteuert, ähnlich der GPU-Pass-Through-Software „Looking Glass“. Siehe den Abschnitt über IVSHMEM unten.
Scream basiert auf dem Beispielcode des MSVAD-Audiotreibers von Microsoft. Der Originalcode ist unter MS-PL lizenziert, ebenso wie meine Änderungen und Ergänzungen. Den tatsächlichen Lizenztext finden Sie unter LIZENZ.
Eine ZIP-Datei mit signierten Builds für Windows 10 auf x64, x86 und arm64 ist auf der GitHub-Release-Seite verfügbar. Der „Installer“ ist eine Batchdatei, die mit Administratorrechten ausgeführt werden muss.
Microsoft hat kürzlich die Regeln für das Signieren von Kernel-Treibern verschärft. Diese neuen Regeln gelten für neuere Windows 10-Installationen, die nicht von einer früheren Version aktualisiert wurden. Wenn Ihre Installation diesen Regeln unterliegt, wird der Treiber nicht installiert.
Kreuzsignierte Kerneltreiber werden jedoch weiterhin von Windows 10 Version 1607 (und höher) akzeptiert, wenn eine der folgenden Ausnahmen zutrifft:
Problemumgehung Nr. 1: Deaktivieren Sie den sicheren Start im BIOS. Weitere Informationen finden Sie in dieser Ausgabe.
Problemumgehung Nr. 2: Fügen Sie diesen speziellen Registrierungswert hinzu:
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlCIPolicy]
"UpgradedSystem"=dword:00000001
Weitere Informationen finden Sie in den folgenden Ressourcen.
Die oben genannten Installationsmethoden funktionieren unter Windows 11 nicht, da die Installations-Batchdatei auf devcon-x64
basiert, was nicht mit Windows 11 kompatibel ist. Sie können unsignierte Treiber für Windows 11 mit einer alternativen Methode installieren und dabei den Nachfolger von devcon, pnputil
und bcdedit
, nutzen um Windows 11 in den Testmodus zu versetzen. So installieren Sie Scream für Windows 11:
bcdedit /set testsigning on
ein. Starten Sie Ihren Computer neu und stellen Sie sicher, dass in der unteren rechten Ecke Ihres Hintergrundbilds „Testmodus“ angezeigt wird./Install/driver//
. Geben Sie dann Folgendes ein: pnputil /add-driver .Scream.inf /install
.bcdedit /set testsigning off
ein. Starten Sie dann Ihren Computer neu. Stellen Sie sicher, dass der Testmodus jetzt deaktiviert ist, indem Sie sicherstellen, dass in der unteren rechten Ecke Ihres Hintergrundbilds keine Meldung „Testmodus“ angezeigt wird. Sie sollten nun das Scream-Audiogerät in Ihren Audiogeräten sehen und können mit der Client-Einrichtung fortfahren. Unix mit Pulseaudio, JACK oder ALSA: Nicht im Installationspaket enthalten. Bitte lesen Sie die README-Datei im Ordner „Receivers/unix“. Verschiedene Mitwirkende haben Code für diesen Empfänger geschrieben:
Windows: ScreamReader, bereitgestellt von @MrShoenel. Ab Version 1.2 im Installationspaket enthalten. Dieser Receiver unterstützt keine Positionszuordnung von Mehrkanal-Setups (mehr als Stereo). Das bedeutet, dass eine Nichtübereinstimmung der Lautsprecherkonfiguration dazu führen kann, dass Kanäle an der falschen Position wiedergegeben werden.
Ein Drittanbieter-Receiver, der Scream-Streams unterstützt, ist https://github.com/mincequi/cornrow. Es ist hauptsächlich für eingebettete Geräte gedacht.
@tomek-o hat Empfänger für eingebettete Systeme mit geringem Stromverbrauch geschrieben, die sich hervorragend für den Bau von über Ethernet angeschlossenen Aktivlautsprechern eignen.
Receiver können in der Regel als unprivilegierte Benutzer ausgeführt werden. Empfängersysteme mit einer Eingangs -Firewall müssen den UDP-Port 4010 oder den von Ihnen verwendeten benutzerdefinierten Port öffnen .
Alle über das Scream-Gerät abgespielten Audiodaten werden als Multicast-Stream in das lokale LAN übertragen (die Verwendung von Unicast ist optional – siehe unten). Die Verzögerung ist minimal, da die gesamte Verarbeitung auf Kernel-Ebene erfolgt. Es gibt keinen Userspace-Anteil.
Die Multicast-Zieladresse und der Port lauten „239.255.77.77:4010“. Der Ton ist ein roher PCM-Stream. Die Standardabtastrate und -größe kann auf der Eigenschaftenseite „Erweitert“ des Treibers als „Standardformat“ festgelegt werden. Die standardmäßige Lautsprecher-/Kanalkonfiguration kann im Dialogfeld „Konfigurieren“ des Scream-Soundgeräts festgelegt werden.
Die Datenübertragung erfolgt in UDP-Frames mit einer Nutzlastgröße von max. 1157 Byte, bestehend aus 5 Byte Header und 1152 Byte PCM-Daten. Letztere Zahl ist durch 4, 6 und 8 teilbar, sodass immer die volle Anzahl an Samples für alle Kanäle in ein Paket passt. Das erste Header-Byte gibt die Abtastrate an. Bit 7 gibt die Basisrate an: 0 für 48 kHz, 1 für 44,1 kHz. Andere Bits geben den Multiplikator für den Basiszinssatz an. Das zweite Header-Byte gibt die Abtastbreite in Bits an. Das dritte Header-Byte gibt die Anzahl der übertragenen Kanäle an. Das vierte und fünfte Header-Byte bilden die DWORD dwChannelMask aus der WAVEFORMATEXTENSIBLE-Struktur von Microsoft und beschreiben die Zuordnung von Kanälen zu Lautsprecherpositionen.
Empfänger müssen lediglich den Stream aus dem Netzwerk lesen und ihn in eine lokale Audiosenke übertragen. Der Kernel des Empfängersystems sollte automatisch die erforderliche IGMP-Signalisierung durchführen, sodass es normalerweise ausreicht, einfach einen Multicast-Listen-Socket zu öffnen und mit dem Lesen von diesem zu beginnen. Um Jitter zu berücksichtigen, sollte eine minimale Pufferung (ca. das Vierfache der UDP-Nutzlastgröße) erfolgen.
Um Ihre audiophilen Gefühle zu befriedigen oder unnötiges Resampling zu reduzieren, möchten Sie möglicherweise eine höhere Sampling-Rate und/oder Sampling-Breite einstellen. Sie können dies auf der Eigenschaftenseite „Erweitert“ des Treibers tun, wie unten gezeigt. Warnung: Die Verwendung hoher Abtastfrequenzen mit 24/32 Bit Breite in Kombination mit Mehrkanal kann zu hohen Bitraten im Netzwerk führen. Wir empfehlen, bei 5.1- oder höheren Kanalmodi bei 48 kHz/16 Bit zu bleiben, oder bei 44,1 kHz/16, wenn Sie Musik von CDs hören möchten.
width="700"/>
Dank der großartigen Arbeit von @martinellimarco können Sie, wenn Ihr Zielsystem über ein Mehrkanal-Lautsprecher-Setup verfügt, dieses auch auf Windows erweitern. Verwenden Sie den „Konfigurieren“-Assistenten des Soundgerätetreiberdialogs, wie unten gezeigt. Bitte beachten Sie, dass es sich lediglich um eine Systemvorgabe handelt und dass für Anwendungssoftware (z. B. Spiele) möglicherweise eigene Einstellungen erforderlich sind.
Dies wird nur empfohlen, wenn Multicast Probleme bereitet. Passen Sie die Registrierung wie in diesem Screenshot dargestellt an (Sie müssen den Schlüssel „Optionen“ erstellen) und starten Sie dann neu:
Durch die Stilleunterdrückung wird verhindert, dass Daten über das Netzwerk gesendet werden, wenn Stille herrscht. Sobald eine festgelegte Anzahl aufeinanderfolgender stiller Samples verarbeitet wurde, stoppt Scream das Senden von Daten. Fügen Sie den folgenden Registrierungsschlüssel hinzu – der empfohlene Wert beträgt 10.000 Samples (~1/4 Sekunde bei 44.100 Hz).
Passen Sie die Registrierung wie in diesem Screenshot dargestellt an (Sie müssen den Schlüssel „Optionen“ erstellen) und starten Sie dann neu:
️ Hinweis: Obwohl diese Einrichtung möglich ist, wird sie im Allgemeinen nur dann empfohlen, wenn Sie die Netzwerkübertragung nicht über ein Standard-Virtio-Net-Gerät nutzen können. Scream on QEMU profitiert nicht von der Verwendung von IVSHMEM. Aufgrund des Polling-Charakters der Implementierung erhöht sich die CPU-Last und die Latenz.
Dies kann als Alternative zur standardmäßigen Netzwerkübertragung bei Verwendung von QEMU/KVM verwendet werden.
...
...
2
...
...
Alternativ für diejenigen, die libvirt nicht verwenden, hier ein Beispiel für die relevanten Teile einer QEMU-Befehlszeile:
...
-device ivshmem-plain,memdev=ivshmem_scream
-object memory-backend-file,id=ivshmem_scream,share=on,mem-path=/dev/shm/scream-ivshmem,size=2M
...
PCI standard RAM Controller
im Knoten System Devices
manuell mit dem oben heruntergeladenen aktualisiert werden.HKLMSYSTEMCurrentControlSetServicesScreamOptionsUseIVSHMEM
hinzu, wobei der Wert die Größe des Geräts in MB ist (2, wie empfohlen). Bitte beachten Sie, dass Scream das Gerät anhand seiner Größe identifiziert. Sie sollten daher nur ein IVSHMEM-Gerät mit dieser spezifischen Größe haben. Beachten Sie auch, dass Sie möglicherweise die Options
erstellen müssen. Sie können diesen Befehl auch in eine Admin-CMD-Shell einfügen, um sowohl Schlüssel als auch DWORD zu erstellen: REG ADD HKLMSYSTEMCurrentControlSetServicesScreamOptions /v UseIVSHMEM /t REG_DWORD /d 2
scream -m /dev/shm/scream-ivshmem
Visual Studio und ein aktuelles WDK sind erforderlich. Viel Glück!