Capturable Sound Wave
Panoramica
Un'onda sonora catturabile deriva dalla streaming sound wave. Supporta la cattura di dati audio da dispositivi di input come un microfono e la loro riproduzione, con le stesse capacità di un'onda sonora importata (inclusi riavvolgimento, utilizzo in SoundCue, ecc.). Puoi persino catturare e riprodurre audio simultaneamente senza alcuna limitazione.
Per il rilevamento dell'attività vocale (VAD), consulta questa pagina.
L'onda sonora catturabile richiede automaticamente i permessi del microfono su iOS e Android una volta avviata la cattura.
Utilizzo di Base
Creare un'onda sonora catturabile
Per prima cosa dovresti creare un'onda sonora catturabile.
- Blueprint
- C++

UCapturableSoundWave* CapturableSoundWave = UCapturableSoundWave::CreateCapturableSoundWave();
Dovresti trattare l'onda sonora catturabile come un riferimento forte per prevenirne la distruzione prematura (ad esempio assegnandola a una variabile separata nei Blueprint o usando UPROPERTY() in C++).
Ottenere i Dispositivi di Input Disponibili
Per utilizzare questa funzionalità, devi prima ottenere tutti i dispositivi di input audio disponibili che possono essere utilizzati per la cattura.
- Blueprint
- C++

UCapturableSoundWave::GetAvailableAudioInputDevices(FOnGetAvailableAudioInputDevicesResultNative::CreateWeakLambda(this, [](const TArray<FRuntimeAudioInputDeviceInfo>& AvailableDevices)
{
// Handle the result
}));
Avvio e Arresto della Cattura
Dopo aver ottenuto i dispositivi disponibili, puoi iniziare a catturare i dati audio dal dispositivo di input e fermarti quando necessario.
- 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 è l'indice del dispositivo nell'array dei dispositivi disponibili ottenuto dal passaggio precedente. Per utilizzare il dispositivo di input audio predefinito, passa -1 in Blueprint o Audio::DefaultDeviceIndex in C++ (che equivale a INDEX_NONE), poiché a volte l'indice zero non è il dispositivo predefinito.
Verifica dello Stato di Cattura
Puoi verificare se la Sound Wave sta attualmente catturando audio:
- Blueprint
- C++

// Assuming CapturableSoundWave is a reference to a UCapturableSoundWave object
bool bIsCapturing = CapturableSoundWave->IsCapturing();
Funzionalità Avanzate
Attivazione e Disattivazione del Mutecattura
Puoi scegliere di attivare o disattivare il mutecattura del suono per impedire l'accumulo di dati audio senza interrompere il processo di acquisizione.
- Blueprint
- C++

// Assuming CapturableSoundWave is a UE reference to a UCapturableSoundWave object (or its derived type)
CapturableSoundWave->ToggleMute(true);
UE 5.3 e successive: Avviare e fermare la cattura non causa più micro-freeze, quindi ToggleMute ha lo stesso effetto di StartCapture/StopCapture. Potresti non aver bisogno di usare ToggleMute affatto per l'ottimizzazione delle prestazioni.
UE 5.2 e precedenti: Avviare la cattura tramite StartCapture può causare micro-freeze. In queste versioni, si raccomanda di usare ToggleMute per attivare e disattivare frequentemente la cattura. Dovresti prima avviare la cattura stessa durante un momento meno critico (come una schermata di caricamento), e poi usare mute/unmute per controllare quando i dati audio vengono effettivamente accumulati.
Se stai usando UE 5.2 o precedenti e vuoi eliminare leggeri congelamenti, considera di avviare la cattura durante un momento in cui questo congelamento potrebbe essere trascurabile. Ad esempio, potresti avviare la cattura durante la schermata di caricamento del tuo gioco, silenziare la sound wave catturabile subito dopo, e poi riattivare l'audio della sound wave catturabile quando necessario per acquisire dati audio senza alcun congelamento.
Esempio Completo
Ecco un esempio di implementazione completa dell'uso di una sound wave catturabile:
- Blueprint
- C++

Questo è un esempio di codice di base per catturare dati audio da un dispositivo di input (microfono) utilizzando una sound wave catturabile.
L'esempio utilizza la funzione CaptureAudioExample situata nella classe UCaptureAudioClassExample all'interno del modulo EXAMPLEMODULE.
Per eseguire correttamente l'esempio, assicurati di aggiungere il modulo RuntimeAudioImporter a PublicDependencyModuleNames o PrivateDependencyModuleNames nel file .Build.cs, così come al file .uproject del tuo progetto.
#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);
}