Scream은 개별 사운드 장치를 제공하는 Windows용 가상 장치 드라이버입니다. 이 장치를 통해 재생되는 오디오는 로컬 네트워크에 PCM 멀티캐스트 스트림으로 게시됩니다.
네트워크의 수신기는 스트림을 선택하고 자체 오디오 출력을 통해 재생할 수 있습니다. 수신기는 Unix/Linux(PulseAudio 또는 ALSA와 인터페이스) 및 Windows용으로 사용할 수 있습니다.
QEMU 호스트의 Windows 게스트에 대한 특수 시나리오의 경우 @martinellimarco는 GPU 통과 소프트웨어 "Looking Glass"와 유사한 IVSHMEM 드라이버 메커니즘을 통해 오디오 전송 지원을 제공했습니다. 아래 IVSHMEM 섹션을 참조하세요.
Scream은 Microsoft의 MSVAD 오디오 드라이버 샘플 코드를 기반으로 합니다. 원래 코드는 변경 사항 및 추가 사항과 마찬가지로 MS-PL에 따라 라이선스가 부여됩니다. 실제 라이센스 텍스트는 LICENSE를 참조하세요.
x64, x86 및 arm64 기반 Windows 10용 서명된 빌드가 포함된 ZIP 파일은 GitHub 릴리스 페이지에서 사용할 수 있습니다. "설치 프로그램"은 관리자 권한으로 실행해야 하는 배치 파일입니다.
Microsoft는 최근 커널 드라이버 서명 규칙을 강화했습니다. 이러한 새 규칙은 이전 버전에서 업그레이드되지 않은 최신 Windows 10 설치에 적용됩니다. 설치 시 이러한 규칙이 적용되는 경우 드라이버가 설치되지 않습니다.
그러나 다음 예외가 적용되는 경우 교차 서명된 커널 드라이버는 Windows 10 버전 1607 이상에서 계속 허용됩니다.
해결 방법 #1: BIOS에서 보안 부팅을 비활성화합니다. 자세한 내용은 이 문제를 참조하세요.
해결 방법 #2: 다음 특수 레지스트리 값을 추가합니다.
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlCIPolicy]
"UpgradedSystem"=dword:00000001
자세한 내용은 다음 리소스를 검토하세요.
설치 배치 파일은 Windows 11과 호환되지 않는 devcon-x64
사용하므로 위의 설치 방법은 Windows 11에서 작동하지 않습니다. devcon의 후속 버전인 pnputil
및 bcdedit
활용하는 대체 방법으로 Windows 11용 서명되지 않은 드라이버를 설치할 수 있습니다. Windows 11을 테스트 모드로 전환합니다. Windows 11용 Scream을 설치하려면:
bcdedit /set testsigning on
실행합니다. 컴퓨터를 재부팅하고 배경화면 오른쪽 하단에 "테스트 모드"가 표시되는지 확인하세요./Install/driver//
로 이동합니다. 그런 다음 pnputil /add-driver .Scream.inf /install
실행하십시오.bcdedit /set testsigning off
실행합니다. 그런 다음 컴퓨터를 다시 시작하십시오. 배경화면 오른쪽 하단에 "테스트 모드" 메시지가 없는지 확인하여 테스트 모드가 비활성화되었는지 확인하세요. 이제 오디오 장치에 Scream 오디오 장치가 표시되며 클라이언트 설정을 진행할 수 있습니다. Pulseaudio, JACK 또는 ALSA가 포함된 Unix: 설치 프로그램 패키지에 포함되어 있지 않습니다. Receivers/unix 폴더의 README를 참조하세요. 다양한 기여자가 이 수신기에 대한 코드를 작성했습니다.
Windows: @MrShoenel이 제공한 ScreamReader. 버전 1.2부터 설치 프로그램 패키지에 포함되어 있습니다. 이 수신기는 다중 채널(스테레오 이상) 설정의 위치 매핑을 지원하지 않습니다. 즉, 스피커 설정이 일치하지 않으면 채널이 잘못된 위치에서 재생될 수 있습니다.
Scream 스트림을 지원하는 타사 수신기는 https://github.com/mincequi/cornrow입니다. 주로 임베디드 장치용입니다.
@tomek-o는 이더넷에 연결된 액티브 스피커를 구축하는 데 적합한 저전력 임베디드 시스템용 수신기를 작성했습니다.
일반적으로 수신기는 권한이 없는 사용자로 실행될 수 있습니다. 입력 방화벽이 있는 수신기 시스템은 UDP 포트 4010 또는 사용하는 모든 사용자 지정 포트를 열어야 합니다 .
Scream 장치를 통해 재생되는 모든 오디오는 멀티캐스트 스트림으로 로컬 LAN에 저장됩니다(유니캐스트 사용은 선택 사항입니다. 아래 참조). 모든 처리가 커널 수준에서 수행되므로 지연이 최소화됩니다. 사용자 공간 부분이 없습니다.
멀티캐스트 대상 주소와 포트는 "239.255.77.77:4010"입니다. 오디오는 원시 PCM 스트림입니다. 기본 샘플링 속도와 크기는 드라이버의 "고급" 속성 페이지에서 "기본 형식"으로 설정할 수 있습니다. 기본 스피커/채널 구성은 Scream 사운드 장치의 "구성" 대화 상자에서 설정할 수 있습니다.
데이터는 최대 페이로드 크기의 UDP 프레임으로 전송됩니다. 5바이트 헤더와 1152바이트 PCM 데이터로 구성된 1157바이트입니다. 후자의 숫자는 4, 6, 8로 나눌 수 있으므로 모든 채널에 대한 전체 샘플 수는 항상 패킷에 맞습니다. 첫 번째 헤더 바이트는 샘플링 속도를 나타냅니다. 비트 7은 기본 속도를 지정합니다(48kHz의 경우 0, 44,1kHz의 경우 1). 다른 비트는 기본 속도의 승수를 지정합니다. 두 번째 헤더 바이트는 샘플링 폭(비트)을 나타냅니다. 세 번째 헤더 바이트는 전송되는 채널 수를 나타냅니다. 네 번째와 다섯 번째 헤더 바이트는 Microsoft의 WAVEFORMATEXTENSIBLE 구조에서 DWORD dwChannelMask를 구성하며 채널과 스피커 위치의 매핑을 설명합니다.
수신기는 네트워크에서 스트림을 읽고 이를 로컬 오디오 싱크에 넣기만 하면 됩니다. 수신 시스템의 커널은 필요한 IGMP 신호를 자동으로 수행해야 하므로 일반적으로 멀티캐스트 청취 소켓을 열고 읽기 시작하는 것만으로도 충분합니다. 지터를 고려하려면 최소 버퍼링(UDP 페이로드 크기의 약 4배)을 수행해야 합니다.
오디오 애호가의 감정을 만족시키거나 불필요한 리샘플링을 줄이려면 샘플링 속도 및/또는 샘플링 폭을 더 높게 설정하는 것이 좋습니다. 아래와 같이 드라이버 "고급" 속성 페이지에서 이 작업을 수행할 수 있습니다. 경고: 다중 채널과 함께 24/32비트 폭의 높은 샘플링 주파수를 사용하면 네트워크에서 비트 전송률이 높아질 수 있습니다. 5.1 이상의 채널 모드에서는 48kHz/16비트를 고수하고, CD에서 음악을 들으려면 44.1kHz/16비트를 고수하는 것이 좋습니다.
너비="700"/>
@martinellimarco의 훌륭한 작업 덕분에 대상 시스템에 다중 채널 스피커 설정이 있는 경우 이를 Windows로도 확장할 수 있습니다. 아래와 같이 사운드 장치 드라이버 대화 상자의 "구성" 마법사를 사용하십시오. 이는 시스템 기본값일 뿐이며 게임과 같은 응용 프로그램 소프트웨어에는 자체 설정이 필요할 수 있습니다.
이는 멀티캐스트에 문제가 있는 경우에만 권장됩니다. 이 스크린샷에 설명된 방식으로 레지스트리를 조정한 다음("옵션" 키를 생성해야 함) 재부팅합니다.
침묵 억제는 침묵이 있을 경우 네트워크를 통한 데이터 전송을 방지합니다. 설정된 수의 연속 무음 샘플이 처리되면 Scream은 데이터 전송을 중단합니다. 다음 레지스트리 키를 추가합니다. 권장 값은 10000샘플(44100Hz에서 ~1/4초)입니다.
이 스크린샷에 설명된 방식으로 레지스트리를 조정한 다음("옵션" 키를 생성해야 함) 재부팅합니다.
️ 참고: 이 설정은 가능하지만 일반적으로 표준 virtio-net 장치를 통해 네트워크 전송을 사용할 수 없는 경우에만 권장됩니다. QEMU의 Scream은 IVSHMEM을 사용해도 이점을 얻지 못합니다. 구현의 폴링 특성으로 인해 CPU 로드 및 대기 시간이 증가합니다.
이는 QEMU/KVM을 사용할 때 기본 네트워크 전송의 대안으로 사용될 수 있습니다.
...
...
2
...
...
또는 libvirt를 사용하지 않는 사람들을 위해 다음은 QEMU 명령줄 관련 부분에 대한 예입니다.
...
-device ivshmem-plain,memdev=ivshmem_scream
-object memory-backend-file,id=ivshmem_scream,share=on,mem-path=/dev/shm/scream-ivshmem,size=2M
...
System Devices
노드의 PCI standard RAM Controller
위에서 다운로드한 항목으로 수동으로 업데이트해야 합니다.HKLMSYSTEMCurrentControlSetServicesScreamOptionsUseIVSHMEM
추가합니다. 값은 MB 단위의 장치 크기입니다(권장되는 경우 2). Scream은 크기에 따라 장치를 식별하므로 해당 크기의 IVSHMEM 장치가 하나만 있어야 합니다. 또한 Options
키를 만들어야 할 수도 있습니다. 이 명령을 관리 CMD 셸에 붙여넣어 키와 DWORD를 모두 생성할 수도 있습니다. REG ADD HKLMSYSTEMCurrentControlSetServicesScreamOptions /v UseIVSHMEM /t REG_DWORD /d 2
scream -m /dev/shm/scream-ivshmem
실행하십시오. Visual Studio 및 최신 WDK가 필요합니다. 행운을 빌어요!