Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以音频剪辑形式访问StreamingAssets中的文件Android-Unity_C#_Unity3d - Fatal编程技术网

C# 以音频剪辑形式访问StreamingAssets中的文件Android-Unity

C# 以音频剪辑形式访问StreamingAssets中的文件Android-Unity,c#,unity3d,C#,Unity3d,我正在尝试从StreamingAssets文件夹中存在的“.mp3”或“.wav”文件创建音频剪辑 我试图使用BetterStreamingAssets包从文件中获取字节数组,然后将字节数组转换为音频剪辑,但许多文件没有正确转换 所以,我试着用WWW或UnityWebRequest获取它,这是我的代码 publicstaticienumerator播放音频剪辑(音频源音频源,字符串路径) { 使用(UnityWebRequest www=UnityWebRequestMultimedia.Get

我正在尝试从StreamingAssets文件夹中存在的“.mp3”或“.wav”文件创建音频剪辑

我试图使用BetterStreamingAssets包从文件中获取字节数组,然后将字节数组转换为音频剪辑,但许多文件没有正确转换

所以,我试着用WWW或UnityWebRequest获取它,这是我的代码

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()我和我一起工作,因为他们是内部处理的,所以我不再需要这个包了,谢谢。