C# 以音频剪辑形式访问StreamingAssets中的文件Android-Unity
我正在尝试从StreamingAssets文件夹中存在的“.mp3”或“.wav”文件创建音频剪辑 我试图使用BetterStreamingAssets包从文件中获取字节数组,然后将字节数组转换为音频剪辑,但许多文件没有正确转换 所以,我试着用WWW或UnityWebRequest获取它,这是我的代码C# 以音频剪辑形式访问StreamingAssets中的文件Android-Unity,c#,unity3d,C#,Unity3d,我正在尝试从StreamingAssets文件夹中存在的“.mp3”或“.wav”文件创建音频剪辑 我试图使用BetterStreamingAssets包从文件中获取字节数组,然后将字节数组转换为音频剪辑,但许多文件没有正确转换 所以,我试着用WWW或UnityWebRequest获取它,这是我的代码 publicstaticienumerator播放音频剪辑(音频源音频源,字符串路径) { 使用(UnityWebRequest www=UnityWebRequestMultimedia.Get
publicstaticienumerator播放音频剪辑(音频源音频源,字符串路径)
{
使用(UnityWebRequest www=UnityWebRequestMultimedia.GetAudioClip(路径,AudioType.UNKNOWN))
{
返回www.SendWebRequest();
如果(www.isNetworkError)
{
Debug.Log(www.error);
}
其他的
{
AudioClip myClip=DownloadHandlerAudioClip.GetContent(www);
audioSource.clip=myClip;
audioSource.Play();
}
}
}
我这样称呼它
StartCoroutine(PlayAudioClip(audio, BetterStreamingAssets.Root + "/" + soundPath));
但实际情况是,代码在编辑器或pc平台上运行良好,但在android平台上却无法正常工作
那么,我如何在android平台上播放语音呢?如果你的路径总体上是正确的,那么完全取决于这个
更好的流资产。Root
和声音路径
。。。你没有出现
我只是调查了一下,这对我来说是非常不必要的
只需使用正确的内置软件,该软件始终适用于相应的目标平台
此外,您正在尝试访问android上转换为的BetterStreamingAssets.Root
BetterStreamingAssets.ApkImpl.s\u根目录
它是用应用程序初始化的。数据路径不是应用程序。StreamingAssetPath
/*第39行*/BetterStreamingAssetsImp.Initialize(Application.dataPath、Application.StreamingAssetPath);
哪个叫
/*行341*/public static void Initialize(字符串数据路径、字符串流化AssetPath)
它在哪里
/*行343*/s_root=dataPath;
另外:永远不要使用简单字符串concat(+“/”
)作为系统文件路径
而是使用根据设备使用的存储系统插入正确路径分隔符的
start例程(播放音频剪辑(音频,路径.Combine(Application.streamingassetpath,soundPath));
同样,这也很大程度上取决于声程
我还非常确定,您必须根据您的文件结尾,找出并将正确的参数传递给UnityWebRequestMultimedia.GetAudioClip
。除非它确实是第三方/未知插件格式。
在这种情况下,我不希望UnityWebRequestMultimedia.GetAudioClip能够复制它
一般来说
您想从StreamingAssets
读取音频有什么特殊原因吗
为什么不简单地把它放在资产中,并在某个地方引用它,这样你就可以确保它确实正确导入了?或者如果你有多个do,例如
公共类AudioDataController:MonoBehavior
{
[序列化字段]专用音频源音频源;
[SerializeField]私人音频剪辑someClip;
[SerializeField]私人音频剪辑someOtherClip;
公共空间PlaySomeSound()
{
audioSource.clip=someClip;
audioSource.Play();
}
公共空间播放其他声音()
{
audioSource.clip=someOtherClip;
audioSource.Play();
}
}
这样,我想你就不会有那么大的麻烦。你确定问题出在音频复制上,还是在android平台上streamingassets路径不同?你能包括BetterStreamingAssets.Root+的值吗?“/”+soundPath
是吗?对于每个构建目标,流媒体资产的路径都不同。在android上,它是“”jar:file://“+Application.dataPath+”!/assets”
`谢谢你的回答,实际上你的回答对我非常有用,关键是路径。组合技巧而不是“/”,所以我意识到更好的流媒体资产。GetFile()我和我一起工作,因为他们是内部处理的,所以我不再需要这个包了,谢谢。