Yakalanabilir Ses Dalgası
Genel Bakış
Yakalanabilir bir ses dalgası, akış ses dalgasından türetilmiştir. Mikrofon gibi giriş cihazlarından ses verisi yakalamayı ve aynı içe aktarılmış bir ses dalgası gibi (geri sarma, SoundCue'larda kullanım vb. dahil) oynatmayı destekler. Hatta hiçbir sınırlama olmadan eşzamanlı olarak ses yakalayıp oynatabilirsiniz.
Ses Aktivite Tespiti (VAD) için bu sayfaya bakın.
Yakalanabilir ses dalgası, iOS ve Android'de yakalama başlatıldığında otomatik olarak mikrofon izinleri ister.
Temel Kullanım
Yakalanabilir Ses Dalgası Oluşturma
İlk olarak bir yakalanabilir ses dalgası oluşturmalısınız.
- Blueprint
- C++
UCapturableSoundWave* CapturableSoundWave = UCapturableSoundWave::CreateCapturableSoundWave();
Yakalanabilir ses dalgasını 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++'da UPROPERTY()
kullanarak).
Mevcut Giriş Cihazlarını Alma
Bu özelliği kullanmak için öncelikle yakalama için kullanılabilecek tüm mevcut ses giriş cihazlarını almanız gerekir.
- Blueprint
- C++
UCapturableSoundWave::GetAvailableAudioInputDevices(FOnGetAvailableAudioInputDevicesResultNative::CreateWeakLambda(this, [](const TArray<FRuntimeAudioInputDeviceInfo>& AvailableDevices)
{
// Handle the result
}));
Yakalama Başlatma ve Durdurma
Kullanılabilir cihazları aldıktan sonra, giriş cihazından ses verisi yakalamaya başlayabilir ve ihtiyaç duyulduğunda durdurabilirsiniz.
- Blueprint
- C++
// Assuming CapturableSoundWave is a UE reference to a UCapturableSoundWave object (or its derived type)
// Start capturing audio data from the input device with the specified device ID (0 in this case)
CapturableSoundWave->StartCapture(0);
// Stop capturing audio data
CapturableSoundWave->StopCapture();
DeviceId, önceki adımdan elde edilen mevcut cihazlar dizisindeki cihazın indeksidir. Varsayılan ses giriş cihazını kullanmak için, Blueprints'te -1
veya C++'da Audio::DefaultDeviceIndex
(ki bu INDEX_NONE
'a eşittir) geçirin, çünkü bazen sıfır indeksi varsayılan cihaz olmayabilir.
Yakalama Durumunu Kontrol Etme
Ses dalgasının şu anda ses yakalayıp yakalamadığını kontrol edebilirsiniz:
- Blueprint
- C++
// Assuming CapturableSoundWave is a reference to a UCapturableSoundWave object
bool bIsCapturing = CapturableSoundWave->IsCapturing();
Gelişmiş Özellikler
Sesi Sessize Alma ve Sesi Açma
Ses yakalama işlemini kesintiye uğratmadan ses verilerinin birikmesini önlemek için ses yakalamayı sessize almayı veya sesi açmayı seçebilirsiniz.
- Blueprint
- C++
// Assuming CapturableSoundWave is a UE reference to a UCapturableSoundWave object (or its derived type)
CapturableSoundWave->ToggleMute(true);
UE 5.3 ve üzeri: Yakalamayı başlatma ve durdurma artık takılmalara neden olmaz, bu nedenle ToggleMute
, StartCapture
/StopCapture
ile aynı etkiye sahiptir. Performans optimizasyonu için ToggleMute
kullanmanıza hiç gerek olmayabilir.
UE 5.2 ve öncesi: StartCapture
aracılığıyla yakalamayı başlatmak küçük takılmalara neden olabilir. Bu sürümlerde, sık sık yakalamayı açıp kapatmak için ToggleMute
kullanılması önerilir. Öncelikle yakalamayı daha az kritik bir zamanda (yükleme ekranı gibi) başlatmalı, ardından ses verilerinin ne zaman biriktirileceğini kontrol etmek için sessize alma/sesi açma işlevlerini kullanmalısınız.
UE 5.2 veya önceki bir sürüm kullanıyorsanız ve hafif donmaları ortadan kaldırmak istiyorsanız, yakalamayı bu donmanın önemsiz olabileceği bir zamanda başlatmayı düşünün. Örneğin, yakalamayı oyununuzun yükleme ekranı sırasında başlatabilir, hemen ardından yakalanabilir ses dalgasını sessize alabilir ve daha sonra herhangi bir takılma olmadan ses verilerini yakalamak için gerektiğinde yakalanabilir ses dalgasının sesini açabilirsiniz.
Tam Örnek
İşte yakalanabilir bir ses dalgası kullanımının tam bir uygulama örneği:
- Blueprint
- C++
Bu, bir yakalanabilir ses dalgası kullanarak bir giriş cihazından (mikrofon) ses verileri yakalamak için temel bir kod örneğidir.
Örnek, EXAMPLEMODULE
modülü içindeki UCaptureAudioClassExample
sınıfında bulunan CaptureAudioExample
işlevini kullanır.
Örneği başarıyla çalıştırmak için, RuntimeAudioImporter
modülünü .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 "CaptureAudioClassExample.generated.h"
UCLASS(BlueprintType)
class EXAMPLEMODULE_API UCaptureAudioClassExample : public UObject
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable)
void CaptureAudioExample();
private:
// Please pay attention to making the StreamingSoundWave a hard reference, such as using UPROPERTY(), to prevent it from being prematurely garbage collected
UPROPERTY()
class UCapturableSoundWave* CapturableSoundWave;
};
#include "CaptureAudioClassExample.h"
#include "Sound/StreamingSoundWave.h"
#include "AudioCaptureDeviceInterface.h"
void UCaptureAudioClassExample::CaptureAudioExample()
{
// Create a capturable sound wave
CapturableSoundWave = UCapturableSoundWave::CreateCapturableSoundWave();
// Capture audio data from the default input device
CapturableSoundWave->StartCapture(Audio::DefaultDeviceIndex);
// Delay for 5 seconds, just for demonstration purposes
FTimerHandle TimerHandle;
GetWorld()->GetTimerManager().SetTimer(TimerHandle, [this]()
{
// Stop capturing audio data
CapturableSoundWave->StopCapture();
// Play the sound wave
UGameplayStatics::PlaySound2D(GetWorld(), CapturableSoundWave);
}, 5, false);
}