Capturable Sound Wave
अवलोकन
एक कैप्चर करने योग्य साउंड वेव स्ट्रीमिंग साउंड वेव से ली गई है। यह माइक्रोफ़ोन जैसे इनपुट डिवाइस से ऑडियो डेटा कैप्चर करने और उसे प्लेबैक करने का समर्थन करती है, जिसमें आयातित साउंड वेव के समान क्षमताएं शामिल हैं (रिवाइंडिंग, SoundCues में उपयोग आदि)। आप बिना किसी सीमा के एक साथ ऑडियो कैप्चर और प्ले भी कर सकते हैं।
वॉइस एक्टिविटी डिटेक्शन (VAD) के लिए, इस पृष्ठ को देखें।
कैप्चर करने योग्य साउंड वेव iOS और Android पर कैप्चर शुरू होते ही स्वचालित रूप से माइक्रोफ़ोन अनुमतियाँ मांगती है।
बुनियादी उपयोग
एक कैप्चर करने योग्य साउंड वेव बनाना
सबसे पहले आपको एक कैप्चर करने योग्य साउंड वेव बनानी चाहिए।
- Blueprint
- C++

UCapturableSoundWave* CapturableSoundWave = UCapturableSoundWave::CreateCapturableSoundWave();
आपको कैप्चर करने योग्य ध्वनि तरंग को एक मजबूत संदर्भ के रूप में मानना चाहिए ताकि समय से पहले विनाश को रोका जा सके (उदाहरण के लिए, इसे Blueprints में एक अलग वेरिएबल को असाइन करके या C++ में UPROPERTY() का उपयोग करके)।
उपलब्ध इनपुट डिवाइस प्राप्त करना
इस सुविधा का उपयोग करने के लिए, आपको पहले सभी उपलब्ध ऑडियो इनपुट डिवाइस प्राप्त करने की आवश्यकता है जिनका उपयोग कैप्चरिंग के लिए किया जा सकता है।
- Blueprint
- C++

UCapturableSoundWave::GetAvailableAudioInputDevices(FOnGetAvailableAudioInputDevicesResultNative::CreateWeakLambda(this, [](const TArray<FRuntimeAudioInputDeviceInfo>& AvailableDevices)
{
// Handle the result
}));
कैप्चर शुरू करना और रोकना
उपलब्ध उपकरण प्राप्त करने के बाद, आप इनपुट डिवाइस से ऑडियो डेटा कैप्चर करना शुरू कर सकते हैं और आवश्यकता पड़ने पर इसे रोक सकते हैं।
- 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 उपलब्ध उपकरणों की सरणी में उस उपकरण का सूचकांक है जो पिछले चरण से प्राप्त हुआ था। डिफ़ॉल्ट ऑडियो इनपुट डिवाइस का उपयोग करने के लिए, Blueprints में -1 या C++ में Audio::DefaultDeviceIndex पास करें (जो INDEX_NONE के बराबर है), क्योंकि कभी-कभी शून्य सूचकांक डिफ़ॉल्ट डिवाइस नहीं होता है।
कैप्चर स्थिति की जाँच करना
आप जाँच सकते हैं कि क्या साउंड वेव वर्तमान में ऑडियो कैप्चर कर रहा है:
- Blueprint
- C++

// Assuming CapturableSoundWave is a reference to a UCapturableSoundWave object
bool bIsCapturing = CapturableSoundWave->IsCapturing();
उन्नत सुविधाएँ
कैप्चर को म्यूट और अनम्यूट करना
आप कैप्चर प्रक्रिया को बाधित किए बिना ऑडियो डेटा के संचय को रोकने के लिए ध्वनि कैप्चर को म्यूट या अनम्यूट करना चुन सकते हैं।
- Blueprint
- C++

// Assuming CapturableSoundWave is a UE reference to a UCapturableSoundWave object (or its derived type)
CapturableSoundWave->ToggleMute(true);
UE 5.3 और नए: कैप्चर शुरू करना और रोकना अब हिचकिचाहट का कारण नहीं बनता है, इसलिए ToggleMute का प्रभाव StartCapture/StopCapture के समान ही है। प्रदर्शन अनुकूलन के लिए आपको ToggleMute का उपयोग बिल्कुल भी नहीं करने की आवश्यकता हो सकती है।
UE 5.2 और पहले के: StartCapture के माध्यम से कैप्चर शुरू करने से मामूली हिचकिचाहट हो सकती है। इन संस्करणों में, कैप्चरिंग को बार-बार चालू और बंद करने के लिए ToggleMute का उपयोग करने की अनुशंसा की जाती है। आपको पहले कैप्चर को स्वयं कम महत्वपूर्ण समय (जैसे लोडिंग स्क्रीन) के दौरान शुरू करना चाहिए, और फिर यह नियंत्रित करने के लिए म्यूट/अनम्यूट का उपयोग करना चाहिए कि ऑडियो डेटा वास्तव में कब संचित हो।
यदि आप UE 5.2 या पहले का उपयोग कर रहे हैं और मामूली फ्रीज को खत्म करना चाहते हैं, तो कैप्चर को ऐसे समय में शुरू करने पर विचार करें जब यह फ्रीज नगण्य हो सकता है। उदाहरण के लिए, आप अपने गेम की लोडिंग स्क्रीन के दौरान कैप्चर शुरू कर सकते हैं, उसके तुरंत बाद कैप्चर करने योग्य साउंड वेव को म्यूट कर सकते हैं, और फिर आवश्यकता पड़ने पर कैप्चर करने योग्य साउंड वेव को अनम्यूट कर सकते हैं ताकि बिना किसी हिचकिचाहट के ऑडियो डेटा कैप्चर किया जा सके।
पूर्ण उदाहरण
यहाँ एक कैप्चर करने योग्य साउंड वेव का उपयोग करने का एक पूर्ण कार्यान्वयन उदाहरण है:
- Blueprint
- C++

यह एक कैप्चर करने योग्य साउंड वेव का उपयोग करके इनपुट डिवाइस (माइक्रोफोन) से ऑडियो डेटा कैप्चर करने के लिए एक बुनियादी कोड उदाहरण है।
उदाहरण EXAMPLEMODULE मॉड्यूल के भीतर UCaptureAudioClassExample वर्ग में स्थित CaptureAudioExample फ़ंक्शन का उपयोग करता है।
उदाहरण को सफलतापूर्वक चलाने के लिए, सुनिश्चित करें कि आपने RuntimeAudioImporter मॉड्यूल को .Build.cs फ़ाइल में PublicDependencyModuleNames या PrivateDependencyModuleNames में, साथ ही अपने प्रोजेक्ट की .uproject फ़ाइल में जोड़ा है।
#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);
}