我正在使用游戏引擎 Unity 开发一个跨平台应用程序,该应用程序简单地从用<创建的存储桶中提取图像和音频文件( .ogg )。 strong> Amazon Simple Storage Service ( Amazon S3 )。将以字节表示的音频文件转换为AudioClips时遇到问题。
我已经尝试了两个链接的解决方案:
Noisy audio clip after decoding from base64
但这两种解决方案都不能解决我的问题,从字节到数组的转换过程之后仍然存在静态声音。
我尝试过的另一种解决方案是使用 UnityWebRequestMultimedia ,并从存储桶中每个对象所具有的url中获取音频。该解决方案仅适用于应用程序的独立版本(PC,Linux,Mac OS)。当我在以Android为操作系统的智能手机上尝试应用程序时,UnityWebRequestMultimedia不会发送请求,这就是为什么我再次尝试将从 S3 获取的对象的字节转换为audioclip。
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;
}
我只是希望音频能够正确播放而没有静电噪声。
答案 0 :(得分:0)
只要数据存储在未压缩的原始PCM流中,您所做的一切就可以正常运行-有所有理由可以正常工作。如果不是,则与从JPG文件读取字节并希望在其中找到颜色的类型相同。您将需要先将数据输入适当的解码器
快速的Google允许我找到此链接 https://archive.codeplex.com/?p=nvorbis
我自己没有使用过它,但是看起来很合适。或者,您可以链接到.dll并使用一些PInvokes在非托管端进行解码