質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

3186閲覧

UnityWebRequestでoggファイルの読み込みができない

sicklower496

総合スコア1

C#

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/09/01 00:55

編集2021/09/02 04:34

前提・実現したいこと

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にてエラーが発生しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bboydaisuke

2021/09/02 02:30

エラーの行数はエラー内に表示されているが、それが貼りつけたコードの何行目なのかがわかりません。それを示したら、何人かは質問を読んでくれると思います。 何行目で NullReferenceException になっていて、null になっている変数がどれなのかまで特定した状態で質問したら、もう少し多くの人が質問を読んでくれると思います。
bboydaisuke

2021/09/02 06:50

「 //ここでエラーが発生」「変数aにてエラーが発生」という表現から、そのコメント行の一行下の命令で a が null であるために NullReferenceException が記録された、と理解しました。「にて」という表現は曖昧なので解釈が難しいです。また、上から52行数えてそれが本当に52行目なのかは確認していません。 それを元に、その行で a が null であったとしてもエラーにはならないので、説明は正しくない、と判断しました。
guest

回答1

0

ベストアンサー

こちらの環境で試したところ、UnityWebRequestMultimedia.GetAudioClipを使えば上手くいきましたがどうでしょう。

diff

1- using (UnityWebRequest req = new UnityWebRequest("file://" + path)) //※あくまでローカルファイルとする 2+ using (UnityWebRequest req = UnityWebRequestMultimedia.GetAudioClip("file://" + path, AudioType.OGGVORBIS)) 3 4// (中略) 5 6- a = ((DownloadHandlerAudioClip)req.downloadHandler).audioClip; 7+ a = DownloadHandlerAudioClip.GetContent(req);

投稿2021/09/03 02:01

fiveHundred

総合スコア9803

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問