Gagnez en vitesse dans un mp3 player grace au hash table

Contenu du snippet

Le gros problème des lecteurs mp3 en mirc script est souvent la lenteur de loading des playlists , quand on scanne de gros dossier. Ce problème est completement resolue avec l'utilisation des hash tables qui permettent en gros le scanning de 4000 fichiers en 852 milisecondes ( soit 0.8 seconde ) , ce calcul prend en compte aussi le loading dans la liste du player. Mais tout dépend de la puissance de votre ordinateur ( 3 a 5 secondes pour un pentium 3 )

Pour comprendre comment ça marche j'ai codé avec Chang-Fu ce lecteur mp3 rudimentaire ou la fonction /stock vous montre l'illustration du texte ci dessus.

Cette astuce montre aussi l'utilisation de $shortfn pour s'affranchir du problème des espaces.

Source / Exemple :


#alias utilisant l'astuce (codés par Kerrigan )
alias stock {
  set %itr 0
  if ( $hget(mp3) ) { .hfree mp3 }
  hmake mp3 500
  echo -a $findfile($sdir(c:\,choisissez un répertoire a scanner),*.mp3,0,add $1-) files scanned
  dialog -m mp3 mp3 | set %itr 1
  while ( $hget(mp3,n $+ %itr) ) { did -a mp3 4 $nopath($ifmatch) | inc %itr }
}

alias add { inc %itr | hadd mp3 n $+ %itr $1- }

dialog mp3 { 
  title HashTable Player - Time: None - None
  size -1 -1 400 250
  button "Play",1 ,5 200 50 20,flat
  button "Stop",2 ,60 200 50 20,flat
  button "Fermer", 3,355 225 40 20,ok,flat
  list 4 , 5 5 390 200
  scroll "Volume",5,5 225 300 20,horizontal range 65535
}

on 1:dialog:mp3:dclick:4:{ mpsplay $did($did).sel }
on 1:dialog:mp3:init:0:{ did -c mp3 5 $vol(wave) }
on 1:dialog:mp3:mouse:5:{ vol -w $did(5).sel }
on 1:dialog:mp3:sclick:2,3:{ splay stop }
on 1:dialog:mp3:sclick:1:{ mpsplay $did(4).sel } 
on 1:mp3end:{ mpnext }

#alias pour le style ( codés par Chang-Fu )
alias mpnext { did -c mp3 4 $calc($did(mp3,4).sel +1) | mpsplay $did(mp3,4).sel }
alias mpsplay { splay $shortfn($hget(mp3,n $+ $1)) | echo -a Playing: $hget(mp3,n $+ $1) | .timertitle 0 1 mptime }
alias mptime { 
  if ($dialog(mp3)) { dialog -t mp3 HashTable Player - Time: $duration($calc($insong.pos /1000)) - $duration($calc(($sound($insong.fname).length - $insong.pos) /1000)) }
  else { .timertitle off }
}

Conclusion :


Dans la suite du code Chang-Fu a mis des alias pour que vous puissez exploiter la hash table pour lire les morceaux dans la liste.

Attention ce code , ça n'a rien a voir avec un vrai lecteur mp3, et si vous prenez la source vous devrez la compléter énormément pour que le lecteur ressemble a quleque chose.

Pour lancer l'alias taper /stock dans le status , apres avoir copier la source dans vos remotes

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.