Page 1 sur 1

Gérer les erreurs de chargement de son depuis un dossier local

Publié : 14 Fév 2021 14:22
par Jayme65
Bonjour,
Mon application joue des AudioClips en ressource mais permet aussi à l'utilisateur de placer des sons dans un dossier local pour qu'ils soient joués à la place.

Code : Tout sélectionner

public class AudioManager : MonoBehaviour
{
    // User sounds
    Dictionary<string, AudioClip> UserSoundFiles = new Dictionary<string, AudioClip>();
    private string SoudFolderPath;

    void Start()
    {
        SoundFolderPath = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(Application.dataPath), @"Sounds\"));
        LoadUserSoundFiles();
    }

    private void LoadUserSoundFiles()
    {
        UserSoundFiles.Add("Panel_Open.wav", null);
        UserSoundFiles.Add("Panel_Close.wav", null);

        foreach (KeyValuePair<string, AudioClip> kvp in UserSoundFiles)
        {
            if (File.Exists(SoundFolderPath + kvp.Key))
            {
                StartCoroutine(GetAudioClip(kvp.Key));
            }
        }
    }

    IEnumerator GetAudioClip(string key)
    {
        using (UnityWebRequest www = UnityWebRequestMultimedia.GetAudioClip(SoundFolderPath + key, AudioType.WAV))
        {
            yield return www.SendWebRequest();

            if (www.isHttpError || www.isNetworkError)
            {
            }
            else
            {
                AudioClip ac = DownloadHandlerAudioClip.GetContent(www);
                UserSoundFiles[key] = ac;
            }
        }
    }

    public void playPanelOpen()
    {
        if (UserSoundFiles["Panel_Open.wav"] != null)
        {
            UIsounds.PlayOneShot(UserSoundFiles["Panel_Open.wav"]);
            return;
        }
        UIsounds.PlayOneShot(Resource_Panel_Open);
    }
    public void playPanelClose()
    {
        if (UserSoundFiles["Panel_Close.wav"] != null)
        {
            UIsounds.PlayOneShot(UserSoundFiles["Panel_Close.wav"]);
            return;
        }
        UIsounds.PlayOneShot(Resource_Panel_Close);
    }
}
Ca fonctionne bien. Si un son en local est présent, il est téléchargé et peut être joué, sinon c'est le son en ressource qui est utilisé
...mais je voulais savoir ce qui se passerait avec un 'mauvais' fichier .wav! J'ai donc créé un fichier texte 'Panel_Open.text' que j'ai renommé en 'Panel_Open.wav' pour voir ce qui allait se passer.

Il apparait alors que Unity soulève en effet l'erreur suivante:

Code : Tout sélectionner

Error: Cannot create FMOD::Sound instance for resource 0x0000000004BB7350: C:\Users\...\Desktop\Unity\Data\Sounds\Select.wav, (Unsupported file or audio format. )
UnityEngine.Networking.DownloadHandlerAudioClip:GetContent(UnityWebRequest)
...mais UserSoundFiles["Panel_Close.wav"] n'est par contre plus 'null' et une tentative de jouer le son dans 'playPanelOpen()' est faite.

La question est la suivante: comment pourrais-je capturer l'erreur de DownloadHandlerAudioClip.GetContent(www) et faire passer l'AudioClip à 'null' alors?

D'avance, merci!

Re: Gérer les erreurs de chargement de son depuis un dossier local

Publié : 14 Fév 2021 23:24
par youtpout

Re: Gérer les erreurs de chargement de son depuis un dossier local

Publié : 15 Fév 2021 00:17
par Jayme65
Merci pour ta réponse...mais non, il semblerait que "l'erreur" est handlée directement par Unity et le catch n'est pas soulevé

Re: Gérer les erreurs de chargement de son depuis un dossier local

Publié : 15 Fév 2021 14:46
par youtpout