オーディオのインポート
実行時にオーディオをインポートするプロセスは、以下の手順に分けられます:
- Runtime Audio Importer を作成する。
- 必要なデリゲート(OnProgress と OnResult)をバインドする。
- ファイルまたはバッファからオーディオをインポートする。
- OnResult デリゲートから取得したインポート済みの Sound Wave を再生する(詳細は こちら)。
Runtime Audio Importer と Sound Wave のインスタンスが早期にガベージコレクトされないように、これらを UPROPERTY()、TStrongObjectPtr、またはその他のオブジェクト破棄を防ぐ方法を用いて、明示的に変数に保持することを推奨します。
ストリーミングオーディオのインポート
リアルタイムキャプチャーやネットワークストリームなど、オーディオデータを段階的に受信するストリーミングシナリオでは、Streaming Sound Wave の使用を検討してください。この方法では、同じサウンドウェーブのバッファにオーディオデータを継続的に追加でき、ライブストリームや大容量ファイルの部分処理に適しています。詳細は Streaming Sound Wave のドキュ メント を参照してください。
サポートされているオーディオフォーマット
Runtime Audio Importer は、以下のオーディオフォーマットのインポートに対応しています:
- MP3 - MPEG-1/2/2.5 Audio Layer I/II/III
- WAV - Waveform Audio File Format
- FLAC - Free Lossless Audio Codec
- OGG VORBIS - Ogg コンテナ内の Vorbis 音声
- OGG OPUS - Ogg コンテナ内の Opus 音声
- BINK - Bink Audio
- RAW (PCM) - 非圧縮 Pulse-Code Modulation オーディオデータ(Int8, UInt8, Int16, UInt16, Int32, UInt32, Float32)
オーディオをインポートする際、フォーマットを明示的に指定するか、ファイル拡張子または内容に基づいた自動フォーマット検出を使用できます。
オーディオファイルの検索
特定のディレクトリを検索して、サポートされているオーディオファイルを探すことができます:
- Blueprint
- C++
URuntimeAudioUtilities::ScanDirectoryForAudioFiles(TEXT("C:/Folder/"), true,
FOnScanDirectoryForAudioFilesResultNative::CreateWeakLambda(this, [this](bool bSucceeded, const TArray<FString>& AudioFilePaths)
{
// Handle the result
}));
例
まず、Runtime Audio Importer オブジェクトを作成する必要があります。ガーベッジコレクタによって強参照として扱われるようにする必要があり、これは Blueprints で別の変数として配置することで実現できます。これにより、オブジェクトが早期に破棄されるのを防ぎます。
- Blueprint
- C++
// UPROPERTY() is used here to prevent the object from being prematurely garbage collected
UPROPERTY()
class URuntimeAudioImporterLibrary* Importer;
Importer = URuntimeAudioImporterLibrary::CreateRuntimeAudioImporter();
オーディオデータのインポート進捗を追跡するには、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);
});
オーディオデータのインポート処理が完了した通知を受け取り、生成されたサウンドウェーブの参照にアクセスするには、OnResult
(Blueprints)/ OnResultNative
(C++)デリゲートにバインドする必要があります。
また、ガーベッジコレクタによる予期しない早期のガーベッジコレクションを防ぐために、インポートされたサウンドウェーブが強参照として扱われるようにしてください。これは、Blueprints内で別の変数として保持することで実現できます。
- 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));
});
オーディオのインポートプロセスを開始するには、適切な関数を呼び出します。この関数は、圧縮および非圧縮のオーディオデータ形式の両方を処理できます。
- 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);
インポートプロセスが完了すると、OnResult
デリゲートを通じてインポートされたサウンド波を取得できます。