кода для работы, однако он не рабочий, может кто-то помочь?
#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 в своей логике
// ...
}
сначала надо основы языка выучить прежде чем лезть в нейросети
А про какие нейросети речь? Чел же просто хочет звук загрузить
Да, мне нужно загрузить файл.
код написала нейронка
Ты по почерку что ли понял?
Ну естественно - мне у Вас надо было спросить? Или вначале погуглить вопрос и спросить у нейронки? Ты уж определись, человек должен вначале гуглить и искать инфу в открытых источниках или сразу народ задрачивать простыми вопросами? Я стараюсь гуглить и сам разбираться никого не беспокоя.
Ну раз тебя код из из нейронки бесит - прислать тот же образец с форума эпиков?
Ну он на самом деле по факту все написал. Как ты собираешься допиливать это, если самого базового не знать?
Ну лови https://forums.unrealengine.com/t/playing-sound-wave-from-code/1207063 Он то же не работает и ошибки те же
Не не нужно допиливать, мне нужно получить информацию из файла. Дальше то как раз у меня проблем нет - с микрофона у меня все работает
та меня ничего не бесит, я не тебе овтечал)
Ну окей - я тебе прислал образец с форума, написанный человеком - проблему решить сможешь? Если нет, то харе срач разводить
Кстати не такой код. Там копирует в память аргументы в другом порядке, а в программировании так не радовать
У меня ошибка не в порядке загрузок аргументов, а в том, что у меня отсутсвуют те операторы, которые у людей есть и работают. Я же скрин с ошибками выложил.
Скрин с ошибками не сами ошибки*
С какими ошибками? Мне надо было прислать лог с надписью - не найден символ? И что оно даст? Посмотри пожалуйста скрин - все вопросы отпадут
Эх, сколько открытий тебя впереди ожидает, удачи могу только пожелать)
Ясно, спасибо. Помощь была конструктивна. Отдельное спасибо за ссылку на доки. Нахера столько снобизма после сообщения одного не самого умного члена? Канала, естественно. Когда тут новички или те, кто не разбирались задавали простые вопросы - ну как бы я помогал. Что за херня, ребят? Ни кто из вас не сталкивался с проблемами в 11 часов вечера? Спасибо большое за помощь
Если бы ты немного подумал, то дошëл бы до того, что закинул бы эту ошибку в ту же самую нейросеть и дальше бы разбирался
А в голову не приходит, что я УЖЕ это сделал. Конкретный ответ есть? Нет? Ну тогда от флуда лучше не станет. Я тут помогал, если надо было и помогать буду дальше. А вот эту херню читать - мне оно нахер не надо в 12 часов ночи. Спасибо за помощь. Было конструктивно
Может заголовочный файл попробовать добавить #include "Serialization/BulkData.h"
Эм, зачем вообще смотреть какого англоязычного дядю уж если на то пошло, если есть уже давно качественный русскоязычный курс
Подскажите, пожалуйста, на какой версии движка Вы пытаетесь это делать? На форуме указано, что это для версии 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
Спасибо! Да, рознятся даже от версий движка и там много нюансов с дальнейшей работой. Я сейчас провожу R&D - поэтому мне без разницы было какой метод использовать )) Дальше буду уже смотреть, если тесты покажут нормальный результат
Обсуждают сегодня