前提・実現したいこと
https://teratail.com/questions/188615
こちらの方のコードを利用してaudioclipを取得しようとしているのですが、下記のエラーが発生してまっています。楽曲のファイルはC:\musicfolderにra.oggとしてあります。
発生している問題・エラーメッセージ
NullReferenceException: Object reference not set to an instance of an object misicload+<LoadToAudioClipAndPlay>d__4.MoveNext () (at Assets/misicload.cs:52) UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <9584de3444b542abbb1ad4bb43a7137f>:0)
該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using System.IO; 4using UnityEditorInternal; 5using UnityEngine; 6using UnityEngine.Networking; 7using UnityEngine.UI; 8 9public class musicload : MonoBehaviour 10{ 11 public AudioSource audioSource; //インスペクタで AudioSource をセット 12 public string path = "C:/musicfolder/ra.ogg"; //※ファイルは任意 13 public AudioClip a; 14 //外部からの呼び出し用メソッド 15 16 public void LoadAudio(string path) 17 { 18 if (Path.GetExtension(path) == ".m4a") //※"m4a"は再生できないっぽい 19 { 20 Debug.Log("Not supported audio format."); 21 return; 22 } 23 24 StartCoroutine(LoadToAudioClipAndPlay(path)); 25 } 26 27 //ファイルの読み込み(ダウンロード)と再生 28 IEnumerator LoadToAudioClipAndPlay(string path) 29 { 30 Debug.Log($"load{path}"); 31 if (audioSource == null || string.IsNullOrEmpty(path)) 32 yield break; 33 34 if (!File.Exists(path)) 35 { 36 //ここにファイルが見つからない処理 37 Debug.Log("File not found."); 38 yield break; 39 } 40 Debug.Log("loading"); 41 42 43 using (UnityWebRequest req = new UnityWebRequest("file://" + path)) //※あくまでローカルファイルとする 44 { 45 req.SendWebRequest(); 46 while (!req.isDone) 47 { 48 Debug.Log("wait..."); 49 yield return null; 50 } 51 //ここでエラーが発生 52 a = ((DownloadHandlerAudioClip)req.downloadHandler).audioClip; 53 if (a.loadState != AudioDataLoadState.Loaded) 54 { 55 //ここにロード失敗処理 56 Debug.Log("Failed to load AudioClip."); 57 yield break; 58 } 59 60 //ここにロード成功処理 61 audioSource.clip = a; 62 audioSource.Play(); 63 Debug.Log("Load success : " + path); 64 } 65 } 66 void Start() 67 { 68 LoadAudio(path); 69 } 70 71 72} 73
試したこと
WWWクラスで試したのですが、同様にエラーが発生しました。
補足情報(FW/ツールのバージョンなど)
上記コードの52行目、変数aにてエラーが発生しています。
エラーの行数はエラー内に表示されているが、それが貼りつけたコードの何行目なのかがわかりません。それを示したら、何人かは質問を読んでくれると思います。
何行目で NullReferenceException になっていて、null になっている変数がどれなのかまで特定した状態で質問したら、もう少し多くの人が質問を読んでくれると思います。
「 //ここでエラーが発生」「変数aにてエラーが発生」という表現から、そのコメント行の一行下の命令で a が null であるために NullReferenceException が記録された、と理解しました。「にて」という表現は曖昧なので解釈が難しいです。また、上から52行数えてそれが本当に52行目なのかは確認していません。
それを元に、その行で a が null であったとしてもエラーにはならないので、説明は正しくない、と判断しました。
回答1件
あなたの回答
tips
プレビュー