Импорт аудио
Обзор
Процесс импорта аудио во время выполнения можно разбить на несколько этапов:
- Создание Runtime Audio Importer
- Привязка к необходимым делегатам (OnProgress и OnResult)
- Импорт аудио из файла или буфера
- Воспроизведение импортированного Sound Wave, полученного из делегата OnResult (подробнее здесь)
Убедитесь, что экземпляры Runtime Audio Importer и Sound Wave не будут преждевременно удалены сборщиком мусора, сохраняя на них жёсткую ссылку. Это можно сделать, присвоив их отдельным переменным с использованием UPROPERTY(), TStrongObjectPtr или любого другого метода, предотвращающего уничтожение объекта.
Поддерживаемые аудиоформаты
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) |
При импорте аудио вы можете явно указать формат или использовать автоматическое определение формата на основе расширения файла или его содержимого.
Потоковый импорт аудио
Для сценариев потоковой передачи, где аудиоданные поступают постепенно (например, с сервера, в реальном времени или из сетевых потоков), рассмотрите использование Streaming Sound Waves.
Этот метод предоставляет возможность непрерывного добавления аудиоданных в буфер одного и того же Sound Wave, что делает его подхо дящим для живых трансляций или больших файлов, обрабатываемых по частям. Подробнее см. в документации 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
(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);
});
Это позволит вам отслеживать прогресс и, например, реализовать экран загрузки.