IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    octobre 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2009
    Messages : 104
    Points : 614
    Points
    614
    Par défaut Réduire le temps de chargement des fichiers sons
    Salut,

    Je cherche un moyen pour réduire le temps de chargement des niveaux de mon jeu. Le chargement se fait actuellement en plusieurs secondes et le temps se passe principalement dans le chargement des sons (7 secondes), notamment pour la musique du niveau (3,5 secondes).

    Mon jeu est destiné aux téléphones Android et le son est géré par SDL Mixer 2. La musique est un Ogg Vorbis stéréo 44 kHz, que je charge comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Mix_Chunk* charge_le_son( std::istream& file )
    {
      SDL_RWops* rw;
     
      file.seekg( 0, std::ios::end );
      std::streamoff file_size = file.tellg();
      file.seekg( 0, std::ios::beg );
     
      char* buffer = new char[file_size];
     
      file.read( buffer, file_size );
      Mix_Chunk* result(NULL);
     
      rw = SDL_RWFromMem(buffer, file_size);
     
      if (rw)
        result = Mix_LoadWAV_RW( rw, 1 );
     
      delete[] buffer;
     
      return result;
    }
    Le temps est principalement consommé dans Mix_LoadWAV_RW(). Je peux atteindre un temps de chargement bien plus court en utilisant une musique au format WAV, la musique est alors chargée en 46 ms. Cependant la taille de l'archive de mon application augmente considérablement.

    Je cherche donc des solutions intermédiaires : plus rapide en gardant le même fichier .ogg, et si ce n'est pas possible, plus rapide sans trop augmenter la taille de l'archive. Des idées ?

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    25 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 25 596
    Points : 199 321
    Points
    199 321
    Billets dans le blog
    78
    Par défaut
    Bonjour,

    Une solution assez moyenne, mais qui peut être intéressante :
    [list][*]vous créez un nouveau thread, pour le chargement de son, comme cela, il se fait en fond, pendant que le reste du jeu se charge/s'affiche et une fois que le chargement est fini, vous jouez la musique.[/quote]

    Cela fera que la musique arrive un peu plus tard, mais cela fera que votre jeu ne bloque pas sur le chargement.

    Sinon, je vous propose de downsamplé (quel joli mot) votre son en 22kHz. En effet, j'ose croire qu'il est inutile d'avoir du son 44kHz sur un téléphone, mais là, je ne suis pas un pro.
    Finalement, je n'ai pas compris quelle partie décoder le .ogg, car dans le code que vous présentez vous semblez lire un WAV.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    octobre 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2009
    Messages : 104
    Points : 614
    Points
    614
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Bonjour,

    Une solution assez moyenne, mais qui peut être intéressante :
    • vous créez un nouveau thread, pour le chargement de son, comme cela, il se fait en fond, pendant que le reste du jeu se charge/s'affiche et une fois que le chargement est fini, vous jouez la musique.


    Cela fera que la musique arrive un peu plus tard, mais cela fera que votre jeu ne bloque pas sur le chargement.
    C'est ce qui me semble être la solution la plus efficace dans l'immédiat. J'hésite à la mettre en place car cela complexifie un peu le chargement et surtout parce qu'il n'est pas évident que le téléphone m'accorde plusieurs cœurs. Si je n'ai qu'un cœur pour mon app, il n'y aura pas de différence.

    Citation Envoyé par LittleWhite Voir le message
    Bonjour,
    Sinon, je vous propose de downsamplé (quel joli mot) votre son en 22kHz. En effet, j'ose croire qu'il est inutile d'avoir du son 44kHz sur un téléphone, mais là, je ne suis pas un pro.
    Bonne idée aussi, mais cela demande beaucoup d'adaptation dans le code et les médias. J'utilise SDL Mixer pour jouer les sons, et il est réglé sur 44 kHz globalement. Si je lui envoie du 22 kHz il ne le joue pas à la bonne vitesse. Éventuellement Je peux tenter de resampler le résultat décodé ou alors je peux passer tous mes sons en 22 kHz et n'utiliser que ça. À voir.

    Citation Envoyé par LittleWhite Voir le message
    Bonjour,
    Finalement, je n'ai pas compris quelle partie décoder le .ogg, car dans le code que vous présentez vous semblez lire un WAV.
    Mix_LoadWAV_RW() n'a de WAV que le nom. En interne elle détecte le format de fichier et charge avec le bon décodeur.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    25 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2008
    Messages : 25 596
    Points : 199 321
    Points
    199 321
    Billets dans le blog
    78
    Par défaut
    Le problème que l'on peut aussi avoir avec SDL_mixer, c'est l'utilisation des opérations à virgule flottante, qui ne sont pas toujours très rapide, notamment sur les systèmes embarqués dont les CPU peuvent ne pas avoir d'instructions pour. Donc, je serai assez méfiant.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Inactif
    Profil pro
    Inscrit en
    octobre 2013
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2013
    Messages : 83
    Points : 66
    Points
    66
    Par défaut
    Je connais quedalle aux androids, mais, un principe:

    - les sons courts sont joués en buffer statique et ils se chargent vite puisqu'ils sont courts

    - les sons longs (musique) sont joués en buffer circulaire dynamique histoire de pas encombrer la ram, donc ils se chargent au fur et à mesure qu'ils se jouent, et donc y'a pas de temps de chargement

    donc si tu fais ça y'a pas de loading qui traine

    Je sais pas si t'as appliqué ça dans ton code.

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    octobre 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2009
    Messages : 104
    Points : 614
    Points
    614
    Par défaut
    Effectivement je ne fais pas de chargement progressif de la musique et cela me semble une très bonne piste d'amélioration. Il faut que je trouve dans SDL Mixer comment gérer cela.

    Pour l'instant j'ai mis le chargement dans un thread et je me retrouve avec un chargement du niveau complet en 4 secondes environ. C'est clairement la musique qui bloque.

    En tout cas ça commence à être acceptable.

    C'est amusant car sur le PC la musique se charge très vite et se sont les images qui occupent le temps de chargement.

  7. #7
    Membre actif
    Profil pro
    Programmeur Audio
    Inscrit en
    décembre 2010
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur Audio
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : décembre 2010
    Messages : 127
    Points : 221
    Points
    221
    Par défaut
    Tu peux regarder de ce coter la:
    http://www.libsdl.org/projects/SDL_m..._mixer_52.html

    La SDL a du code specifique pour gerer la musique et la streamer

Discussions similaires

  1. Fusion des fichiers son
    Par Abstract_cl dans le forum Audio
    Réponses: 9
    Dernier message: 25/08/2007, 15h18
  2. Réduire le temps de chargement
    Par cqfd55com dans le forum Access
    Réponses: 4
    Dernier message: 20/02/2007, 18h58
  3. Nbr de chargement des fichiers des <link>
    Par durand2504 dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 14/03/2006, 11h43
  4. Temps de chargement des applications .NET
    Par kamal101 dans le forum Visual Studio
    Réponses: 3
    Dernier message: 17/11/2005, 10h11
  5. [Audio]Lire des fichiers sons
    Par Ender dans le forum Multimédia
    Réponses: 6
    Dernier message: 05/10/2005, 02h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo