Scream é um driver de dispositivo virtual para Windows que fornece um dispositivo de som discreto. O áudio reproduzido através deste dispositivo é publicado na sua rede local como um fluxo multicast PCM.
Os receptores na rede podem captar o fluxo e reproduzi-lo através de suas próprias saídas de áudio. Os receptores estão disponíveis para Unix/Linux (com interface com PulseAudio ou ALSA) e para Windows.
Para o cenário especial de um convidado Windows em um host QEMU, @martinellimarco contribuiu com suporte para transferência de áudio através do mecanismo de driver IVSHMEM, semelhante ao software de passagem de GPU "Looking Glass". Consulte a seção sobre IVSHMEM abaixo.
Scream é baseado no código de amostra do driver de áudio MSVAD da Microsoft. O código original está licenciado sob MS-PL, assim como minhas alterações e adições. Consulte LICENSE para obter o texto da licença real.
Um arquivo ZIP contendo compilações assinadas para Windows 10 em x64, x86 e arm64 está disponível na página de lançamentos do GitHub. O “instalador” é um arquivo em lote que precisa ser executado com direitos de administrador.
A Microsoft recentemente reforçou as regras para assinatura de drivers de kernel. Essas novas regras se aplicam a instalações mais recentes do Windows 10 que não foram atualizadas de uma versão anterior. Se a sua instalação estiver sujeita a essas regras, o driver não será instalado.
No entanto, os drivers de kernel com assinatura cruzada ainda são aceitos pelo Windows 10 versão 1607 (e superior) se alguma das seguintes exceções se aplicar:
Solução alternativa nº 1: desative a inicialização segura no BIOS. Para obter mais informações, consulte este problema.
Solução alternativa nº 2: adicione este valor de registro especial:
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlCIPolicy]
"UpgradedSystem"=dword:00000001
Revise os seguintes recursos para obter mais informações.
Os métodos de instalação acima não funcionarão no Windows 11, pois o arquivo em lote de instalação depende de devcon-x64
, que não é compatível com o Windows 11. Você pode instalar drivers não assinados para Windows 11 com um método alternativo, aproveitando o sucessor do devcon, pnputil
e bcdedit
para colocar o Windows 11 em modo de teste. Para instalar o Scream para Windows 11:
bcdedit /set testsigning on
. Reinicie sua máquina e certifique-se de ver “Modo de teste” no canto inferior direito do seu papel de parede./Install/driver//
. Em seguida, emita: pnputil /add-driver .Scream.inf /install
.bcdedit /set testsigning off
. Em seguida, reinicie o seu computador. Certifique-se de que o Modo de Teste esteja desativado, garantindo que não haja nenhuma mensagem de "Modo de Teste" presente no canto inferior direito do seu papel de parede. Agora você deve ver o dispositivo de áudio Scream em seus dispositivos de áudio e pode prosseguir com a configuração do cliente. Unix com Pulseaudio, JACK ou ALSA: Não incluído no pacote de instalação. Por favor, veja o README na pasta Receivers/unix. Vários colaboradores escreveram código para este receptor:
Windows: ScreamReader, contribuição de @MrShoenel. Incluído no pacote do instalador a partir da versão 1.2. Este receptor não suporta mapeamento posicional de configurações multicanal (mais do que estéreo) - o que significa que uma incompatibilidade na configuração dos alto-falantes pode fazer com que os canais sejam reproduzidos na posição errada.
Um receptor de terceiros que suporta streams do Scream é https://github.com/mincequi/cornrow. Destina-se principalmente a dispositivos incorporados.
@tomek-o escreveu receptores para sistemas embarcados de baixo consumo de energia, ótimos para construir alto-falantes ativos conectados por Ethernet.
Os receptores geralmente podem ser executados como usuários sem privilégios. Os sistemas receptores que possuem um firewall de entrada precisam abrir a porta UDP 4010 ou qualquer porta personalizada que você usar.
Todo o áudio reproduzido através do dispositivo Scream será colocado na LAN local como um fluxo multicast (o uso de unicast é opcional - veja abaixo). O atraso é mínimo, pois todo o processamento é feito no nível do kernel. Não há parte do espaço do usuário.
O endereço e a porta de destino multicast são "239.255.77.77:4010". O áudio é um fluxo PCM bruto. A taxa de amostragem e o tamanho padrão podem ser definidos como "Formato padrão" na página de propriedades "Avançado" do driver. A configuração padrão do alto-falante/canal pode ser definida na caixa de diálogo "Configurar" do dispositivo de som Scream.
Os dados são transferidos em quadros UDP com um tamanho de carga útil de no máximo. 1157 bytes, consistindo em 5 bytes de cabeçalho e 1152 bytes de dados PCM. O último número é divisível por 4, 6 e 8, portanto um número completo de amostras para todos os canais sempre caberá em um pacote. O primeiro byte do cabeçalho denota a taxa de amostragem. O bit 7 especifica a taxa básica: 0 para 48kHz, 1 para 44,1kHz. Outros bits especificam o multiplicador da taxa básica. O segundo byte do cabeçalho indica a largura da amostragem, em bits. O terceiro byte do cabeçalho indica o número de canais que estão sendo transferidos. O quarto e quinto bytes do cabeçalho constituem o DWORD dwChannelMask da estrutura WAVEFORMATEXTENSIBLE da Microsoft, descrevendo o mapeamento de canais para posições de alto-falante.
Os receptores simplesmente precisam ler o fluxo da rede e colocá-lo em um coletor de áudio local. O kernel do sistema receptor deve fazer automaticamente a sinalização IGMP necessária, então geralmente é suficiente apenas abrir um soquete de escuta multicast e começar a ler a partir dele. O buffer mínimo (~ 4 vezes o tamanho da carga útil do UDP) deve ser feito para compensar o jitter.
Para satisfazer seus sentimentos audiófilos ou para reduzir reamostragens desnecessárias, você pode querer definir uma taxa de amostragem e/ou largura de amostragem mais alta. Você pode fazer isso na página de propriedades “Avançado” do driver, conforme mostrado abaixo. Aviso: usar altas frequências de amostragem com largura de 24/32 bits em combinação com multicanal pode levar a altas taxas de bits na rede. Recomendamos manter 48kHz/16 bits para modos de canal 5.1 ou superior, ou 44,1kHz/16 se você for ouvir música de CDs.
largura="700"/>
Graças ao excelente trabalho de @martinellimarco, se o seu sistema alvo tiver uma configuração de alto-falante multicanal, você também poderá estender isso para o Windows. Use o assistente "Configurar" da caixa de diálogo do driver do dispositivo de som, conforme mostrado abaixo. Observe que este é apenas um padrão do sistema e que o software aplicativo (como jogos) pode exigir que suas próprias configurações sejam feitas.
Isso só é recomendado se o multicast causar problemas. Ajuste o registro da maneira mostrada nesta captura de tela (você terá que criar a chave "Opções") e reinicie:
A supressão de silêncio evitará o envio de dados pela rede se houver silêncio. Assim que um determinado número de amostras silenciosas consecutivas for processado, o Scream irá parar de enviar dados. Adicione a seguinte chave de registro - o valor sugerido é 10.000 amostras (~1/4 segundo a 44.100 Hz).
Ajuste o registro da maneira mostrada nesta captura de tela (você terá que criar a chave "Opções") e reinicie:
️ Nota: Embora esta configuração seja possível, geralmente só é aconselhável se você não puder usar a transferência de rede através de um dispositivo virtio-net padrão. O Scream no QEMU não se beneficia do uso do IVSHMEM. Aumenta a carga e a latência da CPU devido à natureza de pesquisa da implementação.
Isso pode ser usado como uma alternativa à transferência de rede padrão ao usar QEMU/KVM.
...
...
2
...
...
Alternativamente, para aqueles que não usam libvirt, aqui está um exemplo das partes relevantes de uma linha de comando do 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
no nó System Devices
deve ser atualizado manualmente com aquele baixado acima.HKLMSYSTEMCurrentControlSetServicesScreamOptionsUseIVSHMEM
, sendo o valor o tamanho do dispositivo em MB (2, conforme recomendado). Observe que o Scream identificará o dispositivo pelo seu tamanho, portanto você deve ter apenas um dispositivo IVSHMEM com esse tamanho específico. Observe também que talvez seja necessário criar a chave Options
. Você também pode colar este comando em um shell CMD de administrador para criar a chave e o DWORD: REG ADD HKLMSYSTEMCurrentControlSetServicesScreamOptions /v UseIVSHMEM /t REG_DWORD /d 2
scream -m /dev/shm/scream-ivshmem
Visual Studio e um WDK recente são necessários. Boa sorte!