Pixel Streaming Audio Capture
Pixel Streamingは、Unreal Engine用のプラグインで、レンダリングされたフレームをストリームし、入力/出力をWebRTC経由で同期させます。アプリケーションはサーバー側で実行され、クライアント側はレンダリングとユーザーインタラクションを処理します。Pixel Streamingとそのセットアップに関する詳細は、Pixel Streaming Documentationを参照してください。
Compatibility
このソリューションは以下で動作します:
- 公式 Pixel Streaming インフラストラクチャ (Epic Games リファレンス実装)
- サードパーティ製 Pixel Streaming プロバイダー には以下が含まれます:
- Vagon.io
- Arcane Mirage
- Eagle 3D Streaming
- 他のWebRTCベースのストリーミングソリューション
- オペレーティングシステム: Windows および Linux サーバー
この実装はこれらの環境でテストされてお り、使用する Pixel Streaming ホスティングソリューションに関わらず正しく機能します。
Extension Plugin Installation
この機能はRuntime Audio Importer プラグインに対する拡張として提供されます。使用するには次の手順を行います:
- プロジェクトに Runtime Audio Importer プラグインが既にインストールされていることを確認
- Google Drive から Pixel Streaming Audio Capture プラグイン拡張をダウンロード
- ダウンロードしたアーカイブからフォルダを抽出し、プロジェクトの
Plugins
フォルダに入れる(存在しない場合はフォルダを作成) - プロジェクトを再ビルド(この拡張はC++プロジェクトを必要とします)
- この拡張はソースコードとして提供されており、使用するにはC++プロジェクトが必要です
- 対応するUnreal Engineバージョン: UE 5.2以 降
- プラグインを手動でビルドする方法の詳細は、Building Plugins tutorialを参照
Overview
Pixel Streaming Capturable Sound Waveは、標準のCapturable Sound Waveを拡張し、Pixel Streamingクライアントのマイクから直接音声をキャプチャできるようにします。この機能により、以下が可能になります:
- Pixel Streaming経由で接続されたブラウザからの音声をキャプチャ
- 特定のプレーヤー/ピアからの音声を処理
- リモートユーザーからのボイスチャット、ボイスコマンド、または音声録音を実装
Basic Usage
Creating a Pixel Streaming Capturable Sound Wave
まず、Pixel Streaming Capturable Sound Waveオブジェクトを作成する必要があります:
- Blueprint
- C++
PixelStreamingSoundWave = UPixelStreamingCapturableSoundWave::CreatePixelStreamingCapturableSoundWave();
Pixel Streaming Capturable Sound Waveは、早期破壊を防ぐために強力な参照として扱うべきです(例:Blueprintsで別の変数に割り当てる、C++でUPROPERTY()
を使用するなど)。
キャプチャの開始と停止
簡単な関数呼び出しでオーディオキャプチャを開始および停止できます:
- Blueprint
- C++
// Assuming PixelStreamingSoundWave is a reference to a UPixelStreamingCapturableSoundWave object
// Start capturing audio (the device ID parameter is ignored for Pixel Streaming)
PixelStreamingSoundWave->StartCapture(0);
// Stop capturing audio
PixelStreamingSoundWave->StopCapture();
StartCapture
内のDeviceId
パラメーターは、Pixel Streaming Capturable Sound Wavesでは無視されます。キャプチャソースは自動的に、または設定されたプレイヤー情報によって決定されます。
キャプチャステータスの確認
サウンドウェーブが現在音声をキャプチャしているか確認できます:
- Blueprint
- C++
// Assuming PixelStreamingSoundWave is a reference to a UPixelStreamingCapturableSoundWave object
bool bIsCapturing = PixelStreamingSoundWave->IsCapturing();
完全な例
Pixel Streaming オーディオキャプチャの設定方法の完全な例です:
- Blueprint
- C++
Pixel Streaming クライアントからオーディオデータをキャプチャするための基本的なコード例です。
この例は、EXAMPLEMODULE
モジュール内の UPixelStreamingAudioExample
クラスにある CapturePixelStreamingAudioExample
関数を使用しています。
例を正常に実行するには、RuntimeAudioImporter
および PixelStreaming
モジュールを .Build.cs ファイル、およびプロジェクトの .uproject ファイルの PublicDependencyModuleNames
または PrivateDependencyModuleNames
に追加することを確認してください。
#pragma once
#include "CoreMinimal.h"
#include "UObject/Object.h"
#include "PixelStreamingAudioExample.generated.h"
UCLASS(BlueprintType)
class EXAMPLEMODULE_API UPixelStreamingAudioExample : public UObject
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable)
void CapturePixelStreamingAudioExample();
private:
// Keep a strong reference to prevent garbage collection
UPROPERTY()
class UPixelStreamingCapturableSoundWave* PixelStreamingSoundWave;
};
#include "PixelStreamingAudioExample.h"
#include "Sound/PixelStreamingCapturableSoundWave.h"
#include "Kismet/GameplayStatics.h"
void UPixelStreamingAudioExample::CapturePixelStreamingAudioExample()
{
// Create a Pixel Streaming Capturable Sound Wave
PixelStreamingSoundWave = UPixelStreamingCapturableSoundWave::CreatePixelStreamingCapturableSoundWave();
// Start capturing audio
PixelStreamingSoundWave->StartCapture(0);
// Play the sound wave to hear the captured audio
UGameplayStatics::PlaySound2D(GetWorld(), PixelStreamingSoundWave);
// Set up a timer to stop capture after 30 seconds (just for demonstration)
FTimerHandle TimerHandle;
GetWorld()->GetTimerManager().SetTimer(TimerHandle, [this]()
{
PixelStreamingSoundWave->StopCapture();
}, 30.0f, false);
}
複数のPixel Streamingプレイヤーとの作業
同時に複数のPixel Streamingクライアントが接続されているシナリオ では、特定のプレイヤーからオーディオをキャプチャする必要があるかもしれません。以下の機能がその管理を助けます。
使用可能なPixel Streamingプレイヤーの取得
接続されているPixel Streamingプレイヤーを特定するには:
- Blueprint
- C++
UPixelStreamingCapturableSoundWave::GetAvailablePixelStreamingPlayers(FOnGetAvailablePixelStreamingPlayersResultNative::CreateWeakLambda(this, [](const TArray<FPixelStreamingPlayerInfo_RAI>& AvailablePlayers)
{
// Handle the list of available players
for (const FPixelStreamingPlayerInfo_RAI& PlayerInfo : AvailablePlayers)
{
UE_LOG(LogTemp, Log, TEXT("Available player: %s on streamer: %s"), *PlayerInfo.PlayerId, *PlayerInfo.StreamerId);
}
}));
特定のプレイヤーからキャプチャーする設定
特定のプレイヤーからキャプチャーする必要がある場合:
- Blueprint
- C++
// Assuming PixelStreamingSoundWave is a reference to a UPixelStreamingCapturableSoundWave object
// and PlayerInfo is a FPixelStreamingPlayerInfo_RAI object from GetAvailablePixelStreamingPlayers
PixelStreamingSoundWave->PlayerInfo = PlayerInfo;
Player IDを空白のままにすると、サウンドウェーブが接続される最初のプレイヤーを自動的にリッスンします。これはデフォルトの動作で、シングルプレイヤーのシナリオでうまく機能します。
Common Use Cases
Voice Chat Implementation
Pixel Streaming Capturable Sound Wavesを使用して、リモートユーザーとローカルプレイヤー間のボイスチャットを実装できます。
- 接続されている各プレイヤーにPixel Streaming Capturable Sound Waveを作成する
- 現在話しているプレイヤーを管理するシステムを設定する
- Voice Activity Detectionシステムを使用して、ユーザーが話している時を検出する
- 必要に応じてUnreal Engineのオーディオシステムを使用してオーディオを空間化する
Voice Commands with Speech Recognition
この機能をRuntime Speech Recognizerプラグインと組み合わせることで、リモートユーザーの音声コマンド認識を実装できます。
- Pixel Streaming Capturable Sound Waveを使用して、Pixel Streamingクライアントからオーディオをキャプチャする
- キャプチャしたオーディオを直接Runtime Speech Recognizerに入力する
- 認識されたテキストをゲームのロジックで処理する
Runtime Speech Recognizerの例で標準のCapturable Sound WaveをPixel Streaming Capturable Sound Waveに置き換えるだけで、Pixel Streamingオーディオ入力とシームレスに連携します。
Recording Remote User Audio
リモートユーザーからのオーディオを後で再生するために録音できます。
- Pixel Streaming Capturable Sound Waveを使用してオーディオをキャプチャする
- Export Audioを用いてキャプチャされたオーディオをファイルにエクスポートする
- 後での使用や分析のためにファイルを保存する