Pixel Streaming Ses Yakalama
Pixel Streaming, işlenmiş kareleri aktaran ve giriş/çıkışı WebRTC üzerinden senkronize eden Unreal Engine için bir eklentidir. Uygulama sunucu tarafında çalışırken, istemci tarafı işleme ve kullanıcı etkileşimini yönetir. Pixel Streaming ve kurulumu hakkında daha fazla ayrıntı için Pixel Streaming Dokümantasyonu sayfasına bakın.
Uyumluluk
Bu çözüm şunlarla çalışır:
- Resmi Pixel Streaming altyapısı (Epic Games referans uygulaması)
- Üçüncü taraf Pixel Streaming sağlayıcıları dahil:
- Vagon.io
- Arcane Mirage
- Eagle 3D Streaming
- Diğer WebRTC tabanlı akış çözümleri
- İşletim sistemleri: Windows ve Linux sunucular
Uygulama bu ortamlar genelinde test edilmiştir ve kullanılan Pixel Streaming barındırma çözümünden bağımsız olarak doğru şekilde çalışır.
Eklenti Uzantısı Kurulumu
Bu özellik, Runtime Audio Importer eklentisinin bir uzantısı olarak sağlanmaktadır. Kullanmak için şunları yapmanız gerekir:
- Runtime Audio Importer eklentisinin projenizde zaten kurulu olduğundan emin olun
- Pixel Streaming Audio Capture eklenti uzantısını Google Drive adresinden indirin
- İndirilen arşivden klasörü projenizin
Plugins
klasörüne çıkarın (bu klasör yoksa oluşturun) - Projenizi yeniden derleyin (bu uzantı bir C++ projesi gerektirir)
- Bu uzantı kaynak kodu olarak sağlanır ve kullanımı için bir C++ projesi gerektirir
- Desteklenen Unreal Engine sürümleri: UE 5.2 ve sonrası
- Eklentileri manuel olarak nasıl derleyeceğiniz hakkında daha fazla bilgi için Eklentileri Derleme eğitimine bakın
Genel Bakış
Pixel Streaming Capturable Sound Wave, standart Capturable Sound Wave öğesini, sesin doğrudan Pixel Streaming istemcilerinin mikrofonlarından yakalanmasına izin verecek şekilde genişletir. Bu özellik şunları yapmanızı sağlar:
- Pixel Streaming üzerinden bağlanan tarayıcılardan ses yakalama
- Belirli oyuncu/eşlerden gelen sesi işleme
- Uzaktaki kullanıcılardan sesli sohbet, sesli komutlar veya ses kaydı uygulama
Temel Kullanım
Bir Pixel Streaming Capturable Sound Wave Oluşturma
İlk olarak, bir Pixel Streaming Capturable Sound Wave nesnesi oluşturmanız gerekir:
- Blueprint
- C++
PixelStreamingSoundWave = UPixelStreamingCapturableSoundWave::CreatePixelStreamingCapturableSoundWave();
Pixel Streaming Capturable Sound Wave'ı erken yok olmayı önlemek için güçlü bir referans olarak ele almalısınız (örneğin, Blueprints'te ayrı bir değişkene atayarak veya C++'ta UPROPERTY()
kullanarak).
Yakalamayı Başlatma ve Durdurma
Ses yakalamayı basit fonksiyon çağrıları ile başlatıp durdurabilirsiniz:
- 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
içindeki DeviceId
parametresi, Pixel Streaming Capturable Sound Waves için göz ardı edilir, çünkü yakalama kaynağı otomatik olarak veya ayarladığınız oyuncu bilgisine göre belirlenir.
Yakalama Durumunu Kontrol Etme
Ses dalgasının şu anda ses yakalayıp yakalamadığını kontrol edebilirsiniz:
- Blueprint
- C++
// Assuming PixelStreamingSoundWave is a reference to a UPixelStreamingCapturableSoundWave object
bool bIsCapturing = PixelStreamingSoundWave->IsCapturing();
Tam Örnek
İşte Pixel Streaming ses yakalama kurulumu için tam bir örnek:
- Blueprint
- C++
Bu, bir Pixel Streaming istemcisinden ses verisi yakalamak için temel bir kod örneğidir.
Örnek, EXAMPLEMODULE
modülü içindeki UPixelStreamingAudioExample
sınıfında bulunan CapturePixelStreamingAudioExample
fonksiyonunu kullanır.
Örneği başarıyla çalıştırmak için, hem RuntimeAudioImporter
hem de PixelStreaming
modüllerini .Build.cs dosyasındaki PublicDependencyModuleNames
veya PrivateDependencyModuleNames
listesine ve ayrıca projenizin .uproject dosyasına eklediğinizden emin olun.
#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);
}
Çoklu Pixel Streaming Oyuncuları ile Çalışma
Aynı anda birden fazla Pixel Streaming istemcisi bağlı olduğu senaryolarda, belirli oyunculardan ses yakalamanız gerekebilir. Aşağıdaki özellikler bunu yönetmenize yardımcı olur.
Mevcut Pixel Streaming Oyuncularını Alma
Hangi Pixel Streaming oyuncularının bağlı olduğunu belirlemek için:
- 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);
}
}));
Yakalanacak Oyuncuyu Ayarlama
Belirli bir oyuncudan yakalama yapmanız gerektiğinde:
- Blueprint
- C++
// Assuming PixelStreamingSoundWave is a reference to a UPixelStreamingCapturableSoundWave object
// and PlayerInfo is a FPixelStreamingPlayerInfo_RAI object from GetAvailablePixelStreamingPlayers
PixelStreamingSoundWave->PlayerInfo = PlayerInfo;
Eğer Player ID'yi boş bırakırsanız, ses dalgası otomatik olarak bağlanan ilk mevcut oyuncuyu dinleyecektir. Bu varsayılan davranıştır ve tek oyunculu senaryolar için iyi çalışır.
Yaygın Kullanım Senaryoları
Sesli Sohbet Uygulaması
Pixel Streaming Capturable Sound Waves'ı uzak kullanıcılar ve yerel oyuncular arasında sesli sohbet uygulamak için kullanabilirsiniz:
- Bağlı her oyuncu için bir Pixel Streaming Capturable Sound Wave oluşturun
- Hangi oyuncuların şu anda konuştuğunu yönetmek için bir sistem kurun
- Kullanıcıların ne zaman konuştuğunu tespit etmek için Ses Aktivitesi Tespiti sistemini kullanın
- Gerekirse, Unreal Engine'in ses sistemini kullanarak sesi mekansallaştırın
Konuşma Tanıma ile Sesli Komutlar
Bu özelliği Runtime Speech Recognizer eklentisi ile birleştirerek uzak kullanıcılar için sesli komut tanıma uygulayabilirsiniz:
- Pixel Streaming Capturable Sound Wave kullanarak Pixel Streaming istemcilerinden ses yakalayın
- Yakalanan sesi doğrudan Runtime Speech Recognizer'a besleyin
- Tanınan metni oyun mantığınızda işleyin
Runtime Speech Recognizer örneklerindeki standart Capturable Sound Wave'i bir Pixel Streaming Capturable Sound Wave ile değiştirmeniz yeterlidir, bu sayede Pixel Streaming ses girişiyle sorunsuz çalışacaktır.
Uzak Kullanıcı Sesini Kaydetme
Uzak kullanıcılardan gelen sesi daha sonra oynatmak için kaydedebilirsiniz:
- Pixel Streaming Capturable Sound Wave kullanarak ses yakalayın
- Yakalanan sesi Ses Dışa Aktar kullanarak bir dosyaya dışa aktarın
- Dosyayı daha sonra kullanım veya analiz için kaydedin