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

Questions à propos de la partie audio, y compris les problèmes de script s'y rapportant.
Jayme65
Messages : 47
Inscription : 31 Jan 2017 00:43

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

Message par Jayme65 » 14 Fév 2021 14:22

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!


Jayme65
Messages : 47
Inscription : 31 Jan 2017 00:43

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

Message par Jayme65 » 15 Fév 2021 00:17

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é


Répondre

Revenir vers « Audio, musique et sons »