Scream เป็นไดรเวอร์อุปกรณ์เสมือนสำหรับ Windows ที่ให้อุปกรณ์เสียงแยก เสียงที่เล่นผ่านอุปกรณ์นี้ได้รับการเผยแพร่บนเครือข่ายท้องถิ่นของคุณเป็นสตรีมมัลติคาสต์ PCM
เครื่องรับบนเครือข่ายสามารถรับสตรีมและเล่นผ่านเอาต์พุตเสียงของตนเองได้ ตัวรับพร้อมใช้งานสำหรับ Unix/Linux (เชื่อมต่อกับ PulseAudio หรือ ALSA) และสำหรับ Windows
สำหรับสถานการณ์พิเศษของแขก Windows บนโฮสต์ QEMU @martinellimarco ได้สนับสนุนการถ่ายโอนเสียงผ่านกลไกไดรเวอร์ IVSHMEM ซึ่งคล้ายกับซอฟต์แวร์ส่งผ่าน GPU "Looking Glass" ดูหัวข้อ IVSHMEM ด้านล่าง
Scream ขึ้นอยู่กับโค้ดตัวอย่างไดรเวอร์เสียง MSVAD ของ Microsoft รหัสต้นฉบับได้รับอนุญาตภายใต้ MS-PL เช่นเดียวกับการเปลี่ยนแปลงและเพิ่มเติมของฉัน ดูใบอนุญาตสำหรับข้อความใบอนุญาตจริง
ไฟล์ ZIP ที่มีบิลด์ที่ลงนามสำหรับ Windows 10 บน x64, x86 และ arm64 มีอยู่ในหน้าเผยแพร่ GitHub "ตัวติดตั้ง" เป็นไฟล์แบตช์ที่ต้องเรียกใช้ด้วยสิทธิ์ของผู้ดูแลระบบ
เมื่อเร็ว ๆ นี้ Microsoft ได้ปรับปรุงกฎสำหรับการลงนามไดรเวอร์เคอร์เนลให้เข้มงวดมากขึ้น กฎใหม่เหล่านี้ใช้กับการติดตั้ง Windows 10 รุ่นใหม่ซึ่งไม่ได้อัปเกรดจากเวอร์ชันก่อนหน้า หากการติดตั้งของคุณอยู่ภายใต้กฎเหล่านี้ ไดรเวอร์จะไม่ถูกติดตั้ง
อย่างไรก็ตาม Windows 10 เวอร์ชัน 1607 (และสูงกว่า) ยังคงยอมรับไดรเวอร์เคอร์เนลแบบ Cross-signed หากมีข้อยกเว้นใดๆ ต่อไปนี้:
วิธีแก้ปัญหา #1: ปิดใช้งานการบูตแบบปลอดภัยใน BIOS สำหรับข้อมูลเพิ่มเติม โปรดดูปัญหานี้
วิธีแก้ปัญหา #2: เพิ่มค่ารีจิสทรีพิเศษนี้:
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlCIPolicy]
"UpgradedSystem"=dword:00000001
โปรดตรวจสอบแหล่งข้อมูลต่อไปนี้สำหรับข้อมูลเพิ่มเติม
วิธีการติดตั้งด้านบนจะใช้ไม่ได้กับ Windows 11 เนื่องจากไฟล์แบตช์การติดตั้งอาศัย devcon-x64
ซึ่งเข้ากันไม่ได้กับ Windows 11 คุณสามารถติดตั้งไดรเวอร์ที่ไม่ได้ลงชื่อสำหรับ Windows 11 ด้วยวิธีอื่น โดยใช้ประโยชน์จากตัวตายตัวแทนของ devcon, pnputil
และ bcdedit
เพื่อให้ Windows 11 อยู่ในโหมดทดสอบ วิธีติดตั้ง Scream สำหรับ Windows 11:
bcdedit /set testsigning on
รีบูทเครื่องของคุณ และให้แน่ใจว่าคุณเห็น "โหมดทดสอบ" ที่มุมขวาล่างของวอลเปเปอร์/Install/driver//
จากนั้น ปัญหา: pnputil /add-driver .Scream.inf /install
bcdedit /set testsigning off
จากนั้นรีสตาร์ทคอมพิวเตอร์ของคุณ ตรวจสอบให้แน่ใจว่าปิดใช้งานโหมดทดสอบแล้วโดยตรวจสอบให้แน่ใจว่าไม่มีข้อความ "โหมดทดสอบ" ปรากฏที่มุมล่างขวาของวอลเปเปอร์ของคุณ ตอนนี้คุณควรเห็นอุปกรณ์เสียง Scream ในอุปกรณ์เสียงของคุณ และสามารถดำเนินการตั้งค่าไคลเอนต์ได้ Unix พร้อม Pulseaudio, JACK หรือ ALSA: ไม่รวมอยู่ในแพ็คเกจการติดตั้ง โปรดดู README ในโฟลเดอร์ Receivers/unix ผู้มีส่วนร่วมหลายคนได้เขียนโค้ดสำหรับผู้รับนี้:
Windows: ScreamReader สนับสนุนโดย @MrShoenel รวมอยู่ในแพ็คเกจตัวติดตั้งตั้งแต่เวอร์ชัน 1.2 เครื่องรับนี้ไม่รองรับการวางตำแหน่งการตั้งค่าหลายช่องสัญญาณ (มากกว่าสเตอริโอ) ซึ่งหมายความว่าการตั้งค่าลำโพงที่ไม่ตรงกันอาจทำให้ช่องเล่นในตำแหน่งที่ไม่ถูกต้องได้
ตัวรับบุคคลที่สามที่รองรับสตรีม Scream คือ https://github.com/mincequi/cornrow มีไว้สำหรับอุปกรณ์ฝังตัวเป็นหลัก
@tomek-o เขียนตัวรับสำหรับระบบฝังตัวที่ใช้พลังงานต่ำ เหมาะสำหรับการสร้างลำโพงแอคทีฟที่ต่อกับอีเธอร์เน็ต
โดยปกติผู้รับสามารถเรียกใช้ในฐานะผู้ใช้ที่ไม่มีสิทธิพิเศษ ระบบรับสัญญาณที่มี ไฟร์วอลล์อินพุตจำเป็นต้องเปิดพอร์ต UDP 4010 หรือพอร์ตที่กำหนดเองใดๆ ก็ตามที่คุณใช้
เสียงทั้งหมดที่เล่นผ่านอุปกรณ์ Scream จะถูกใส่ลงใน LAN ภายในเป็นสตรีมแบบหลายผู้รับ (การใช้ unicast เป็นทางเลือก - ดูด้านล่าง) ความล่าช้ามีน้อยมาก เนื่องจากการประมวลผลทั้งหมดเสร็จสิ้นในระดับเคอร์เนล ไม่มีส่วนพื้นที่ผู้ใช้
ที่อยู่และพอร์ตมัลติคาสต์เป้าหมายคือ "239.255.77.77:4010" เสียงเป็นสตรีม PCM แบบ Raw อัตราการสุ่มตัวอย่างและขนาดเริ่มต้นสามารถตั้งค่าเป็น "รูปแบบเริ่มต้น" ในหน้าคุณสมบัติ "ขั้นสูง" ของไดรเวอร์ การกำหนดค่าเริ่มต้นของลำโพง/ช่องสามารถตั้งค่าได้ในกล่องโต้ตอบ "กำหนดค่า" ของอุปกรณ์เสียง Scream
ข้อมูลจะถูกถ่ายโอนในเฟรม UDP ด้วยขนาดเพย์โหลดสูงสุด 1157 ไบต์ ประกอบด้วยส่วนหัว 5 ไบต์ และข้อมูล PCM 1152 ไบต์ ตัวเลขหลังหารด้วย 4, 6 และ 8 ลงตัว ดังนั้นจำนวนตัวอย่างทั้งหมดสำหรับทุกช่องจะพอดีกับแพ็กเก็ตเสมอ ไบต์ส่วนหัวแรกแสดงถึงอัตราการสุ่มตัวอย่าง บิต 7 ระบุอัตราฐาน: 0 สำหรับ 48kHz, 1 สำหรับ 44,1kHz บิตอื่นๆ ระบุตัวคูณสำหรับอัตราฐาน ไบต์ส่วนหัวที่สองหมายถึงความกว้างของการสุ่มตัวอย่างเป็นบิต ไบต์ส่วนหัวที่สามแสดงถึงจำนวนช่องสัญญาณที่กำลังถ่ายโอน ไบต์ส่วนหัวที่สี่และห้าประกอบขึ้นเป็น DWORD dwChannelMask จากโครงสร้าง WAVEFORMATEXTENSIBLE ของ Microsoft ซึ่งอธิบายการแมปช่องสัญญาณไปยังตำแหน่งผู้พูด
ผู้รับเพียงแค่ต้องอ่านสตรีมจากเครือข่ายและบรรจุลงในอ่างรับเสียงในเครื่อง เคอร์เนลของระบบรับสัญญาณควรทำการส่งสัญญาณ IGMP ที่จำเป็นโดยอัตโนมัติ ดังนั้นจึงเพียงพอแล้วที่จะเปิดซ็อกเก็ตการฟังแบบหลายผู้รับและเริ่มอ่านจากซ็อกเก็ตดังกล่าว ควรทำการบัฟเฟอร์ขั้นต่ำ (~ 4 เท่าของขนาดเพย์โหลด UDP) เพื่อชดเชยการกระวนกระวายใจ
เพื่อตอบสนองความรู้สึกแห่งออดิโอไฟล์ของคุณ หรือเพื่อลดการสุ่มตัวอย่างที่ไม่จำเป็น คุณอาจต้องการตั้งค่าอัตราการสุ่มตัวอย่างที่สูงขึ้นและ/หรือความกว้างของการสุ่มตัวอย่าง คุณสามารถทำได้ในหน้าคุณสมบัติ "ขั้นสูง" ของไดรเวอร์ดังที่แสดงด้านล่าง คำเตือน: การใช้ความถี่สุ่มตัวอย่างสูงที่มีความกว้าง 24/32 บิตร่วมกับหลายช่องสัญญาณอาจทำให้อัตราบิตสูงบนเครือข่ายได้ เราขอแนะนำให้คงไว้ที่ 48kHz/16 บิตสำหรับโหมดช่องสัญญาณ 5.1 หรือสูงกว่า หรือ 44.1kHz/16 หากคุณต้องการฟังเพลงจากซีดี
ความกว้าง = "700"/>
ต้องขอบคุณการทำงานที่ยอดเยี่ยมของ @martinellimarco หากระบบเป้าหมายของคุณมีการตั้งค่าลำโพงแบบหลายช่องสัญญาณ คุณสามารถขยายไปยัง Windows ได้เช่นกัน ใช้วิซาร์ด "กำหนดค่า" ของกล่องโต้ตอบไดรเวอร์อุปกรณ์เสียง ดังที่แสดงด้านล่าง โปรดทราบว่านี่เป็นเพียงค่าเริ่มต้นของระบบ และแอพพลิเคชั่นซอฟต์แวร์ (เช่น เกม) อาจต้องมีการตั้งค่าของตัวเอง
ขอแนะนำเฉพาะในกรณีที่มัลติคาสต์ทำให้คุณเกิดปัญหา ปรับแต่งรีจิสทรีในลักษณะที่ปรากฎในภาพหน้าจอนี้ (คุณจะต้องสร้างคีย์ "ตัวเลือก") จากนั้นรีบูต:
การปราบปรามความเงียบจะหลีกเลี่ยงการส่งข้อมูลผ่านเครือข่ายหากมีความเงียบ เมื่อประมวลผลตัวอย่างแบบเงียบติดต่อกันตามจำนวนที่กำหนด Scream จะหยุดส่งข้อมูล เพิ่มคีย์รีจิสทรีต่อไปนี้ - ค่าที่แนะนำคือ 10,000 ตัวอย่าง (~1/4 วินาทีที่ 44100Hz)
ปรับแต่งรีจิสทรีในลักษณะที่ปรากฎในภาพหน้าจอนี้ (คุณจะต้องสร้างคีย์ "ตัวเลือก") จากนั้นรีบูต:
หมายเหตุ: แม้ว่าการตั้งค่านี้จะเป็นไปได้ แต่โดยทั่วไปขอแนะนำเฉพาะในกรณีที่คุณไม่สามารถใช้การถ่ายโอนเครือข่ายผ่านอุปกรณ์ virtio-net มาตรฐานได้ Scream on QEMU ไม่ได้รับประโยชน์จากการใช้ 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
...
PCI standard RAM Controller
ในโหนด System Devices
จะต้องได้รับการอัปเดตด้วยตนเองด้วยอันที่ดาวน์โหลดไว้ด้านบนHKLMSYSTEMCurrentControlSetServicesScreamOptionsUseIVSHMEM
โดยค่าเป็นขนาดของอุปกรณ์ในหน่วย MB (2 ตามที่แนะนำ) โปรดทราบว่าเสียงกรีดร้องจะระบุอุปกรณ์ตามขนาด ดังนั้นคุณควรมีอุปกรณ์ IVSHMEM ที่มีขนาดเฉพาะดังกล่าวเพียงเครื่องเดียวเท่านั้น โปรดทราบว่าคุณอาจต้องสร้างคีย์ Options
คุณยังสามารถวางคำสั่งนี้ลงในเชลล์ CMD ของผู้ดูแลระบบเพื่อสร้างทั้งคีย์และ DWORD: REG ADD HKLMSYSTEMCurrentControlSetServicesScreamOptions /v UseIVSHMEM /t REG_DWORD /d 2
scream -m /dev/shm/scream-ivshmem
จำเป็นต้องมี Visual Studio และ WDK ล่าสุด ขอให้โชคดี!