Scream es un controlador de dispositivo virtual para Windows que proporciona un dispositivo de sonido discreto. El audio reproducido a través de este dispositivo se publica en su red local como una transmisión de multidifusión PCM.
Los receptores de la red pueden captar la transmisión y reproducirla a través de sus propias salidas de audio. Los receptores están disponibles para Unix/Linux (con interfaz con PulseAudio o ALSA) y para Windows.
Para el escenario especial de un invitado de Windows en un host QEMU, @martinellimarco ha contribuido con soporte para transferir audio a través del mecanismo del controlador IVSHMEM, similar al software de paso de GPU "Looking Glass". Consulte la sección sobre IVSHMEM a continuación.
Scream se basa en el código de muestra del controlador de audio MSVAD de Microsoft. El código original tiene licencia MS-PL, al igual que mis cambios y adiciones. Consulte LICENCIA para conocer el texto de la licencia real.
Un archivo ZIP que contiene compilaciones firmadas para Windows 10 en x64, x86 y arm64 está disponible en la página de lanzamientos de GitHub. El "instalador" es un archivo por lotes que debe ejecutarse con derechos de administrador.
Microsoft ha endurecido recientemente las reglas para firmar controladores del kernel. Estas nuevas reglas se aplican a instalaciones más nuevas de Windows 10 que no se actualizaron desde una versión anterior. Si su instalación está sujeta a estas reglas, el controlador no se instalará.
Sin embargo, Windows 10 versión 1607 (y posteriores) aún acepta los controladores de kernel con firma cruzada si se aplica alguna de las siguientes excepciones:
Solución #1: deshabilite el arranque seguro en BIOS. Para obtener más información, consulte este problema.
Solución #2: agregue este valor de registro especial:
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlCIPolicy]
"UpgradedSystem"=dword:00000001
Revise los siguientes recursos para obtener más información.
Los métodos de instalación anteriores no funcionarán en Windows 11, ya que el archivo por lotes de instalación se basa en devcon-x64
, que no es compatible con Windows 11. Puede instalar controladores no firmados para Windows 11 con un método alternativo, aprovechando el sucesor de devcon, pnputil
y bcdedit
para poner Windows 11 en modo de prueba. Para instalar Scream para Windows 11:
bcdedit /set testsigning on
. Reinicie su máquina y asegúrese de ver "Modo de prueba" en la esquina inferior derecha de su fondo de pantalla./Install/driver//
. Luego, emita: pnputil /add-driver .Scream.inf /install
.bcdedit /set testsigning off
. Luego, reinicie su computadora. Asegúrese de que el Modo de prueba ahora esté deshabilitado asegurándose de que no haya ningún mensaje de "Modo de prueba" presente en la esquina inferior derecha de su fondo de pantalla. Ahora debería ver el dispositivo de audio Scream en sus dispositivos de audio y puede continuar con la configuración del cliente. Unix con Pulseaudio, JACK o ALSA: No incluido en el paquete del instalador. Consulte el archivo README en la carpeta Receivers/unix. Varios contribuyentes han escrito código para este receptor:
Windows: ScreamReader, aportado por @MrShoenel. Incluido en el paquete de instalación a partir de la versión 1.2. Este receptor no admite mapeo posicional de configuraciones multicanal (más que estéreo), lo que significa que una discrepancia en la configuración de los altavoces puede provocar que los canales se reproduzcan en la posición incorrecta.
Un receptor de terceros que admite transmisiones de Scream es https://github.com/mincequi/cornrow. Está destinado principalmente a dispositivos integrados.
@ tomek-o escribió receptores para sistemas integrados de baja potencia, excelentes para construir parlantes activos conectados a Ethernet.
Los receptores normalmente se pueden ejecutar como usuarios sin privilegios. Los sistemas receptores que tienen un firewall de entrada deben abrir el puerto UDP 4010 , o cualquier puerto personalizado que utilice.
Todo el audio reproducido a través del dispositivo Scream se colocará en la LAN local como una transmisión de multidifusión (el uso de unidifusión es opcional; consulte a continuación). El retraso es mínimo, ya que todo el procesamiento se realiza a nivel del kernel. No hay ninguna parte del espacio de usuario.
La dirección y el puerto de destino de multidifusión son "239.255.77.77:4010". El audio es una transmisión PCM sin formato. La frecuencia y el tamaño de muestreo predeterminados se pueden configurar como "Formato predeterminado" en la página de propiedades "Avanzado" del controlador. La configuración predeterminada de altavoz/canal se puede establecer en el cuadro de diálogo "Configurar" del dispositivo de sonido Scream.
Los datos se transfieren en tramas UDP con un tamaño de carga útil de máx. 1157 bytes, que consta de 5 bytes de encabezado y 1152 bytes de datos PCM. Este último número es divisible por 4, 6 y 8, por lo que siempre cabrá en un paquete un número completo de muestras para todos los canales. El primer byte del encabezado indica la frecuencia de muestreo. El bit 7 especifica la velocidad base: 0 para 48 kHz, 1 para 44,1 kHz. Otros bits especifican el multiplicador de la tasa base. El segundo byte de encabezado indica el ancho de muestreo, en bits. El tercer byte de encabezado indica el número de canales que se transfieren. El cuarto y quinto bytes de encabezado forman la estructura DWORD dwChannelMask de Microsoft WAVEFORMATEXTENSIBLE, que describe la asignación de canales a las posiciones de los altavoces.
Los receptores simplemente necesitan leer la transmisión de la red y colocarla en un receptor de audio local. El núcleo del sistema receptor debería realizar automáticamente la señalización IGMP necesaria, por lo que normalmente basta con abrir un conector de escucha de multidifusión y comenzar a leer desde él. Se debe realizar un almacenamiento en búfer mínimo (~ 4 veces el tamaño de la carga útil UDP) para tener en cuenta la fluctuación.
Para satisfacer sus sentimientos de audiófilo, o para reducir el remuestreo innecesario, es posible que desee establecer una frecuencia de muestreo y/o ancho de muestreo más altos. Puede hacerlo en la página de propiedades "Avanzadas" del controlador, como se muestra a continuación. Advertencia: el uso de frecuencias de muestreo altas con un ancho de 24/32 bits en combinación con multicanal puede generar altas tasas de bits en la red. Recomendamos mantener 48 kHz/16 bits para modos de 5.1 canales o superiores, o 44,1 kHz/16 si va a escuchar música de CD.
ancho="700"/>
Gracias al gran trabajo de @martinellimarco, si su sistema de destino tiene una configuración de altavoces multicanal, también puede extenderla a Windows. Utilice el asistente "Configurar" del cuadro de diálogo del controlador del dispositivo de sonido, como se muestra a continuación. Tenga en cuenta que esto es sólo una configuración predeterminada del sistema y que el software de aplicación (como los juegos) puede requerir que se realicen sus propios ajustes.
Esto sólo se recomienda si la multidifusión le da problemas. Modifique el registro de la manera que se muestra en esta captura de pantalla (tendrá que crear la clave "Opciones") y luego reinicie:
La supresión de silencio evitará el envío de datos a través de la red si hay silencio. Una vez que se procesa una cantidad determinada de muestras silenciosas consecutivas, Scream dejará de enviar datos. Agregue la siguiente clave de registro: el valor sugerido es 10000 muestras (~1/4 de segundo a 44100 Hz).
Modifique el registro de la manera que se muestra en esta captura de pantalla (tendrá que crear la clave "Opciones") y luego reinicie:
️ Nota: Si bien esta configuración es posible, generalmente solo se recomienda si no puede utilizar la transferencia de red a través de un dispositivo virtio-net estándar. Scream on QEMU no se beneficia del uso de IVSHMEM. Aumenta la carga y la latencia de la CPU debido a la naturaleza de sondeo de la implementación.
Esto se puede utilizar como alternativa a la transferencia en red predeterminada cuando se utiliza QEMU/KVM.
...
...
2
...
...
Alternativamente, para aquellos que no usan libvirt, aquí hay un ejemplo de las partes relevantes de una línea de comando 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
en el nodo System Devices
debe actualizarse manualmente con el descargado anteriormente.HKLMSYSTEMCurrentControlSetServicesScreamOptionsUseIVSHMEM
, siendo el valor el tamaño del dispositivo en MB (2, como se recomienda). Tenga en cuenta que Scream identificará el dispositivo por su tamaño, por lo que solo debe tener un dispositivo IVSHMEM con ese tamaño específico. También tenga en cuenta que es posible que deba crear la clave Options
. También puede pegar este comando en un shell CMD de administrador para crear tanto la clave como DWORD: REG ADD HKLMSYSTEMCurrentControlSetServicesScreamOptions /v UseIVSHMEM /t REG_DWORD /d 2
scream -m /dev/shm/scream-ivshmem
Se requieren Visual Studio y un WDK reciente. ¡Buena suerte!