可以将字节数组转换为AudioClip吗?

问题描述 投票:1回答:1

我正在使用游戏引擎Unity制作一个跨平台应用程序,它只是从使用Amazon Simple Storage Service(Amazon S3)制作的存储桶中获取图像和音频文件(.ogg)。我将转换音频文件(以字节为单位)转换为AudioClip时遇到问题。

我已经尝试过两个链接的解决方案:

create AudioClip from byte

Noisy audio clip after decoding from base64

但是这两个解决方案都没有解决我的问题,转换过程之后仍然存在从字节到数组的静态声音。

我尝试的另一个解决方案是使用UnityWebRequestMultimedia并从每个对象在存储桶中的url中获取音频。此解决方案仅适用于应用程序的独立版本(PC,Linux,Mac OS)。当我在智能手机上尝试我的应用程序时,使用Android作为操作系统,UnityWebRequestMultimedia不会发送请求,这就是为什么我要再次尝试将从S3获取的对象的字节转换为audioclip。

S3上的每个音频文件都是具有以下属性的.ogg文件:

Properties of every file audio file

//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;
        }

我只是想在没有静电噪声的情况下正确播放音频。

c# arrays unity3d audio ogg
1个回答
0
投票

你正在做的事情看起来很好 - 只要数据存储在未经压缩的原始PCM流中,所有理由都可以正常工作。如果不是 - 那就像从JPG文件中读取字节一样,并期望在那里找到颜色。您需要先将数据提供给适当的解码器

快速谷歌允许我找到这个链接https://archive.codeplex.com/?p=nvorbis

我自己没有用它,但似乎符合要求。或者,您可以链接到.dll并使用一些PInvokes在非托管端进行解码

© www.soinside.com 2019 - 2024. All rights reserved.