Мне нужно загрузить wav файл для дальнейшей работы. Вот пример

кода для работы, однако он не рабочий, может кто-то помочь?

#include "Engine.h"
#include "Sound/SoundWave.h"

void LoadWavFile(const FString& FilePath)
{
// Создаем экземпляр SoundWave
USoundWave* SoundWave = NewObject<USoundWave>(USoundWave::StaticClass());

// Загружаем WAV файл
TArray<uint8> WavData;
if (!FFileHelper::LoadFileToArray(WavData, *FilePath))
{
UE_LOG(LogTemp, Error, TEXT("Failed to load WAV file: %s"), *FilePath);
return;
}

// Задаем параметры SoundWave
SoundWave->SoundGroup = ESoundGroup::SOUNDGROUP_Default;
SoundWave->NumChannels = 2;
SoundWave->RawData.Lock(LOCK_READ_WRITE);
FMemory::Memcpy(SoundWave->RawData.GetData(), WavData.GetData(), WavData.Num());
SoundWave->RawData.Unlock();
SoundWave->SampleRate = 44100;
SoundWave->Duration = (float(WavData.Num()) / 2) / SoundWave->SampleRate;

// Добавляем SoundWave в ресурсы движка
const FStringAssetReference AssetRef(FilePath);
SoundWave->SetOuter(nullptr);
SoundWave->Rename(*AssetRef.ToString(), nullptr, REN_NonTransactional | REN_ForceNoResetLoaders);
UAssetManager::GetStreamableManager().LoadAsset(AssetRef);

// Используем SoundWave в своей логике
// ...
}

28 ответов

36 просмотров

сначала надо основы языка выучить прежде чем лезть в нейросети

Anton Lomanov
сначала надо основы языка выучить прежде чем лезть...

А про какие нейросети речь? Чел же просто хочет звук загрузить

Anton Lomanov
код написала нейронка

Ты по почерку что ли понял?

Дмитрий-Фондомакин Автор вопроса
Anton Lomanov
код написала нейронка

Ну естественно - мне у Вас надо было спросить? Или вначале погуглить вопрос и спросить у нейронки? Ты уж определись, человек должен вначале гуглить и искать инфу в открытых источниках или сразу народ задрачивать простыми вопросами? Я стараюсь гуглить и сам разбираться никого не беспокоя.

Дмитрий-Фондомакин Автор вопроса
Anton Lomanov
код написала нейронка

Ну раз тебя код из из нейронки бесит - прислать тот же образец с форума эпиков?

Дмитрий Фондомакин
Ну естественно - мне у Вас надо было спросить? Или...

Ну он на самом деле по факту все написал. Как ты собираешься допиливать это, если самого базового не знать?

Дмитрий-Фондомакин Автор вопроса
Anton Lomanov
код написала нейронка

Ну лови https://forums.unrealengine.com/t/playing-sound-wave-from-code/1207063 Он то же не работает и ошибки те же

Дмитрий-Фондомакин Автор вопроса
Vovcha
Ну он на самом деле по факту все написал. Как ты с...

Не не нужно допиливать, мне нужно получить информацию из файла. Дальше то как раз у меня проблем нет - с микрофона у меня все работает

Дмитрий-Фондомакин Автор вопроса
Anton Lomanov
типа

Ну окей - я тебе прислал образец с форума, написанный человеком - проблему решить сможешь? Если нет, то харе срач разводить

Дмитрий Фондомакин
Ну лови https://forums.unrealengine.com/t/playing...

Кстати не такой код. Там копирует в память аргументы в другом порядке, а в программировании так не радовать

Дмитрий-Фондомакин Автор вопроса
Vovcha
Кстати не такой код. Там копирует в память аргумен...

У меня ошибка не в порядке загрузок аргументов, а в том, что у меня отсутсвуют те операторы, которые у людей есть и работают. Я же скрин с ошибками выложил.

Скрин с ошибками не сами ошибки*

Дмитрий-Фондомакин Автор вопроса
NoreX
Скрин с ошибками не сами ошибки*

С какими ошибками? Мне надо было прислать лог с надписью - не найден символ? И что оно даст? Посмотри пожалуйста скрин - все вопросы отпадут

Дмитрий Фондомакин
С какими ошибками? Мне надо было прислать лог с на...

Эх, сколько открытий тебя впереди ожидает, удачи могу только пожелать)

Дмитрий-Фондомакин Автор вопроса
NoreX
Эх, сколько открытий тебя впереди ожидает, удачи м...

Ясно, спасибо. Помощь была конструктивна. Отдельное спасибо за ссылку на доки. Нахера столько снобизма после сообщения одного не самого умного члена? Канала, естественно. Когда тут новички или те, кто не разбирались задавали простые вопросы - ну как бы я помогал. Что за херня, ребят? Ни кто из вас не сталкивался с проблемами в 11 часов вечера? Спасибо большое за помощь

Дмитрий Фондомакин
Ясно, спасибо. Помощь была конструктивна. Отдельно...

Если бы ты немного подумал, то дошëл бы до того, что закинул бы эту ошибку в ту же самую нейросеть и дальше бы разбирался

