स्ट्रीमिंग साउंड वेव
वॉइस एक्टिविटी डिटेक्शन (VAD) के लिए, इस पेज को देखें।
एक स्ट्रीमिंग साउंड वेव एक प्रकार का इम्पोर्टेड साउंड वेव है जो डायनामिक रूप से ऑडियो डेटा जोड़ने का सपोर्ट करता है, यहां तक कि प्लेबैक के दौरान भी। यह इम्पोर्टेड साउंड वेव की तरह ही फंक्शनैलिटी प्रदान करता है, जैसे रिवाइंडिंग, और इसे साउंडक्यूज़ आदि में इस्तेमाल किया जा सकता है।
स्ट्रीमिंग साउंड वेव बनाना
सबसे पहले आपको एक स्ट्रीमिंग साउंड वेव बनाना चाहिए। कृपया ध्यान दें कि आपको इसे एक स्ट्रॉंग रेफरेंस के रूप में ट्रीट करना चाहिए ताकि समय से पहले डिस्ट्रक्शन न हो (जैसे ब्लूप्रिंट्स में इसे एक अलग वेरिएबल में असाइन करके या C++ में UPROPERTY()
का उपयोग करके)।
- Blueprint
- C++
UStreamingSoundWave* StreamingSoundWave = UStreamingSoundWave::CreateStreamingSoundWave();
ध्वनि तरंग बजाना
आप फिर उस ध्वनि तरंग को बजा सकते हैं। हालांकि, अभी ऐसा करना आवश्यक नहीं है, आप बाद में ध्वनि तरंग बजाना शुरू कर सकते हैं।
ऑडियो डेटा का पूर्व-आवंटन
वैकल्पिक रूप से, आप ऑडियो डेटा (बाइट्स) को पूर्व-आवंटित कर सकते हैं ताकि हर बार नया ऑडियो डेटा जोड़ने पर पूरे PCM बफर को फिर से आवंटित करने से बचा जा सके।
- Blueprint
- C++
// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->PreAllocateAudioData(12582912, FOnPreAllocateAudioDataResultNative::CreateWeakLambda(this, [StreamingSoundWave](bool bSucceeded)
{
// Handle the result
}));
ऑडियो डेटा जोड़ना
मौजूदा बफर के अंत में ऑडियो डेटा जोड़ने के लिए, डायनामिक रूप से ऑडियो डेटा जोड़ने के लिए उपयुक्त फ़ंक्शन का उपयोग करें। प्लेबैक इन अपेंड्स के क्यू अनुक्रम का पालन करेगा।
- Blueprint
- C++
// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
// Example of appending encoded audio data
TArray<uint8> AudioData = ...; // Fill with audio data
StreamingSoundWave->AppendAudioDataFromEncoded(AudioData, ERuntimeAudioFormat::Auto);
// Or, if you have raw audio data
TArray<uint8> RawAudioData = ...; // Fill with raw audio data
StreamingSoundWave->AppendAudioDataFromRAW(RawAudioData, ERuntimeRAWAudioFormat::Float32, 44100, 2);
त्वरित ऑडियो प्लेबैक से बचना
अक्सर, जब आपको ऑडियो डेटा स्ट्रीम करने और एक साथ प्ले करने की आवश्यकता होती है, तो प्लेबैक से पहले थोड़ी देरी जोड़नी चाहिए ताकि बफर के बहुत तेजी से भरने के कारण त्वरित ऑडियो से बचा जा सके। आमतौर पर लगभग आधे सेकंड की देरी की सिफारिश की जाती है।
उदाहरण उपयोग
अंत में, आपका कार्यान्वयन इस तरह दिख सकता है:
- Blueprint
- C++
यह स्ट्रीमिंग साउंड वेव में ऑडियो डेटा जोड़ने के लिए एक बेसिक कोड उदाहरण है।
यह उदाहरण EXAMPLEMODULE
मॉड्यूल के भीतर UAppendAudioClassExample
क्लास में स्थित AppendAudioExample
फंक्शन का उपयोग करता है।
नोट: उदाहरण को सफलतापूर्वक चलाने के लिए, RuntimeAudioImporter
मॉड्यूल को .Build.cs फाइल में PublicDependencyModuleNames
या PrivateDependencyModuleNames
में, साथ ही अपने प्रोजेक्ट के .uproject फाइल में जोड़ना सुनिश्चित करें।
#pragma once
#include "CoreMinimal.h"
#include "UObject/Object.h"
#include "AppendAudioClassExample.generated.h"
UCLASS(BlueprintType)
class EXAMPLEMODULE_API UAppendAudioClassExample : public UObject
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable)
void AppendAudioExample();
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 UStreamingSoundWave* StreamingSoundWave;
};
#include "AppendAudioClassExample.h"
#include "Sound/StreamingSoundWave.h"
void UAppendAudioClassExample::AppendAudioExample()
{
// Create a streaming sound wave
StreamingSoundWave = UStreamingSoundWave::CreateStreamingSoundWave();
// Append audio data
TArray<uint8> StreamedAudioDataToAdd = ...; // Fill with audio data
StreamingSoundWave->AppendAudioDataFromEncoded(StreamedAudioDataToAdd, ERuntimeAudioFormat::Auto);
// Play the sound wave
UGameplayStatics::PlaySound2D(GetWorld(), StreamingSoundWave);
}
ऑन पॉप्युलेट ऑडियो स्टेट
OnPopulateAudioState डेलिगेट OnPopulateAudioData के समान कार्य करता है लेकिन पॉप्युलेट किए गए ऑडियो डेटा को प्रसारित नहीं करता है। यह तब उपयोगी हो सकता है जब आप ऑडियो डेटा के पॉप्युलेट होने को ट्रैक करना चाहते हैं बिना पॉप्युलेट किए गए ऑडियो डेटा की एक सरणी पास किए, जो प्रदर्शन में स ुधार कर सकता है।
- Blueprint
- C++
// Assuming StreamingSoundWave is a UE reference to a UStreamingSoundWave object (or its derived type, such as UCapturableSoundWave)
StreamingSoundWave->OnPopulateAudioStateNative.AddWeakLambda(this, [this]()
{
// Handle the result
});
PCM डेटा के साथ कार्य करना
प्लेबैक के दौरान PCM डेटा तक रियल-टाइम पहुंच के लिए, PCM डेटा हैंडलिंग देखें।