cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 2010
-
2 juil. 2005 à 01:06
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 2010
-
6 juil. 2005 à 19:35
Voila je realise un lecteur mp3 en ce moment et il y a un probleme
lorsque je ve supprimer un mp3 : il ne supprime pas la ligne de ma list
mais il la remplace par un blanc .
lorsque j'ajoute un mp3 :
if ($did == 3) {
var %a $$sfile(c:)
var %b 1
while ($hget(Mp3,%b)) {
if ($nopath(%a) == $ifmatch) { var %c dd }
inc %b
}
if (%c) { echo -a Tu ne peux
ajouter cette chanson car elle est deja dans ta playlist }
else {
inc %nb
var %artiste $$input(Nom :,e,Quel est le nom de l'artiste de la chanson)
Hadd -m mp3 %nb $nopath(%a)
Hadd -m chemin %nb %a
hadd -m artiste %nb %artiste
liste
}
}
on s'interesse juste au Hadd -m mp3 %nb $nopath(%a)
cs_tofu
Messages postés1726Date d'inscriptionvendredi 12 septembre 2003StatutMembreDernière intervention13 juin 20091 2 juil. 2005 à 11:29
je crois que ya un décalage entre le nb de ligne et le nb d'entrée dans
la table, enfin je sais que perso j'étais obligé d'utiliser $calc()
pour déplacer vers le haut toutes les entrées de ma table qd je
délétais une ligne du milieu..
ce qui donne un truc dans ce genre: (c'est tiré d'un remote à moi donc ça marchera pas tel quel sur ton script..)
" if $did == 12 { did -d $dname 6 $did(6).sel | var %x 1 | while
$did(6,%x) { hdel exa.away $+(r-,$calc(%x +1)) | hadd exa.away
$+(r-,%x) $ifmatch | inc %x } | halt }"
-1337 connexion-
MaX_62
Messages postés879Date d'inscriptionvendredi 22 octobre 2004StatutMembreDernière intervention29 juin 2007 2 juil. 2005 à 07:51
Je pense qu'il fait plutot faire comme ça pour la boucle :
et l'alias liste :
alias liste {
did -r mp3 2
var %o^ 1 , %ù^ $hget(mp3,0).item
while (%o^ <= %ù^) { did -a Mp3 2 $hget(Mp3,%o^) | inc %o^ }
hsave Mp3 Mp3
}
Nolson
Messages postés216Date d'inscriptionmardi 7 novembre 2000StatutMembreDernière intervention16 mars 2006 2 juil. 2005 à 11:53
Concernant la première boucle qui vérifie si la chanson existe avant de l'ajouter, il vaut mieux la supprimer et utiliser $hfind.
Pour ton problème de ligne vide c'est normal, regardons ce qui se passe.
Imaginons ta table initiale :
item valeur
1 chanson A
2 chanson B
3 chanson C
4 chanson D
Tu veux ajouter chanson E, elle n'existe pas, donc il ajoute
5 chanson E
Ensuite, actualisation de la list (alias liste).
Ta liste de MP3 devient :
chanson A
chanson B
chanson C
chanson D
chanson E
Puis tu décides de supprimer chanson B qui se trouve être sur la ligne 2 de ta list, il va supprimer l'item nommé 2.
Ta table devient :
1 chanson A
3 chanson C
4 chanson D
5 chanson E
Ensuite, actualisation de la list (alias liste)
Tu vas boucler tant que $hget(Mp3,%a).item existe, donc 4 fois puisque il y a 4 items dans ta table, en partant de 1.
Tu fais afficher dans ta list $hget(Mp3,%a), donc la valeur de l'item %a et non la valeur de chaque item existant.
Affichage des items 1, 2, 3, 4 et non 1, 3, 4, 5.
Donc dans ta list tu auras ceci :
chanson A
chanson C
chanson D
L'item 2 n'existant plus il te met une ligne blanche et il ne t'affiche même plus la dernière chanson ajoutée.
C'est juste la méthode qui est à revoir.
J'espère avoir répondu à ta question : "j'vois pas pourquoi".
Bonne continuation.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_tofu
Messages postés1726Date d'inscriptionvendredi 12 septembre 2003StatutMembreDernière intervention13 juin 20091 2 juil. 2005 à 12:22
sinon ce que tu peux faire c'est ta liste, tu l'as en .txt (file
handling pour la vitesse d'exécution) ap qd tu del une ligne, tu refais
un /loadbuf sur ton fichier et ça remet tout en place je pense. ça
pourrait être une alternative viable enfin à tester tout du moins..
-1337 connexion-
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 2 juil. 2005 à 13:33
Voila j'ai reussis.Mais pour rajouter dans la table mp3 c'etais pas dur
par contre j'enregistrais le chemin du mp3 ds une table il a fallu que
je fasse des ptit reglage ca donne ca :
Nolson
Messages postés216Date d'inscriptionmardi 7 novembre 2000StatutMembreDernière intervention16 mars 2006 2 juil. 2005 à 13:54
Tu dis : "Oui mais sa j'avais compris"
Euh...??? Tu avais bien dit il me semble : "quand je ve supprimer il remplace la chanson par un blanc j'vois pas pourquoi"
Moi je t'ai expliqué pourquoi.
Ensuite, connaissant la cause, je sais que tu as un niveau plutôt correct en mIRC scripting pour pouvoir rectifier le tir. Pour les débutants je conçois qu'on puisse donner carrément certaines solutions ou les façons de procéder, mais pour les autres, il me semble qu'il suffit de leur donner la cause de l'erreur pour que par eux-même ils puissent corriger. Si vraiment, par la suite après diverses recherches, le scripteur chevronné ne trouve pas, on peut lui donner une soluce si on en a une.
Moi en tous cas, je préfère qu'on me dise d'où vient mon erreur plutôt qu'on me donne la solution directement.
Mais si tu en voulais une directement, fallait la demander
Nolson
Messages postés216Date d'inscriptionmardi 7 novembre 2000StatutMembreDernière intervention16 mars 2006 3 juil. 2005 à 18:42
Pas de problème wims, mais la prochaine fois pose mieux ta question parce que quand on me dit "je vois pas pourquoi" pour moi ça veut bien dire "je ne vois pas pourquoi"
Hades53
Messages postés231Date d'inscriptionmercredi 12 février 2003StatutMembreDernière intervention 7 juillet 2009 5 juil. 2005 à 19:46
Bonjour,
juste pour dire qu'il serait vraiment très judicieux de ne pas utiliser de hash table dans le cas présent.
Cela conduira à une lenteur assez prononcée à cause de nombreuses opérations de pseudo-décalage.
Une bonne solution consiste à utiliser une liste MDX avec colonnes, une
colonne cachée (de taille 0) servira à stocker le chemin du fichier.
Ou alors tu peux utiliser une fenêtre cachée (ou un listbox cachée),
que tu rempliras avec les chemins des fichiers, ainsi un simple /dline
servira à supprimer proprement une ligne (il faudra aussi supprimer la
ligne dans la liste du dialog).
Hades53
Messages postés231Date d'inscriptionmercredi 12 février 2003StatutMembreDernière intervention 7 juillet 2009 5 juil. 2005 à 21:22
Ah bon, tu n'utilises plus de hash pour stocker les chemins des fichiers ?
Cependant faut faire également attention avec les fichiers txt, un
/write -d ou un /write -i équivaut à décaler un grande partie des
données du fichier, à petite echelle, ça risque de pas se remarquer,
mais à grande echelle (plus de 2000 mp3), ça risque d'être nettement
plus lent
Hades53
Messages postés231Date d'inscriptionmercredi 12 février 2003StatutMembreDernière intervention 7 juillet 2009 5 juil. 2005 à 23:53
oui je sais ça, c'est évident.
Seulement /write -dl décale tout les données du fichier, afin de
supprimer la ligne et de décaler vers le haut les lignes d'en dessous.
L'insertion de ligne ou supression de ligne n'est pas une opération 'standard' dans les fichiers.
C'est pour ça qu'aucune fonction du file handling de mIRC ne te permet
d'insérer ou de supprimer des octets n'importe où dans le fichier
(généralement on peut juste insérer et supprimer à la fin).
En gros ce que je voulais te dire c'est que /write -dl effectue une
opération 'lourde' est pas franchement rapide, et qu'il est possible de
trouver des solutions nettement plus rapide
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 6 juil. 2005 à 00:13
Hum ok et j'aurais une question, pour mon mp3 je voudrai utilisé tes
alias $wav et $wma seulement je n'y arrive pas et jvoulais savoir
pourquoi ne pas avoir fait $midi :p
$wav(fichier).***
"fichier" dois etre le nom complet ex : c:\windows\blabla.wav
ou alors juste le nom : blabla.wav
Si il faut tout le repertoire , si il y a des espace ca marchera ?
Hades53
Messages postés231Date d'inscriptionmercredi 12 février 2003StatutMembreDernière intervention 7 juillet 2009 6 juil. 2005 à 01:57
$wav(fichier) ou $wma(fichier), fichier doit être un nom complet:
c:\windows\blabla.wav, ça marche également si il y a des espaces, ex:
C:\Mes sons\Son sympa 1.wav
Et pour le $midi, j'avais tenté d'en faire un, mais après pas mal
d'efforts, j'ai lâché prise, à vrai dire; le format est assez
compliqué. Par exemple pour obtenir la durée, il faut calculer le temps
de tous les channels, en sachant que le temps s'obtient en additionant
le temps de toutes les notes (noire, blanche, ronde, triolet, etc..) et
de tout les silences (soupir, silence, etc..), et pour calculer le
temps d'une note il faut faire une opération avec le tempo actuel, en
sachant que le tempo peut changer, et tout ça sans compter les
éventuelles note maintenues avec la pédale... Bref, c'est un peu chiant
de coder ça :p
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 6 juil. 2005 à 02:55
Hum j'ai essayer mais $wav($insong.fname).format ou
$wav($insong.fname).channels ne me retourne rien alors que
$insong.fname retourne bien le chemin du wav
Est -il possible que ca ne retourne pas l'information pour certains wav ?