Я создаю кроссплатформенное приложение с игровым движком Unity , которое просто берет изображения и аудиофайлы ( .ogg ) из корзины, созданной с Amazon Simple Storage Service ( Amazon S3 ).У меня проблема с преобразованием аудиофайлов, представленных в байтах, в AudioClips.
Я уже пробовал решения по обеим ссылкам:
создать AudioClip из байта
Шумный аудиоклип после декодирования из base64
Но оба решения не решают мою проблему, после преобразования из байтов в массив сохраняется статический звук.
Другое решение, которое я попробовал, состоит в том, чтобы использовать UnityWebRequestMultimedia и извлекать аудио из URL, который есть у каждого объекта в корзине.Это решение работает только в автономной версии приложения (ПК, Linux, Mac OS).Когда я пытаюсь установить приложение на смартфоне с ОС Android в качестве ОС, UnityWebRequestMultimedia не отправляет запрос, и поэтому я снова пытаюсь преобразовать байты объекта, взятые из S3 , в аудиоклип.
Каждый аудиофайл на S3 - это файл .ogg со следующими свойствами:
//Method that takes the bytes of the audioclip
private AudioClip GetMediaBytesFromS3 (Amazon.Runtime.AmazonServiceResult<GetObjectRequest,GetObjectResponse> ServiceResult,string nameOfAudio)
{
//Take the bytes of the audio
byte[] mediaBytes = GetBytesFromMultimediaObject(ServiceResult);
//Make a float array
float[] floatMediaBytes = new float[mediaBytes.Length / 4];
for(int i=0;i<floatMediaBytes.Length; i++)
{
//Check if the architecture use the LittleEndian ordering of Bytes
if(BitConverter.IsLittleEndian)
{
Array.Reverse(mediaBytes,i*4,4);
}
floatMediaBytes[i] = ((float) BitConverter.ToInt16(mediaBytes,i*4)) / 0x80000000;
}
//Make a new audioclip
AudioClip clipAudio = AudioClip.Create(nameOfAudio,floatMediaBytes.Length,1,16000,false);
//See if the data are set
if(clipAudio.SetData(floatMediaBytes,28))
{
return clipAudio;
}
return null;
}
Я просто хочу, чтобы звук воспроизводился правильно без статического шума.