Gérer les erreurs de chargement de son depuis un dossier local
Publié : 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.
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:
...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!
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);
}
}
...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)
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!