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: ScreamReader、@MrShoenel によって提供されました。バージョン 1.2 の時点でインストーラー パッケージに含まれています。このレシーバーは、マルチチャンネル (ステレオ以上) セットアップの位置マッピングをサポートしていません。つまり、スピーカーのセットアップの不一致により、チャンネルが間違った位置で再生される可能性があります。
Scream ストリームをサポートするサードパーティ レシーバーは https://github.com/mincequi/cornrow です。これは主に組み込みデバイス向けです。
@tomek-o は、イーサネット接続のアクティブ スピーカーの構築に最適な、低電力組み込みシステム用の受信機を作成しました。
通常、レシーバーは特権のないユーザーとして実行できます。入力ファイアウォールを備えた受信側システムは、UDP ポート 4010 または使用するカスタム ポートを開く必要があります。
Scream デバイスを通じて再生されるすべてのオーディオは、マルチキャスト ストリームとしてローカル LAN に送信されます (ユニキャストの使用はオプションです - 以下を参照)。すべての処理がカーネル レベルで実行されるため、遅延は最小限に抑えられます。ユーザースペース部分はありません。
マルチキャストのターゲットアドレスとポートは「239.255.77.77:4010」です。オーディオは生の PCM ストリームです。デフォルトのサンプリング レートとサイズは、ドライバの「詳細」プロパティ ページの「デフォルト形式」として設定できます。デフォルトのスピーカー/チャンネル構成は、Scream サウンド デバイスの「構成」ダイアログで設定できます。
データは、最大ペイロード サイズの UDP フレームで転送されます。 1157 バイト、5 バイトのヘッダーと 1152 バイトの PCM データで構成されます。後者の数は 4、6、8 で割り切れるため、すべてのチャネルの完全な数のサンプルが常に 1 つのパケットに収まります。最初のヘッダー バイトはサンプリング レートを示します。ビット 7 は基本レートを指定します。0 は 48kHz、1 は 44.1kHz です。他のビットは、基本レートの乗数を指定します。 2 番目のヘッダー バイトは、サンプリング幅をビット単位で示します。 3 番目のヘッダー バイトは、転送されるチャネルの数を示します。 4 番目と 5 番目のヘッダー バイトは、Microsoft の WAVEFORMATEXTENSIBLE 構造の DWORD dwChannelMask を構成し、スピーカーの位置へのチャンネルのマッピングを記述します。
受信機は、ネットワークからストリームを読み取り、それをローカルのオーディオ シンクに詰め込むだけで済みます。受信システムのカーネルは必要な IGMP シグナリングを自動的に実行する必要があるため、通常はマルチキャスト リッスン ソケットを開いてそこから読み取りを開始するだけで十分です。ジッターを考慮して、最小限のバッファリング (UDP ペイロード サイズの約 4 倍) を実行する必要があります。
オーディオマニアの感情を満たすため、または不必要なリサンプリングを減らすために、より高いサンプリング レートやサンプリング幅を設定することをお勧めします。以下に示すように、ドライバーの「詳細」プロパティ ページでこれを行うことができます。警告: 24/32 ビット幅の高いサンプリング周波数をマルチチャネルと組み合わせて使用すると、ネットワーク上のビット レートが高くなる可能性があります。 5.1 以上のチャンネル モードの場合は 48kHz/16 ビット、CD の音楽を聴く場合は 44.1kHz/16 を使用することをお勧めします。
width="700" />
@martinellimarco の素晴らしい取り組みのおかげで、ターゲット システムにマルチチャンネル スピーカー セットアップがある場合、それを Windows にも拡張できるようになりました。以下に示すように、サウンド デバイス ドライバー ダイアログの「構成」ウィザードを使用します。これは単なるシステムのデフォルトであり、アプリケーション ソフトウェア (ゲームなど) では独自の設定が必要な場合があることに注意してください。
これは、マルチキャストで問題が発生する場合にのみ推奨されます。このスクリーンショットに示されている方法でレジストリを調整し (「オプション」キーを作成する必要があります)、再起動します。
沈黙の抑制により、沈黙がある場合にネットワーク経由でのデータの送信が回避されます。設定された数の連続したサイレント サンプルが処理されると、Scream はデータの送信を停止します。次のレジストリ キーを追加します。推奨値は 10000 サンプル (44100Hz で約 1/4 秒) です。
このスクリーンショットに示されている方法でレジストリを調整し (「オプション」キーを作成する必要があります)、再起動します。
️ 注:このセットアップは可能ですが、通常は、標準の 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
...
System Devices
ノードのPCI standard RAM Controller
上記でダウンロードしたもので手動で更新する必要があります。HKLMSYSTEMCurrentControlSetServicesScreamOptionsUseIVSHMEM
を追加します。値はデバイスのサイズ (MB 単位) (推奨どおり 2) です。 Scream はサイズによってデバイスを識別するため、その特定のサイズの IVSHMEM デバイスは 1 つだけ必要であることに注意してください。また、 Options
キーの作成が必要になる場合があることにも注意してください。このコマンドを管理 CMD シェルに貼り付けてキーと DWORD の両方を作成することもできます: REG ADD HKLMSYSTEMCurrentControlSetServicesScreamOptions /v UseIVSHMEM /t REG_DWORD /d 2
scream -m /dev/shm/scream-ivshmem
Visual Studio と最新の WDK が必要です。幸運を!