質問編集履歴

1 文章を補足しました

orina

orina score 16

2019/05/10 22:53  投稿

Unityで外部ファイルから.mp3を読み込む方法がわからない
[前回の質問](https://teratail.com/questions/188615)で音声ファイルを読み込む方法は分かり、.wav、.oggファイルはきちんと再生できましたが、.mp3ファイルを読み込もうとすると以下のエラーが出て読み込むことができません。
[前回の質問](https://teratail.com/questions/188615)で外部ファイルのパスから音声ファイルを読み込む方法は分かり、.wav、.oggファイルはきちんと再生できましたが、.mp3ファイルを読み込もうとすると以下のエラーが出て読み込むことができません。
フォーマット対応していないのは分かりましたが、他に.mp3フォーマットのファイルを読み込む手段はあるのでしょうか?
### 発生したエラー
```C#
Streaming of 'mpeg' on this platform is not supported
UnityEngine.Networking.DownloadHandlerAudioClip:GetContent(UnityWebRequest)
<LoadToAudioClipAndPlay>d__11:MoveNext() (at Assets/Scripts/StartSceneManager.cs:92)
UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)
NullReferenceException: Object reference not set to an instance of an object
StartSceneManager+<LoadToAudioClipAndPlay>d__11.MoveNext () (at Assets/Scripts/StartSceneManager.cs:93)
UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at C:/buildslave/unity/build/Runtime/Export/Coroutines.cs:17)
```
### 使用しているコード
```C#
   //外部からの呼び出し用メソッド
   public void LoadAudio(string path)
   {
       if (Path.GetExtension(path) == ".m4a") //※"m4a"は再生できないっぽい
       {
           Debug.Log("Not supported audio format.");
           return;
       }
       StartCoroutine(LoadToAudioClipAndPlay(path));
   }
   //ファイルの読み込み(ダウンロード)と再生
   IEnumerator LoadToAudioClipAndPlay(string path)
   {
       Debug.Log($"load{path}");
       if (audioSource == null || string.IsNullOrEmpty(path))
           yield break;
       if (!File.Exists(path))
       {
           //ここにファイルが見つからない処理
           Debug.Log("File not found.");
           yield break;
       }
       AudioType audioType = new AudioType();
       switch (Path.GetExtension(path))
       {
           case ".wav":
           case ".WAV":
               audioType = AudioType.WAV;
               break;
           case ".ogg":
           case ".OGG":
               audioType = AudioType.OGGVORBIS;
               break;
           case "..mp3":
           case ".MP3":
               audioType = AudioType.MPEG;
               break;
           default:
               audioType = AudioType.WAV;
               break;
       }
       using (UnityWebRequest req = UnityWebRequestMultimedia.GetAudioClip("file://" + path, audioType)) //※あくまでローカルファイルとする
       {
           yield return req.SendWebRequest();
           AudioClip audioClip = DownloadHandlerAudioClip.GetContent(req);
           if (audioClip.loadState != AudioDataLoadState.Loaded)
           {
               //ここにロード失敗処理
               Debug.Log("Failed to load AudioClip.");
               yield break;
           }
           //ここにロード成功処理
           printText.Text = $"{printText.Text}\n{path}";
           playLists.Add(audioClip);
           new PlayClips(playLists, false);
       }
   }
```
### 実行環境
Unity 2018.3.8f1
Windows10
  • C#

    13739 questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    9619 questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る