Je dois faire une application WebGL capable de lire un son externe (www). MP3 ou OGG, peu importe. Js ou c#, peu importe.
Une sorte de jukebox, quoi.
Après moulte recherches, je suis tombé sur pas mal de fonctions obsolètes, mais j'ai finalement réussi à trouver deux codes qui fonctionnent à peu près, du moins sous Unity (un JS et un C#).
Mon code JS marche marche sous Unity (en me faisant un erreur mais en fonctionnant quand même), le programme de charge aucun son si le build est lancé du navigateur (Chrome ou IE). C'est sans doute l'erreur (durant le chargement) qui bloque le Webgl...
Voici le petit code :
Code : Tout sélectionner
#pragma strict
var url : String;
var source: AudioSource;
var played = false;
function Start () {
yield WaitForSeconds (3);
var www = new WWW(url); // Les sons doivent être au format OGG !
source = GetComponent.<AudioSource>();
source.clip = www.GetAudioClip();
}
function Update () {
if(!source.isPlaying && source.clip.isReadyToPlay)
playthesound();
}
function playthesound (){
if (played == false){
played = true;
source.Play();
}
}
Il est un peu plus complexe et agit sur une barre de chargement. Elle fonctionne, ce qui montre que la première partie du code marche. Reste plus qu'à jouer ce satané son !...
Voici son code :
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LoadFile : MonoBehaviour {
public string urlString;
public GameObject progressBar;
string url;
WWW www;
AudioClip clip;
AudioSource _audioSource;
private void Start()
{
_audioSource = GetComponent<AudioSource>();
}
void Update () {
if (www!= null)
{
// modifie la progressbarre.
print(www.progress);
progressBar.transform.localScale = new Vector3(www.progress, 1, 1);
}
}
IEnumerator LoadURL()
{
url = urlString;
www = new WWW(url);
clip = www.GetAudioClip(false, true);
while (!www.isDone)
{
yield return www;
}
if (www.error == null)
{
_audioSource.clip = clip;
_audioSource.Play();
}
else
{
// oups !
Debug.Log("Et flute !");
}
yield return 0;
}
private void OnGUI()
{
urlString = GUI.TextField(new Rect(10, 10, 200, 20), urlString, 100);
if (GUI.Button(new Rect(10,40,200,50), "Load URL"))
{
// On clique... ouatsnext ?
StartCoroutine(LoadURL());
}
}
}
Voici une url pour tester au besoin (pour le C#) : http://amconline.free.fr/davi/mp3/BravoOGG.ogg
Merci beaucoup, bonne journée !