C# 如何播放动态加载的声音

C# 如何播放动态加载的声音,c#,unity3d,audio,C#,Unity3d,Audio,我试图为我的团队的声音设计师制作一个工具,让他能够听到他的声音文件在Unity中播放 检查它是否可以加载 检查音量是否正确 检查循环是否正确 等等 我的问题是找到Unity如何管理加载文件夹中的音频文件 我发现有很多话题都在谈论它,但没有真正的解决方案可以让Unity动态加载外部文件。如果您想从与.exe/.app相同的目录加载文件,您可以使用以下方法: 使用System.IODirectoryInfo()获取所有文件名 使用WWW类流式传输/加载找到的文件 代码如下: using Un

我试图为我的团队的声音设计师制作一个工具,让他能够听到他的声音文件在Unity中播放

  • 检查它是否可以加载
  • 检查音量是否正确
  • 检查循环是否正确
等等

我的问题是找到Unity如何管理加载文件夹中的音频文件


我发现有很多话题都在谈论它,但没有真正的解决方案可以让Unity动态加载外部文件。

如果您想从与.exe/.app相同的目录加载文件,您可以使用以下方法:

  • 使用System.IODirectoryInfo()获取所有文件名
  • 使用WWW类流式传输/加载找到的文件
代码如下:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.IO;

public class SoundPlayer : MonoBehaviour {

    string absolutePath = "./"; // relative path to where the app is running

    AudioSource src;
    List<AudioClip> clips = new List<AudioClip>();
    int soundIndex = 0;

    //compatible file extensions
    string[] fileTypes = {"ogg","wav"};

    FileInfo[] files;

    void Start () {
        //being able to test in unity
        if(Application.isEditor)    absolutePath = "Assets/";
        if(src == null) src = gameObject.AddComponent<AudioSource>();
        reloadSounds();
    }

    void reloadSounds() {
        DirectoryInfo info = new DirectoryInfo(absolutePath);
        files = info.GetFiles();

        //check if the file is valid and load it
        foreach(FileInfo f in files) {
            if(validFileType(f.FullName)) {
                //Debug.Log("Start loading "+f.FullName);
                StartCoroutine(loadFile(f.FullName));
            }
        }
    }

    bool validFileType(string filename) {
        foreach(string ext in fileTypes) {
            if(filename.IndexOf(ext) > -1) return true;
        }
        return false;
    }

    IEnumerator loadFile(string path) {
        WWW www = new WWW("file://"+path);

        AudioClip myAudioClip = www.audioClip;
        while (!myAudioClip.isReadyToPlay)
        yield return www;

        AudioClip clip = www.GetAudioClip(false);
        string[] parts = path.Split('\\');
        clip.name = parts[parts.Length - 1];
        clips.Add(clip);
    }
}
使用UnityEngine;
使用系统集合;
使用System.Collections.Generic;
使用System.IO;
公共级声音播放器:单一行为{
string absolutePath=“./”;//应用程序运行位置的相对路径
声源src;

列表

那么,您如何“检查循环是否正确”?如果您要回答自己的问题,请完整地回答。我认为最好使用Path.Combine()来避免平台依赖性。@Joetjah OP说问题只是找到Unity如何管理加载音频文件