ऑडियो आयात करें
अवलोकन
रनटाइम पर ऑडियो आयात करने की प्रक्रिया को कई चरणों में विभाजित किया जा सकता है:
- एक 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 (Blueprints) / 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 डेलिगेट से बाइंड करें
ऑडियो डेटा आयात प्रक्रिया पूर्ण होने पर सूचित होने और परिणामी साउंड वेव के संदर्भ तक पहुंचने के लिए, आपको OnResult (Blueprints) / 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));
});
गार्बेज कलेक्टर द्वारा आयात की गई साउंड वेव को एक स्ट्रॉन्ग रेफरेंस के रूप में ट्रीट करना सुनिश्चित करें ताकि अनचाही समय से पहले गार्बेज कलेक्शन को रोका जा सके। यह Blueprints में इसे एक अलग वेरिएबल के रूप में रखकर किया जा सकता है।
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 फ़ाइल में जोड़ा है।
#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);
}