Erfassbare Schallwelle
Übersicht
Eine erfassbare Schallwelle leitet sich von der Streaming-Schallwelle ab. Sie unterstützt die Erfassung von Audiodaten von Eingabegeräten wie einem Mikrofon und deren Wiedergabe, mit denselben Fähigkeiten wie eine importierte Schallwelle (einschließlich Zurückspulen, Verwendung in SoundCues usw.). Sie können sogar Audio gleichzeitig erfassen und abspielen, ohne Einschränkungen.
Für Voice Activity Detection (VAD) siehe diese Seite.
Die erfassbare Schallwelle fordert automatisch Mikrofonberechtigungen auf iOS und Android an, sobald die Erfassung gestartet wird.
Grundlegende Verwendung
Erstellen einer erfassbaren Schallwelle
Zuerst sollten Sie eine erfassbare Schallwelle erstellen.
- Blueprint
- C++
UCapturableSoundWave* CapturableSoundWave = UCapturableSoundWave::CreateCapturableSoundWave();
Sie sollten die erfassbare Schallwelle als starke Referenz behandeln, um vorzeitige Zerstörung zu verhindern (z.B. durch Zuweisung zu einer separaten Variable in Blueprints oder Verwendung von UPROPERTY()
in C++).
Verfügbare Eingabegeräte abrufen
Um diese Funktion zu nutzen, müssen Sie zunächst alle verfügbaren Audio-Eingabegeräte abrufen, die für die Aufnahme verwendet werden können.
- Blueprint
- C++
UCapturableSoundWave::GetAvailableAudioInputDevices(FOnGetAvailableAudioInputDevicesResultNative::CreateWeakLambda(this, [](const TArray<FRuntimeAudioInputDeviceInfo>& AvailableDevices)
{
// Handle the result
}));
Aufnahme starten und stoppen
Nachdem die verfügbaren Geräte ermittelt wurden, können Sie die Erfassung von Audiodaten vom Eingabegerät starten und bei Bedarf wieder beenden.
- 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 ist der Index des Geräts im Array der verfügbaren Geräte, die im vorherigen Schritt ermittelt wurden.
Erweiterte Funktionen
Stummschalten und Aufheben der Stummschaltung bei der Aufnahme
Sie können die Tonaufnahme stumm schalten oder die Stummschaltung aufheben, um die Ansammlung von Audiodaten zu verhindern, ohne den Aufnahmeprozess zu unterbrechen.
- Blueprint
- C++
// Assuming CapturableSoundWave is a UE reference to a UCapturableSoundWave object (or its derived type)
CapturableSoundWave->ToggleMute(true);
Dies ist nützlich, wenn häufig zwischen Aufnahmen gewechselt wird, da das Starten der Aufnahme über StartCapture
zu geringfügigen Rucklern auf der Engine-Seite führen kann. Sie sollten zunächst die Aufnahme selbst starten und erst danach stummschalten bzw. die Stummschaltung aufheben.
Wenn Ihr Ziel darin besteht, ein leichtes Einfrieren zu vermeiden, könnten Sie in Erwägung ziehen, die Aufnahme zu einem Zeitpunkt zu starten, an dem dieses Einfrieren vernachlässigbar sein könnte. Beispielsweise könnten Sie die Aufnahme während des Ladebildschirms Ihres Spiels starten, die aufnehmbare Schallwelle direkt danach stummschalten und dann die Stummschaltung der aufnehmbaren Schallwelle aufheben, wenn sie benötigt wird, um Audiodaten ohne Ruckler aufzunehmen.
Vollständiges Beispiel
Hier ist ein vollständiges Implementierungsbeispiel für die Verwendung einer aufnehmbaren Schallwelle:
- Blueprint
- C++
Dies ist ein grundlegendes Codebeispiel für die Aufnahme von Audiodaten von einem Eingabegerät (Mikrofon) mithilfe einer aufnehmbaren Schallwelle.
Das Beispiel verwendet die Funktion CaptureAudioExample
, die sich in der Klasse UCaptureAudioClassExample
innerhalb des Moduls EXAMPLEMODULE
befindet.
Um das Beispiel erfolgreich auszuführen, stellen Sie sicher, dass Sie das Modul RuntimeAudioImporter
entweder zu PublicDependencyModuleNames
oder PrivateDependencyModuleNames
in der .Build.cs-Datei sowie zu Ihrer Projekt-Datei.uproject hinzufügen.
#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"
void UCaptureAudioClassExample::CaptureAudioExample()
{
// Create a capturable sound wave
CapturableSoundWave = UCapturableSoundWave::CreateCapturableSoundWave();
// Capture audio data from the input device with the specified device ID (0 in this case)
CapturableSoundWave->StartCapture(0);
// 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);
}