问题描述
我正在尝试从程序集资源加载 AudioClip(由 AudioSource 播放)。然而,在我目前的设置下,音频非常响亮,极度失真并且播放速度大约是其两倍。它是一个 .wav 文件,作为资源包含在托管程序集中。任何人都知道我做错了什么? (我已经匹配了频率和频道)
private static AudioClip LoadAudioClip()
{
// Try loading from resources first.
AudioClip audioClip = Resources.Load<AudioClip>(AudioClipResourceFolder + Path.GetFileNameWithoutExtension(EmbeddedChime.FileName));
if (audioClip == null)
{
// nothing found in resources,load from library manifest instead.
try
{
using (Stream stream = GetResourceStream(EmbeddedChime.FileName))
{
float[] buffer = GetAudioBuffer(stream);
audioClip = AudioClip.Create("Chime",buffer.Length,2,44100,true,false);
if (!audioClip.SetData(buffer,0))
{
throw new NotSupportedException(EmbeddedChime.FileName);
}
}
}
catch (Exception e)
{
AMDebug.LogError($"Failed to load {EmbeddedChime.FileName} from Assembly library manifest: " + e.Message);
}
}
return audioClip;
}
private static float[] GetAudioBuffer(Stream stream)
{
byte[] buffer = GetResourceBuffer(stream);
float[] floatBuffer = new float[buffer.Length / 4];
for (int i = 0; i < floatBuffer.Length; i++)
{
if (BitConverter.IsLittleEndian)
{
Array.Reverse(buffer,i * 4,4);
}
floatBuffer[i] = BitConverter.ToSingle(buffer,i*4) / 0x80000000;
}
return floatBuffer;
}
private static byte[] GetResourceBuffer(Stream stream)
{
stream.Seek(0,SeekOrigin.Begin);
byte[] buffer = new byte[stream.Length];
stream.Read(buffer,(int)stream.Length);
return buffer;
}
private static Stream GetResourceStream(string resourceName)
{
return AudioMobAssembly.GetManifestResourceStream(resourceName);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)