如何播放即时加载的声音

Posted

技术标签:

【中文标题】如何播放即时加载的声音【英文标题】:How to play sounds loaded on the fly 【发布时间】:2013-04-11 11:50:18 【问题描述】:

我试图为我小组的声音设计师制作一个工具,让他可以听到他在 Unity 中播放的声音文件。

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

等等……

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

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

【问题讨论】:

【参考方案1】:

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

使用 System.IO DirectoryInfo() 获取所有文件名 使用 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);
    

[编辑]

如果人们想改进文件管理,我推荐this link

【讨论】:

那么,您如何“检查循环是否正确”?如果您要回答自己的问题,请完全回答。 我认为最好使用 Path.Combine (msdn.microsoft.com/ru-ru/library/vstudio/fyy7a5kt(v=vs.90).aspx) 来避免平台依赖。 @Joetjah OP 表示问题只是为了找到 Unity 如何管理加载音频文件

以上是关于如何播放即时加载的声音的主要内容,如果未能解决你的问题,请参考以下文章

如果加载了某些图像,则播放声音[关闭]

预加载通过 iPhone AudioServices 播放的声音

如何防止在页面加载时执行 javascript 函数?

加载关卡后声音不会播放

即时加载视频

SpriteKit:播放前将声音文件预加载到内存中?