9

私のグループのサウンド デザイナーが、Unity で再生されたサウンド ファイルを聞くことができるツールを作ろうとしています。

  • 読み込み可能かどうかを確認する
  • 音量が適切かどうかを確認する
  • ループが適切かどうかを確認する

等々 ...

私の問題は、Unity がフォルダー内のどこかにあるオーディオ ファイルのロードを管理する方法を見つけることです。

それについて話している多くのトピックを見つけましたが、Unity に外部ファイルを動的にロードさせる方法に対する実際の解決策はありません。

4

1 に答える 1

8

.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);
    }
}

[編集]

ファイル管理を改善したい場合は、このリンクをお勧めします

于 2013-04-11T11:50:18.420 に答える