Scream est un pilote de périphérique virtuel pour Windows qui fournit un périphérique audio discret. L'audio lu via cet appareil est publié sur votre réseau local sous forme de flux multidiffusion PCM.
Les récepteurs du réseau peuvent capter le flux et le lire via leurs propres sorties audio. Les récepteurs sont disponibles pour Unix/Linux (interfacé avec PulseAudio ou ALSA) et pour Windows.
Pour le scénario spécial d'un invité Windows sur un hôte QEMU, @martinellimarco a contribué à la prise en charge du transfert audio via le mécanisme de pilote IVSHMEM, similaire au logiciel de passage GPU "Looking Glass". Voir la section sur IVSHMEM ci-dessous.
Scream est basé sur l'exemple de code du pilote audio MSVAD de Microsoft. Le code original est sous licence MS-PL, tout comme mes modifications et ajouts. Voir LICENCE pour le texte de licence réel.
Un fichier ZIP contenant les versions signées pour Windows 10 sur x64, x86 et arm64 est disponible sur la page des versions de GitHub. Le "installateur" est un fichier batch qui doit être exécuté avec les droits d'administrateur.
Microsoft a récemment renforcé les règles de signature des pilotes du noyau. Ces nouvelles règles s'appliquent aux installations Windows 10 plus récentes qui n'ont pas été mises à niveau à partir d'une version antérieure. Si votre installation est soumise à ces règles, le pilote ne s'installera pas.
Toutefois, les pilotes de noyau à signature croisée sont toujours acceptés par Windows 10 version 1607 (et versions ultérieures) si l'une des exceptions suivantes s'applique :
Solution n°1 : désactivez le démarrage sécurisé dans le BIOS. Pour plus d’informations, consultez ce problème.
Solution de contournement n°2 : ajoutez cette valeur de registre spéciale :
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlCIPolicy]
"UpgradedSystem"=dword:00000001
Veuillez consulter les ressources suivantes pour plus d’informations.
Les méthodes d'installation ci-dessus ne fonctionneront pas sous Windows 11, car le fichier batch d'installation repose sur devcon-x64
, qui n'est pas compatible avec Windows 11. Vous pouvez installer des pilotes non signés pour Windows 11 avec une méthode alternative, en tirant parti du successeur de devcon, pnputil
et bcdedit
pour mettre Windows 11 en mode test. Pour installer Scream pour Windows 11 :
bcdedit /set testsigning on
. Redémarrez votre ordinateur et assurez-vous de voir « Mode test » dans le coin inférieur droit de votre fond d'écran./Install/driver//
. Ensuite, lancez : pnputil /add-driver .Scream.inf /install
.bcdedit /set testsigning off
. Ensuite, redémarrez votre ordinateur. Assurez-vous que le mode test est maintenant désactivé en vous assurant qu'aucun message « Mode test » n'est présent dans le coin inférieur droit de votre fond d'écran. Vous devriez maintenant voir le périphérique audio Scream dans vos appareils audio et pouvez procéder à la configuration du client. Unix avec Pulseaudio, JACK ou ALSA : Non inclus dans le package d'installation. Veuillez consulter le fichier README dans le dossier Receivers/unix. Divers contributeurs ont écrit du code pour ce récepteur :
Windows : ScreamReader, contribution de @MrShoenel. Inclus dans le package d'installation à partir de la version 1.2. Ce récepteur ne prend pas en charge le mappage de position des configurations multicanaux (plus que stéréo), ce qui signifie qu'une inadéquation dans la configuration des enceintes peut entraîner la lecture des canaux dans la mauvaise position.
Un récepteur tiers prenant en charge les flux Scream est https://github.com/mincequi/cornrow. Il est principalement destiné aux appareils embarqués.
@tomek-o a écrit des récepteurs pour les systèmes embarqués à faible consommation, parfaits pour construire des haut-parleurs actifs connectés à Ethernet.
Les récepteurs peuvent généralement être exécutés en tant qu'utilisateurs non privilégiés. Les systèmes récepteurs dotés d'un pare-feu d'entrée doivent ouvrir le port UDP 4010 ou tout autre port personnalisé que vous utilisez.
Tout l'audio lu via l'appareil Scream sera diffusé sur le réseau local local sous forme de flux multidiffusion (l'utilisation de la monodiffusion est facultative - voir ci-dessous). Le délai est minime, puisque tout le traitement est effectué au niveau du noyau. Il n'y a pas de partie espace utilisateur.
L'adresse et le port cible de multidiffusion sont « 239.255.77.77:4010 ». L'audio est un flux PCM brut. Le taux d'échantillonnage et la taille par défaut peuvent être définis comme « Format par défaut » dans la page de propriétés « Avancé » du pilote. La configuration par défaut des haut-parleurs/canaux peut être définie dans la boîte de dialogue « Configurer » du périphérique audio Scream.
Les données sont transférées dans des trames UDP avec une taille de charge utile maximale. 1 157 octets, composés de 5 octets d'en-tête et de 1 152 octets de données PCM. Ce dernier nombre est divisible par 4, 6 et 8, donc un nombre complet d'échantillons pour tous les canaux rentrera toujours dans un paquet. Le premier octet d'en-tête indique la fréquence d'échantillonnage. Le bit 7 spécifie le débit de base : 0 pour 48 kHz, 1 pour 44,1 kHz. D'autres bits spécifient le multiplicateur du taux de base. Le deuxième octet d'en-tête indique la largeur d'échantillonnage, en bits. Le troisième octet d'en-tête indique le nombre de canaux transférés. Les quatrième et cinquième octets d'en-tête constituent la structure DWORD dwChannelMask de Microsoft WAVEFORMATEXTENSIBLE, décrivant le mappage des canaux aux positions des haut-parleurs.
Les récepteurs doivent simplement lire le flux sur le réseau et le placer dans un récepteur audio local. Le noyau du système récepteur doit automatiquement effectuer la signalisation IGMP nécessaire, il suffit donc généralement d'ouvrir simplement un socket d'écoute multicast et de commencer à lire à partir de celui-ci. Une mise en mémoire tampon minimale (~ 4 fois la taille de la charge utile UDP) doit être effectuée pour tenir compte de la gigue.
Pour satisfaire vos sentiments d'audiophile ou pour réduire le rééchantillonnage inutile, vous souhaiterez peut-être définir un taux d'échantillonnage et/ou une largeur d'échantillonnage plus élevés. Vous pouvez le faire sur la page de propriétés « Avancé » du pilote, comme indiqué ci-dessous. Attention : l'utilisation de fréquences d'échantillonnage élevées avec une largeur de 24/32 bits en combinaison avec le multicanal peut conduire à des débits binaires élevés sur le réseau. Nous vous recommandons de vous en tenir à 48 kHz/16 bits pour les modes de canal 5.1 ou supérieur, ou à 44,1 kHz/16 si vous souhaitez écouter de la musique à partir de CD.
largeur="700"/>
Grâce à l'excellent travail de @martinellimarco, si votre système cible dispose d'une configuration de haut-parleurs multicanaux, vous pouvez également l'étendre à Windows. Utilisez l'assistant « Configurer » de la boîte de dialogue du pilote de périphérique audio, comme indiqué ci-dessous. Veuillez noter qu'il ne s'agit que d'un paramètre par défaut du système et que les logiciels d'application (comme les jeux) peuvent nécessiter la définition de leurs propres paramètres.
Ceci n'est recommandé que si la multidiffusion vous pose des problèmes. Ajustez le registre de la manière décrite dans cette capture d'écran (vous devrez créer la clé "Options"), puis redémarrez :
La suppression du silence évitera d'envoyer des données sur le réseau en cas de silence. Une fois qu'un nombre défini d'échantillons silencieux consécutifs est traité, Scream cessera d'envoyer des données. Ajoutez la clé de registre suivante : la valeur suggérée est de 10 000 échantillons (~ 1/4 seconde à 44 100 Hz).
Ajustez le registre de la manière décrite dans cette capture d'écran (vous devrez créer la clé "Options"), puis redémarrez :
️ Remarque : Bien que cette configuration soit possible, elle n'est généralement conseillée que si vous ne pouvez pas utiliser le transfert réseau via un appareil virtio-net standard. Scream sur QEMU ne bénéficie pas de l’utilisation d’IVSHMEM. Cela augmente la charge et la latence du processeur en raison de la nature d'interrogation de l'implémentation.
Cela peut être utilisé comme alternative au transfert réseau par défaut lors de l’utilisation de QEMU/KVM.
...
...
2
...
...
Alternativement, pour ceux qui n'utilisent pas libvirt, voici un exemple pour les parties pertinentes d'une ligne de commande QEMU :
...
-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
dans le nœud System Devices
doit être mis à jour manuellement avec celui téléchargé ci-dessus.HKLMSYSTEMCurrentControlSetServicesScreamOptionsUseIVSHMEM
, avec la valeur étant la taille du périphérique en Mo (2, comme recommandé). Veuillez noter que scream identifiera l'appareil par sa taille, vous ne devriez donc avoir qu'un seul appareil IVSHMEM avec cette taille spécifique. Notez également que vous devrez peut-être créer la clé Options
. Vous pouvez également coller cette commande dans un shell CMD d'administrateur pour créer à la fois la clé et DWORD : REG ADD HKLMSYSTEMCurrentControlSetServicesScreamOptions /v UseIVSHMEM /t REG_DWORD /d 2
scream -m /dev/shm/scream-ivshmem
Visual Studio et un WDK récent sont requis. Bonne chance!