🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

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

Q&A

1回答

4697閲覧

wwwを使って外部からオーディオファイルの読み込みでエラー

CopanSassa

総合スコア18

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Unity

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

0グッド

0クリップ

投稿2019/09/09 16:30

Unityで外部からオーディオの読み込みを行いたいです。
PlatformはAndroidにしています。

しかし、pathをしっかりと設定しているにも関わらず、エラーが消えません。
エラーは以下のようです。

Error: Cannot create FMOD::Sound instance for resource 0x0000024C1DC8DFA0: file:///C:/Users/nx2adhcs/AppData/LocalLow/DefaultCompany/app-app/Audio/Meidai2_B1_1.wav, (Unsupported file or audio format. ) UnityEngine.AudioClip:get_loadState() <AudioPlay>d__2:MoveNext() (at Assets/Scripts/SoundManager/SoundManager.cs:25) UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)

インターネットで調べたところ、バージョン5の時に起こっていたことは確認しました。
2016年の記事ですので、すでに解決策があると思うのですが、未熟ながら探しきれませんでした。。。

コードは以下のようになっています。

using UnityEngine; using System.Collections; public class SoundManager : MonoBehaviour { public AudioSource audioSource; void Start() { StartCoroutine("AudioPlay"); } private IEnumerator AudioPlay() { //Get AudioFile through WWW using (WWW www = new WWW("file:///" + UnityEngine.Application.persistentDataPath + "/Audio/Meidai2_B" + DataScripts.Selected_Pattern + "_1.wav")) { while (!www.isDone) yield return null; AudioClip audioClip = www.GetAudioClip(false, true); if (audioClip.loadState != AudioDataLoadState.Loaded) { //ここにロード失敗処理 Debug.Log("Failed to load AudioClip."); yield break; } audioSource.clip = audioClip; audioSource.Play(); Debug.Log("Load Succcess : " + UnityEngine.Application.persistentDataPath + "/Audio/Meidai2_B" + "1" + "_1.wav"); } yield return new WaitForSeconds(3.0f); } }

現在はunity 2019.2.2f1を使用しています。
エラーの回避方法。または、別の方法で外部からオーディオファイルの読み取りができる方法を教えていただきたいです。

Resource.Loadは、Androidの時外部から操作できないのでなしでお願いします。

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

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

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

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

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

y_waiwai

2019/09/10 00:50

外部から、といってますが、インターネットからアクセスしようとしてるんでしょうか。 あるいは、同じLANの中からアクセスしようとしてるんでしょうか。
t_obara

2019/09/10 01:37

エラーメッセージからはパス云々ではなく、ファイルフォーマットの問題のようですが、特殊なwavファイルとかではないのですか?mp3とかで圧縮してみるなど別なフォーマットで試してみては?
guest

回答1

0

パッと見ですが、StartCoroutineの引数の「""」はいらないように感じました。

自分もちょうど同じ内容に取り掛かっているところです。
参考に自分のプログラムを添付しておきます。
あくまで比較材料として、学びに繋がれば幸いです。

また、wwwは非推奨のトレンドがあるのでUnityWebRequestを使うといいみたいです。

C#

1 2using UnityEngine; 3using System.Collections; 4using System.Collections.Generic; 5using System.IO; 6using UnityEngine.UI; 7using UnityEngine.Networking; 8 9 10public class MusicDemo: MonoBehaviour{ 11 public AudioClip audioClip; 12 private AudioSource audioSource; 13 14 15 //パスの指定 16 const string _FILE_HEADER = "file://"; 17 string path="C:/Demo/Demo.mp3"; 18 19 20 private IEnumerator LoadAudio(string path){ 21 22 WWW request = new WWW(_FILE_HEADER + path); 23 yield return null; 24 25 //呼び出したデータをautoClipに格納する 26 audioClip = request.GetAudioClip(); 27 28 //audioClipをaudioSourceに格納する 29 audioSource = gameObject.GetComponent<AudioSource>(); 30 audioSource.clip = audioClip; 31 audioSource.Play(); 32 Debug.Log("Play success : " + audioClip); 33 34 } 35 36 37 void Start() 38 { 39 StartCoroutine(LoadAudio(path)); 40 } 41}

投稿2020/09/10 05:12

yunyunno

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問