Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Music ou Sound ?  (Lu 3483 fois)

0 Membres et 1 Invité sur ce sujet

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Music ou Sound ?
« le: Septembre 30, 2014, 06:58:20 pm »
Bonjour, je travaille actuellement sur une classe de gestion de l'audio.

J'aimerais savoir dans quel cas est-il préférable d'utiliser un sf::Music ou un sf::Sound & sf::SoundBuffer ?

Cela est bien en rapport avec la taille du fichier ? Si oui quelle taille est la "limite" approximative entre les deux ?

Voilà, merci beaucoup :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Music ou Sound ?
« Réponse #1 le: Septembre 30, 2014, 09:09:31 pm »
Généralement la limite est assez nette : les musiques sont au format MP3, FLAC ou OGG/Vorbis et font plusieurs minutes, alors que les sons sont au format WAV et ne durent que quelques secondes.

Pourquoi te poses-tu la question ?
Laurent Gomila - SFML developer

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Re : Music ou Sound ?
« Réponse #2 le: Octobre 01, 2014, 12:02:47 am »
Je suis train de travailler sur un gestionnaire de fichiers audio.

Je possède une classe AudioFile qui contient l'adresse du fichier et un nom (qui s'il n'est précisé correspond nom du fichier sans le chemin ni l'extension)

À l'heure actuelle ma classe reçoit un paramètre qui est un enm contenant Son et Musique

Ensuite l'utilisateur n'a pas à gérer quoi que ce soit. Si le fichier est un son, un son sera joué (avec une gestion optimisé du SoundBuffer) et dans le cas d'une musique pareil.

Donc voilà maintenant j'essaye de ne plus avoir à donner la valeur de mon enum.

Je vais encore réfléchir parce que basé le choix du type sur l'extension est un peu "flou" car rien n'empêche l'utilisateur d'avoir un wav de plusieurs minutes (heures) qui serait donc galère pour la mémoire...

Ensuite je partagerais mon code dans l'espoir que ça puisse aider :)

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Re : Music ou Sound ?
« Réponse #3 le: Octobre 01, 2014, 12:09:58 am »
(Double post désolé)

Vous pouvez accéder aux sources actuelles ici : https://github.com/Cmdu76/AudioManager

Je n'ai pas de doc et je ne sais plus s'il y a un fichier exemple (main normalement)


J'ai réfléchi à une méthode pour calculer le temps d'un fichier afin de déterminer le type qui aura, quelqu'un peut me dire si elle raisonnable/correcte :

sf::Time getFileDuration(std::string const& filename)
{
    sf::Music music;
    if (!music.openFromFile(filename))
        return sf::Time::Zéro;
    return music.getDuration();
}

Voilà merci d'avance (j'espère pouvoir finir bientôt ^^)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Music ou Sound ?
« Réponse #4 le: Octobre 01, 2014, 07:54:21 am »
Ca me paraît bancal de mélanger les deux comme ça. C'est l'utilisateur qui devrait déterminer s'il veut une "musique" ou un "son" -- si c'était une bonne idée de gérer ça automatiquement, c'est sûrement SFML qui le ferait directement ;)

Pour moi ça n'a pas de sens car ces deux choses n'ont rien en commun (classe SFML correspondante, cas d'utilisation, API, ...). Là tu rends les choses plus compliquées qu'elles ne devraient l'être.
Laurent Gomila - SFML developer

Cmdu76

  • Full Member
  • ***
  • Messages: 194
    • Voir le profil
Re : Music ou Sound ?
« Réponse #5 le: Octobre 02, 2014, 02:52:41 pm »
Bon finalement, j'ai laissé le choix, de 4 façons différentes :

// L'utilisateur se sert de mon Enum
AudioFile::Ptr AudioManager::create(FileType type, std::string const& filename, std::string const& name);

// L'utilisateur crée un son via la bonne méthode
AudioFile::Ptr AudioManager::createSound(std::string const& filename, std::string const& name);

// L'utilisateur crée une musique via la bonne méthode
AudioFile::Ptr AudioManager::createMusic(std::string const& filename, std::string const& name);

// Le type est déterminé automatiquement (si l'utilisateur choisit cette méthode)
AudioFile::Ptr AudioManager::createAuto(std::string const& filename, std::string const& name);