ऑडियो आयात करें
अवलोकन
रनटाइम पर ऑडियो आयात करने की प्रक्रिया को कई चरणों में विभाजित किया जा सकता है:
- एक Runtime Audio Importer बनाएं
- आवश्यक डेलीगेट्स (OnProgress और OnResult) से बाइंड करें
- फाइल या बफर से ऑडियो आयात करें
- OnResult डेलीगेट से प्राप्त आयात की गई साउंड वेव चलाएं (अधिक जानकारी यहाँ उपलब्ध है)
सुनिश्चित करें कि Runtime Audio Importer और साउंड वेव इंस्टेंसेस समय से पहले गार्बेज कलेक्ट नहीं हो जाते हैं, उन्हें UPROPERTY(), TStrongObjectPtr, या किसी अन्य विधि का उपयोग करके अलग-अलग वेरिएबल्स में असाइन करके हार्ड रेफरेंस बनाए रखें जो ऑब्जेक्ट को नष्ट होने से रोकता है।
समर्थित ऑडियो फॉर्मेट्स
Runtime Audio Importer निम्नलिखित ऑडियो फॉर्मेट्स के आयात का समर्थन करता है:
फॉर्मेट | विवरण |
---|---|
MP3 | MPEG-1/2/2.5 ऑडियो लेयर I/II/III |
WAV | वेवफॉर्म ऑडियो फाइल फॉर्मेट |
FLAC | फ्री लॉसलेस ऑडियो कोडेक |
OGG VORBIS | वोर्बिस ऑडियो के साथ ओग कंटेनर |
OGG OPUS | ओपस ऑडियो के साथ ओग कंटेनर |
BINK | बिंक ऑडियो |
RAW (PCM) | अनकंप्रेस्ड पल्स-कोड मॉड्यूलेशन ऑडियो डेटा (Int8, UInt8, Int16, UInt16, Int32, UInt32, Float32) |
ऑडियो आयात करते समय, आप या तो फॉर्मेट को स्पष्ट रूप से निर्दिष्ट कर सकते हैं या फाइल एक्सटेंशन या कंटेंट के आधार पर स्वचालित फॉर्मेट डिटेक्शन का उपयोग कर सकते हैं।
स् ट्रीमिंग ऑडियो आयात
स्ट्रीमिंग परिदृश्यों के लिए जहां ऑडियो डेटा वृद्धिशील रूप से प्राप्त होता है (जैसे, सर्वर से, रियल-टाइम कैप्चर, या नेटवर्क स्ट्रीम्स), स्ट्रीमिंग साउंड वेव्स का उपयोग करने पर विचार करें।
यह विधि एक ही साउंड वेव के बफर में ऑडियो डेटा को लगातार जोड़ने का एक निरंतर तरीका प्रदान करती है, जो इसे लाइव स्ट्रीम्स या बड़ी फाइलों के लिए उपयुक्त बनाती है जो चंक्स में प्रोसेस की जाती हैं। अधिक जानकारी के लिए स्ट्रीमिंग साउंड वेव डॉक्युमेंटेशन देखें।
बेसिक इम्प्लीमेंटेशन स्टेप्स
1. Runtime Audio Importer बनाएं
सबसे पहले, आपको एक Runtime Audio Importer ऑब्जेक्ट बनाने की आवश्यकता है। आपको यह सुनिश्चित करना चाहिए कि यह गार्बेज कलेक्टर द्वारा एक स्ट्रॉन्ग रेफरेंस के रूप में माना जाता है।
- Blueprint
- C++
// UPROPERTY() is used here to prevent the object from being prematurely garbage collected
UPROPERTY()
class URuntimeAudioImporterLibrary* Importer;
Importer = URuntimeAudioImporterLibrary::CreateRuntimeAudioImporter();
2. OnProgress डेलिगेट से बाइंड करें
ऑडियो डेटा आयात की प्रगति को ट्रैक करने के लिए, आप OnProgress
(ब्लूप्रिंट्स) / OnProgressNative
(C++) डेलिगेट से बाइंड कर सकते हैं।
- Blueprint
- C++
// Assuming Importer is a UE reference to a URuntimeAudioImporterLibrary object
// AddWeakLambda is used just as an example. You can use any other method to bind the delegate, such as AddUObject, AddUFunction, etc.
Importer->OnProgressNative.AddWeakLambda(this, [](int32 Percentage)
{
UE_LOG(LogTemp, Log, TEXT("Import progress: %d"), Percentage);
});
यह आपको प्रगति की निगरानी करने और, उदाहरण के लिए, एक लोडिंग स्क्रीन लागू करने की अनुमति देगा।
3. ऑनरिजल्ट डेलिगेट से बाइंड करे ं
ऑडियो डेटा आयात प्रक्रिया पूर्ण होने पर सूचित होने और परिणामी साउंड वेव के संदर्भ तक पहुंचने के लिए, आपको OnResult
(ब्लूप्रिंट्स) / OnResultNative
(C++) डेलिगेट से बाइंड करना होगा।
- Blueprint
- C++
// Assuming Importer is a UE reference to a URuntimeAudioImporterLibrary object
// AddWeakLambda is used just as an example. You can use any other method to bind the delegate, such as AddUObject, AddUFunction, etc.
Importer->OnResultNative.AddWeakLambda(this, [](URuntimeAudioImporterLibrary* Importer, UImportedSoundWave* ImportedSoundWave, ERuntimeImportStatus Status)
{
UE_LOG(LogTemp, Log, TEXT("Import result: %s"), *UEnum::GetValueAsString(Status));
});
सुनिश्चित करें कि आयातित साउंड वेव को गार्बेज कलेक्टर द्वारा एक स्ट्रॉन्ग रेफरेंस के रूप में ट्रीट किया जाता है ताकि अवांछित समय से पहले गार्बेज कलेक्शन को रोका जा सके। यह ब्लूप्रिंट्स में इसे एक अलग वेरिएबल के रूप में प्लेस करके किया जा सकता है।
4. ऑडियो इम्पोर्ट शुरू करें
संबंधित फंक्शन को कॉल करके ऑडियो इम्पोर्ट प्रोसेस शुरू करें, जो कंप्रेस्ड और अनकंप्रेस्ड दोनों ऑडियो डेटा फॉर्मेट्स को हैंडल कर सकता है।
- Blueprint
- C++
// Assuming Importer is a UE reference to a URuntimeAudioImporterLibrary object
// Import audio from a file
Importer->ImportAudioFromFile(TEXT("C:/Folder/AudioFile.mp3"), ERuntimeAudioFormat::Auto);
// Import audio from a buffer
TArray<uint8> AudioData = ...; // Fill the array with your audio data
Importer->ImportAudioFromBuffer(MoveTemp(AudioData), ERuntimeAudioFormat::OggVorbis);
// Import audio from a RAW file
Importer->ImportAudioFromRAWFile(TEXT("C:/Folder/AudioFile.raw"), ERuntimeRAWAudioFormat::Int8, 44100, 2);
// Import audio from a RAW buffer
TArray<uint8> RAWBuffer = ...; // Fill the array with your PCM int 16-bit audio data
Importer->ImportAudioFromRAWBuffer(MoveTemp(RAWBuffer), ERuntimeRAWAudioFormat::Int16, 44100, 2);
उपयोगिता कार्य
ऑडियो फाइलें ढूँढना
आप समर्थित ऑडियो फाइलों के लिए एक डायरेक्टरी को स्कैन कर सकते हैं:
- Blueprint
- C++
URuntimeAudioUtilities::ScanDirectoryForAudioFiles(TEXT("C:/Folder/"), true,
FOnScanDirectoryForAudioFilesResultNative::CreateWeakLambda(this, [this](bool bSucceeded, const TArray<FString>& AudioFilePaths)
{
// Handle the result
}));
पूर्ण उदाहरण
ऑडियो आयात करने के लिए यहां एक पूर्ण कार्यान्वयन उदाहरण दिया गया है:
- Blueprint
- C++
यह एक फ़ाइल से ऑडियो आयात करने के लिए एक बेसिक कोड उदाहरण है।
यह उदाहरण EXAMPLEMODULE
मॉड्यूल के भीतर UImportAudioClassExample
क्लास में स्थित ImportAudioExample
फ़ंक्शन का उपयोग करता है।
उदाहरण को सफलतापूर्वक चलाने के लिए, RuntimeAudioImporter
मॉड्यूल को .Build.cs फ़ाइल में PublicDependencyModuleNames
या PrivateDependencyModuleNames
में, साथ ही अपने प्रोजेक्ट की .uproject फ़ाइल में जोड़ना सुनिश्चित करें।
(Note: I've maintained all technical terms in English as requested, including "RuntimeAudioImporter", "PublicDependencyModuleNames", "PrivateDependencyModuleNames", ".Build.cs", and ".uproject" while translating the surrounding Hindi text. The markdown structure, tabs, and image reference remain unchanged.)
#pragma once
#include "CoreMinimal.h"
#include "UObject/Object.h"
#include "ImportAudioClassExample.generated.h"
UCLASS(BlueprintType)
class EXAMPLEMODULE_API UImportAudioClassExample : public UObject
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable)
void ImportAudioExample();
private:
// Please pay attention to making the RuntimeAudioImporter a hard reference, such as using UPROPERTY(), to prevent it from being prematurely garbage collected
UPROPERTY()
class URuntimeAudioImporterLibrary* RuntimeAudioImporter;
};
#include "ImportAudioClassExample.h"
#include "RuntimeAudioImporterLibrary.h"
void UImportAudioClassExample::ImportAudioExample()
{
RuntimeAudioImporter = URuntimeAudioImporterLibrary::CreateRuntimeAudioImporter();
if (!IsValid(RuntimeAudioImporter))
{
UE_LOG(LogTemp, Error, TEXT("Failed to create audio importer"));
return;
}
RuntimeAudioImporter->OnProgressNative.AddWeakLambda(this, [](int32 Percentage)
{
UE_LOG(LogTemp, Log, TEXT("Audio importing percentage: %d"), Percentage);
});
RuntimeAudioImporter->OnResultNative.AddWeakLambda(this, [this](URuntimeAudioImporterLibrary* Importer, UImportedSoundWave* ImportedSoundWave, ERuntimeImportStatus Status)
{
if (Status == ERuntimeImportStatus::SuccessfulImport)
{
UE_LOG(LogTemp, Warning, TEXT("Successfully imported audio with sound wave %s"), *ImportedSoundWave->GetName());
// Here you can handle ImportedSoundWave playback, like "UGameplayStatics::PlaySound2D(GetWorld(), ImportedSoundWave);"
}
else
{
UE_LOG(LogTemp, Error, TEXT("Failed to import audio"));
}
RuntimeAudioImporter = nullptr;
});
RuntimeAudioImporter->ImportAudioFromFile(TEXT("C:/Folder/Example.mp3"), ERuntimeAudioFormat::Auto);
}