कैप्चर करने योग्य साउंड वेव
अवलोकन
एक कैप्चर करने योग्य साउंड वेव स्ट्रीमिंग साउंड वेव से ली गई है। यह माइक्रोफोन जैसे इनपुट डिवाइस से ऑडियो डेटा कैप्चर करने और उसे प्लेबैक करने का समर्थन करती है, जिसमें आयातित साउंड वेव के समान क्षमताएं शामिल हैं (रिवाइंडिंग, SoundCues में उपयोग, आदि)। आप बिना किसी सीमा के एक साथ ऑडियो कैप्चर और प्ले भी कर सकते हैं।
वॉइस एक्टिविटी डिटेक्शन (VAD) के लिए, इस पेज को देखें।
कैप्चर करने योग्य साउंड वेव iOS और Android पर कैप्चर शुरू होते ही स्वचालित रूप से माइक्रोफोन अनुमतियाँ मांगती है।
बेसिक उपयोग
कैप्चर करने योग्य साउंड वेव बनाना
सबसे पहले आपको एक कैप्चर करने योग्य साउंड वेव बनानी चाहिए।
- Blueprint
- C++
UCapturableSoundWave* CapturableSoundWave = UCapturableSoundWave::CreateCapturableSoundWave();
आपको कैप्चर करने योग्य ध्वनि तरंग को समय से पहले विनाश (जैसे कि ब्लूप्रिंट्स में इसे एक अलग वेरिएबल को असाइन करके या 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);
}