Unityで、外部から音声ファイルを読み込んでアプリ上で鳴らす機能を実装しようとしています。
調べたところResources.Loadを使う方法とWWWクラスを使う方法を見つけました。
読み込む音声ファイルの置く場所は自由に設定できるようにしたかったので、Resources.Loadは避け、コルーチンを用いてWWWクラスで読み込む形にしました。以下はそのメソッドを示したコードです。
lang
1IEnumerator loadSound ( AudioSource audioSource, string filePath) { 2 Debug.Log ( filePath ); // ログ1 3 // ファイル読み込み 4 WWW www = new WWW (@"file://" + @filePath); 5 yield return www; 6 if (string.IsNullOrEmpty(www.error) == false) { 7 Debug.Log (www.error); // ログ2 8 } 9 audioSource.clip = www.audioClip; 10}
デスクトップに音声ファイルa#1.oggを置き、audioSourceを用意してStartメソッドでStartCoroutine( loadSound(audioSource, @"/Users/XXX/Desktop/a#1.ogg") )のように絶対パスで指定し、audioSource.play()で音を鳴らそうとしたのですが、鳴りませんでした。コンソールで出力されたログを見てみると、
ログ1:/Users/XXX/Desktop/a#1.ogg
ログ2:Couldn't open file /Users/XXX/Desktop/a
となっていました。
ファイル名を#(シャープ)記号を含まないものに換えてみたところ、今度は正常に読み込め、再生もできました。
ログから察するに、ファイルを読み込めなかったのは、WWWクラスが引数としてアドレスを渡されたとき、#以降の文字列を認識しないようになっていることが原因だと思われるのですが、実際のところWWWクラスはどのような仕組みでファイルを読み込んでいるのでしょうか?また、どうすればUnityで#記号を含むファイル名を外部から読み込めるのでしょうか?WWWクラスを用いない方法でもいいので、ご教授お願いします。
追記:#記号は音楽の記号として使われているので、音声ファイルの名前にも#を含んだものがときどきあります。なるべくリネームなどを手動で行わずに、プログラム上でそういったファイルに対応したいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2015/08/28 01:55