ऑडियो आयात करें
अवलोकन
रनटाइम पर ऑडियो आयात करने की प्रक्रिया को कई चरणों में विभाजित किया जा सकता है:
- एक रनटाइम ऑडियो इम्पोर्टर बनाएं
- आवश्यक डेलीगेट्स (OnProgress और OnResult) से बाइंड करें
- एक फ़ाइल या बफ़र से ऑडियो आयात करें
- OnResult डेलीगेट से प्राप्त आयातित साउंड वेव को चलाएं (अधिक जानकारी यहाँ है)
सुनिश्चित करें कि Runtime Audio Importer और Sound Wave दोनों इंस्टेंस समय से पहले गार्बेज कलेक्शन का शिकार न हों, उन्हें एक हार्ड रेफरेंस बनाए रखकर, जो UPROPERTY(), TStrongObjectPtr, या किसी अन्य विधि का उपयोग करके उन्हें अलग-अलग वेरिएबल्स को असाइन करके किया जा सकता है जो ऑब्जेक्ट को नष्ट होने से रोकता है।
समर्थित ऑडियो प्रारूप
Runtime Audio Importer निम्नलिखित ऑडियो प्रारूपों को आयात करने का समर्थन करता है:
| प्रारूप | विवरण |
|---|---|
| MP3 | MPEG-1/2/2.5 ऑडियो लेयर I/II/III |
| WAV | वेवफॉर्म ऑडियो फ़ाइल प्रारूप |
| FLAC | फ्री लॉसलेस ऑडियो कोडेक |
| OGG VORBIS | वोर्बिस ऑडियो के साथ ओग कंटेनर |
| OGG OPUS | ओपस ऑडियो के साथ ओग कंटेनर |
| BINK | Bink Audio |
| RAW (PCM) | अनकंप्रेस्ड पल्स-कोड मॉड्यूलेशन ऑडियो डेटा (Int8, UInt8, Int16, UInt16, Int32, UInt32, Float32) |
ऑडियो आयात करते समय, आप या तो प्रारूप को स्पष्ट रूप से निर्दिष्ट कर सकते हैं या फ़ाइल एक्सटेंशन या सामग्री के आधार पर स्वचालित प्रारूप पहचान का उपयोग कर सकते हैं।
स्ट्रीमिंग ऑडियो आयात
स्ट्रीमिंग परिदृश्यों के लिए जहां ऑडियो डेटा वृद्धिशील रूप से प्राप्त होता है (जैसे, किसी सर्वर से, रियल-टाइम कैप्चर, या नेटवर्क स्ट्रीम्स), Streaming Sound Waves का उपयोग करने पर विचार करें।
यह विधि एक ही साउंड वेव के बफ़र में ऑडियो डेटा जोड़ने का एक निरंतर तरीका प्रदान करती है, जो इसे लाइव स्ट्रीम या बड़ी फ़ाइलों के लिए उपयुक्त बनाती है जिन्हें चंक्स में प्रोसेस किया जाता है। अधिक विवरण के लिए Streaming Sound Wave दस्तावेज़ीकरण देखें।
बुनियादी कार्यान्वयन चरण
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 डेलिगेट से बाइंड करें
ऑडियो डेटा आयात प्रक्रिया पूरी होने पर सूचित होने और परिणामी साउंड वेव के संदर्भ तक पहुंचने के लिए, आपको 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 फ़ाइल में जोड़ा है।
#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);
}