Дмитрий-Фондомакин Автор вопроса
NoreX
Если бы ты немного подумал, то дошëл бы до того, ч...

А в голову не приходит, что я УЖЕ это сделал. Конкретный ответ есть? Нет? Ну тогда от флуда лучше не станет. Я тут помогал, если надо было и помогать буду дальше. А вот эту херню читать - мне оно нахер не надо в 12 часов ночи. Спасибо за помощь. Было конструктивно

Дмитрий Фондомакин
С какими ошибками? Мне надо было прислать лог с на...

Может заголовочный файл попробовать добавить #include "Serialization/BulkData.h"

Сергей Telegram
Может заголовочный файл попробовать добавить #incl...

Эм, зачем вообще смотреть какого англоязычного дядю уж если на то пошло, если есть уже давно качественный русскоязычный курс

Дмитрий Фондомакин
У меня ошибка не в порядке загрузок аргументов, а ...

Подскажите, пожалуйста, на какой версии движка Вы пытаетесь это делать? На форуме указано, что это для версии 4.25, и в этой версии SoundWave->RawData это структура типа FByteBulkDataOld, которая наследуется от FUntypedBulkData, у которой есть данные функции. На 5 движке SoundWave->RawData это структура типа FEditorBulkData, там этих функций нет. Если у Вас версия 5, то нужно искать другой подход, логика с приведённого вопроса на форуме не сработает.

Дмитрий-Фондомакин Автор вопроса
Никита Аксёнов
Подскажите, пожалуйста, на какой версии движка Вы ...

Да, я уже разобрался, что в версии 5+ не работает. Задачу уже решил другим подходом. Спасибо большое за помощь. 👍

Дмитрий-Фондомакин Автор вопроса
Никита Аксёнов
Подскажите, пожалуйста, на какой версии движка Вы ...

Вот такая инструкция сработала Для получения WAVEHDR из файла WAV в Unreal Engine, вы можете использовать стандартные функции Windows API. Вот пример кода: #include "Windows/AllowWindowsPlatformTypes.h" #include <mmsystem.h> #include "Windows/HideWindowsPlatformTypes.h" void LoadWavFile(const FString& FilePath, WAVEHDR& OutWAVEHDR) { // Открываем файл WAV FILE* FileHandle; if (_wfopen_s(&FileHandle, FilePath.GetCharArray().GetData(), L"rb") != 0) { UE_LOG(LogTemp, Error, TEXT("Failed to open WAV file: %s"), *FilePath); return; } // Читаем заголовок файла WAV WAVEFORMATEX WaveFormat; DWORD DataSize; fseek(FileHandle, 20, SEEK_SET); fread(&WaveFormat, sizeof(WAVEFORMATEX), 1, FileHandle); fseek(FileHandle, 4, SEEK_CUR); fread(&DataSize, sizeof(DWORD), 1, FileHandle); // Создаем буфер для аудио данных BYTE* DataBuffer = (BYTE*) malloc(DataSize); fread(DataBuffer, 1, DataSize, FileHandle); // Инициализируем структуру WAVEHDR OutWAVEHDR.lpData = (LPSTR) DataBuffer; OutWAVEHDR.dwBufferLength = DataSize; OutWAVEHDR.dwBytesRecorded = 0; OutWAVEHDR.dwUser = 0; OutWAVEHDR.dwFlags = 0; OutWAVEHDR.dwLoops = 0; OutWAVEHDR.lpNext = NULL; OutWAVEHDR.reserved = 0; // Закрываем файл WAV fclose(FileHandle); } Вызовите эту функцию, передав ей путь к вашему WAV файлу (FilePath) и структуру WAVEHDR, в которую будут загружены данные WAV. FString FilePath = TEXT("путь\\к\\wav\\файлу.wav"); WAVEHDR WaveHeader; LoadWavFile(FilePath, WaveHeader); // Используйте WaveHeader по вашему усмотрению Обратите внимание, что в этом примере используются функции Windows API для чтения файлов WAV, поэтому этот код будет работать только на платформе Windows.

Привет, еще актуально? В стандартной звуковой волне используются разные буферы, RawPCMData, RawData, CookedPlatformData и стриминговый. Но их поведение разнится в разных версиях движка, и не надежно, поэтому я рекомендую лучше реализовать через свой буфер, и через процедурную звуковую волну, выдавая аудиоданные через OnGeneratePCMAudio метод, как здесь: https://github.com/gtreshchev/RuntimeAudioImporter/blob/main/Source/RuntimeAudioImporter/Private/Sound/ImportedSoundWave.cpp#L123

Дмитрий-Фондомакин Автор вопроса
Georgy Treshchev
Привет, еще актуально? В стандартной звуковой волн...

Спасибо! Да, рознятся даже от версий движка и там много нюансов с дальнейшей работой. Я сейчас провожу R&D - поэтому мне без разницы было какой метод использовать )) Дальше буду уже смотреть, если тесты покажут нормальный результат

Похожие вопросы

Обсуждают сегодня

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта