Capturable Sound Wave
Descripción general
Una onda de sonido capturable se deriva de la onda de sonido de streaming. Admite la captura de datos de audio desde dispositivos de entrada como un micrófono y su reproducción, con las mismas capacidades que una onda de sonido importada (incluyendo rebobinado, uso en SoundCues, etc.). Incluso puedes capturar y reproducir audio simultáneamente sin limitaciones.
Para la Detección de Actividad de Voz (VAD), consulta esta página.
La onda de sonido capturable solicita automáticamente permisos de micrófono en iOS y Android una vez que se inicia la captura.
Uso básico
Crear una Capturable Sound Wave
Primero debes crear una capturable sound wave.
- Blueprint
- C++

UCapturableSoundWave* CapturableSoundWave = UCapturableSoundWave::CreateCapturableSoundWave();
Debes tratar la onda de sonido capturable como una referencia fuerte para evitar su destrucción prematura (por ejemplo, asignándola a una variable separada en Blueprints o usando UPROPERTY() en C++).
Obtención de Dispositivos de Entrada Disponibles
Para usar esta función, primero necesitas obtener todos los dispositivos de entrada de audio disponibles que se pueden usar para la captura.
- Blueprint
- C++

UCapturableSoundWave::GetAvailableAudioInputDevices(FOnGetAvailableAudioInputDevicesResultNative::CreateWeakLambda(this, [](const TArray<FRuntimeAudioInputDeviceInfo>& AvailableDevices)
{
// Handle the result
}));
Iniciar y Detener la Captura
Después de obtener los dispositivos disponibles, puedes comenzar a capturar datos de audio desde el dispositivo de entrada y detenerlo cuando sea necesario.
- 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 es el índice del dispositivo en el array de dispositivos disponibles obtenido en el paso anterior. Para usar el dispositivo de entrada de audio predeterminado, pasa -1 en Blueprints o Audio::DefaultDeviceIndex en C++ (que equivale a INDEX_NONE), ya que a veces el índice cero no es el dispositivo predeterminado.
Verificación del Estado de Captura
Puedes verificar si la onda de sonido está capturando audio actualmente:
- Blueprint
- C++

// Assuming CapturableSoundWave is a reference to a UCapturableSoundWave object
bool bIsCapturing = CapturableSoundWave->IsCapturing();
Funciones Avanzadas
Silenciar y Reactivar la Captura
Puedes elegir silenciar o reactivar la captura de sonido para evitar la acumulación de datos de audio sin interrumpir el proceso de captura.
- Blueprint
- C++

// Assuming CapturableSoundWave is a UE reference to a UCapturableSoundWave object (or its derived type)
CapturableSoundWave->ToggleMute(true);
UE 5.3 y más reciente: Iniciar y detener la captura ya no causa tirones, por lo que ToggleMute tiene el mismo efecto que StartCapture/StopCapture. Es posible que no necesites usar ToggleMute en absoluto para la optimización del rendimiento.
UE 5.2 y anteriores: Iniciar la captura mediante StartCapture puede causar pequeños tirones. En estas versiones, se recomienda usar ToggleMute para cambiar frecuentemente la captura entre activada y desactivada. Primero debes iniciar la captura en sí durante un momento menos crítico (como una pantalla de carga), y luego usar silenciar/activar sonido para controlar cuándo se acumulan realmente los datos de audio.
Si estás usando UE 5.2 o anterior y quieres eliminar las pequeñas congelaciones, considera iniciar la captura durante un momento en el que esta congelación podría ser insignificante. Por ejemplo, podrías iniciar la captura durante la pantalla de carga de tu juego, silenciar la onda de sonido capturable justo después, y luego activar el sonido de la onda de sonido capturable cuando sea necesario para capturar datos de audio sin tirones.
Ejemplo Completo
Aquí tienes un ejemplo de implementación completo del uso de una onda de sonido capturable:
- Blueprint
- C++

Este es un ejemplo de código básico para capturar datos de audio desde un dispositivo de entrada (micrófono) usando una onda de sonido capturable.
El ejemplo usa la función CaptureAudioExample ubicada en la clase UCaptureAudioClassExample dentro del módulo EXAMPLEMODULE.
Para ejecutar el ejemplo con éxito, asegúrate de agregar el módulo RuntimeAudioImporter a PublicDependencyModuleNames o PrivateDependencyModuleNames en el archivo .Build.cs, así como al archivo .uproject de tu proyecto.
#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);
}