[..] Avis méthode pour création d'une playlist - SQLite

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
SurPriseS
Niveau 6
Niveau 6
Messages : 293
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

[..] Avis méthode pour création d'une playlist - SQLite

#1

Message par SurPriseS »

Bonsoir,
Je bosse actuellement sur un player MP3 basé sur bass.dll et je me demande qu'elle serrais la méthode la plus approprié pour créer une liste de lecture ?

- Grande capacité de stockage
- Sauvegardable pour être rechargé au prochaine lancement du logiciel

J'ai l'habitude d'utiliser des fichiers ini, mais je suis pas certain que se soit la solution la plus efficace pour se faire... J'ai vu des trucs sur SQL qui pourrais peut être être sympa... Ou peut être tout simplement des fichiers classique M3U...

En gros comment stocké efficacement la playlist en cours de lecture ? et quelle méthode vous semble la plus intéressante ?

Merci pour vos avis ;)
Modifié en dernier par SurPriseS le ven. 29 avr. 2011 16:55, modifié 1 fois.
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Avis méthode pour création d'une playlist

#2

Message par zeshrek »

fichier.ini

Code : Tout sélectionner

[Current play]
Playlist = chemin vers le fichier m3u
Playing = N° de la ligne dans le m3u
de rien
Si vis pacem para bellum
SurPriseS
Niveau 6
Niveau 6
Messages : 293
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [..] Avis méthode pour création d'une playlist

#3

Message par SurPriseS »

Je pense que je me suis peut être mal exprimé :$

enfaite je demande plus qu'elle serrais la solution la plus intéressante pour stocker une playlist.

J'ai commencé hier soir à testé avec du M3U, mais je pense que sa va pas être "top"...

Pour afficher correctement les données je doit récupérer les Id TAG, c'est pas trop un soucis, mais dans une grosse playlist, je vais devoir aller ouvrir et fermé toutes les chansons une par une pour lire les tag, et les stocker en array...

Donc en y réfléchissant cette nuit, je me suis dit qu'il serrais plus 'efficace' de stocker ça dans un fichier ou une table SQL, ou je ne sais quel autre moyen...

Il faudrait que je stock dans un fichier, le chemin vers le fichier, et avec une séparation le TAG (comme ça j'évite de lire le TAG à chaque fois)

La solution fichier me parait plus simple à mettre en place, mais niveau rapidité on peut être faire mieux par un autre moyen ?

Voilà, mais bon je sais pas si je suis plus clair :D
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

Re: [..] Avis méthode pour création d'une playlist

#4

Message par zeshrek »

heuuuuu ton algo pour lire les tags oit pas etre hyper rapide !
Pour info, en 2001 (P... 10 ans !) j'avais fait un outil pour partager des MP3 sur un site web*. Cet outil était en PHP, hébergé par un Apache, qui tournait sur un nunux de l'époque, tout ce beau monde sur... un Pentium III a 450mhz.
Comme la liste des MP3 était tres fluctuante, les tags n'étaient pas stockés en BDD, et il lui fallait moins d'1mn pour récupérer plus de 20.000 tags.
Alors je veux bien que linux 'donne' plus de puissance que windows, mais bon, c'est plus que largement compensé par la puissance des processeurs non ? logiquement selon la loi de Moore en 10 ans on a gagné un facteur d'envion 60 dans la performance cpu. Me dis pas que tout ca est consommé par windows !
Et comme je crois pas que pour ce genre e choses Autoit soit moins performant que PHP, bah... faut que tu revoies la facon ont tu recuperes tes tags (ou alors c'est que tu as un sacré paquet de mp3 !



* avant qu'on m'en fasse la remarque, je sais que partager des mp3 c'est mal, d'ailleurs je le fais plus, j'ai plus de serveur, tout ca....
:)
Si vis pacem para bellum
SurPriseS
Niveau 6
Niveau 6
Messages : 293
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [..] Avis méthode pour création d'une playlist

#5

Message par SurPriseS »

C'est pas mon algo, et je me plante peut être, c'est pte nickel en récupérant tout les tag à chaque fois...

Enfaite, avec bass.dll, pour récupérer les tag, il faut :
- "loader" le mp3
- récupérer le tag
- fermé la comm

Donc je me dit que récupérer les tag dans un fichier ou une bdd serrais plus rapide... Mais les bdd c'est un truc que je connais pas du tout en autoit, je galère déjà avec les array :[

Je vais essayer de fouiller voir si y'a un autre moyen pour lire les TAG ;)

Merci pour les info en tout cas :)

>>> je suis un boulay, y'a un UDF nickel pour récupéré en une seul fois le TAG...
Edit 2 >>> Ne fonctionne pas avec du Flac...

Donc, je vais utiliser le format M3U et sa devrais le faire ! on va tester de toute façon, a part du temps je perd pas grand chose xD
SurPriseS
Niveau 6
Niveau 6
Messages : 293
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [..] Avis méthode pour création d'une playlist

#6

Message par SurPriseS »

Bonjour :)

Finalement, après pas mal de temps de réflexion, j'ai décidé d'utiliser le SQL pour ma base, sa me permettras plus de rapidité, enfin, je pense...

Je pensais faire 2 bases :
- Une avec la playlist en cours
- Une avec toutes les chansons

Mais ne serrais pas plus simple/propre de faire une seule base, et plusieurs 'tables' ? j'ai de toute petite notion de SQL alors je ne sais pas trop ce qu'il est possible de faire avec cet outils ;)

Pour le moment, j'ai juste fait 2 fonctions toute bêtes, une qui lit dans un fichier M3U, récupère les IDTAG, et les insères dans la base. L'autre qui lit la base et insère tout ça dans la listview...

Il va falloir que je fouille pour les améliorer, et surtout éviter les doublons quand je rajoute des fichiers dans la base...
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Avis méthode pour création d'une playlist - SQLite

#7

Message par jchd »

Deux bases ? Nada, no way, niet komrad !

Non, sérieusement, tu fais une seule base et plusieurs tables. Si tu veux faire un outil un tant soit peu puissant, il te faut ou faudra des possibilités de sélection par artiste, titre, thème, genre, période, etc. Tu peux toujours complexifier une base en créant des tables supplémentaires pour découpler l'information, affiner les possibilités et augmenter la normalité de ta base. Je veux dire par là que la chaîne 'Madona' ne devrait figurer qu'une seule fois dans la base, par exemple, dans la table Artistes.

Débute donc avec uns structure simple que tu maîtrises (dans une seule base) et tu ressentiras vite les besoins d'une structure plus complète.

D'une façon générale, SQLite est un moteur très performant et extrêmenent souple. Ne t'inquiète pas de ses possibilités, elles dépassent --et de beaucoup-- les besoins d'une playlist sophistiquée.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
SurPriseS
Niveau 6
Niveau 6
Messages : 293
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [..] Avis méthode pour création d'une playlist - SQLite

#8

Message par SurPriseS »

Ok, merci ;)

Là j'essaye de comprendre comment fonctionne _SQLite_Query enfin, je pense que c'est la commande à employer pour faire une recherche, pour le moment, j'ai juste un tableau, et j'essaye de faire une recherche dans la colonne 2 pour ressortir le résultat de la colonne 1...
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Avis méthode pour création d'une playlist - SQLite

#9

Message par jchd »

Laisse _SQLite_Query où il est et emploie plutôt _SQLite_GetTable[2d] ou _SQLite_QuerySingleRow.
Ces fonctions sont de plus haut niveau et t'évitent justement d'avoir à mettre les mains dans le cambouis.

Euh, pour ce qui est de tes colonnes 1 et 2, je n'ai aucune idée de ce dont tu parles, donc précise un peu le schéma et ce que tu veux obtenir.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
SurPriseS
Niveau 6
Niveau 6
Messages : 293
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [..] Avis méthode pour création d'une playlist - SQLite

#10

Message par SurPriseS »

Ok merci, je vais fouiller de ce coté alors ;)

Enfaite ma structure actuelle :

Table musique :
2 colonnes (je sais pas comment on appelle cette partie :oops: ), une URL, avec le lien complet de la chanson, et le second IDTAG, avec le tag de la chanson.

La colonne IDTAG est affiché dans ma listview, et selon la chanson sélectionné dans ma listview, il faut que je retrouve l'URL qui va avec.

Je sais pas si c'est beaucoup plus clair :p

Trouvé :

Code : Tout sélectionner

    $read_listfolder = GUICtrlRead($ListFolder)
    _SQLite_QuerySingleRow($bdd,"SELECT url FROM musique WHERE IDTag = '"& $read_listfolder &"' LIMIT 1;",$aRow)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Avis méthode pour création d'une playlist - SQLite

#11

Message par jchd »

TOUJOURS quoter (au sens SQL) un littéral texte. Utilise _SQLite_Escape pour protéger ton littéral (doubler d'éventuelles apostrophes dans le littéral).

La version _SQLite_Escape proposée par l'UDF est très lourde et les modifs que j'y ai apportées ne sont pas encore sorties (pas de version release depuis). Perso, j'emploie X() pour le premier littéral texte et XX() pour les suivants :

Code : Tout sélectionner

Func X($s)
    Return ("'" & StringReplace($s, "'", "''", 0, 1) & "'")
EndFunc   ;==>X

Func XX($s)
    Return (",'" & StringReplace($s, "'", "''", 0, 1) & "'")
EndFunc   ;==>XX

Func Y($s)
    Return ("X'" & Hex($s) & "'")
EndFunc   ;==>Y

Func YY($s)
    Return (",X'" & Hex($s) & "'")
EndFunc   ;==>YY

Func Z($s)
    Return (Number($s))
EndFunc   ;==>Z

Func ZZ($s)
    Return ("," & Number($s))
EndFunc   ;==>ZZ
 
Ton SQL devient :

Code : Tout sélectionner

...where idtag LIKE" & X($variable) & ...
XX() est à utiliser pour les champs suivants car cette fonction insère une virgule. Y() et YY() font la même chose pour des variables binaires, Z() et ZZ() pour des valeurs numeriques.

Les noms très courts que j'emploie ne sont certes pas assez parlants, mais le nouveau nom proposé est trop lourd à mon goût _SQLite_FastEscape($variable). Je préfère X() et ses petis frères pour la lisibilité, par exemple :

Code : Tout sélectionner

    _SQLite_Exec($hADB, "insert into _Anomalies (Quand, Quoi, Reference, Texte) values (" & _
                                X(_NowCalc())& _
                                XX("Fiche de vente")& _
                                ZZ($fiche[$fv_numfiche])& _
                                XX("Code postal invalide.") & ");")
 
Si un jour le dernier libellé devient Le code postal n'est pas valide l'opération fonctionnera encore normalement. Sinon, BOUM !

Revenons à ta chanson...

Premier hiatus AMTHA : il te faut découpler l'URL du titre. Si l'URL disparaît, le titre ne doit pas disparaître, mais devenir indisponible (temporairement ou --bien moins probablement-- définitivement). Un titre peut aussi avoir plusieurs URLs, parfois le même enregistrement mais dans des formats distincts (Flac ou MP3, avec clip vidéo ou pas, que sais-je ?). Un titre aura vraissemblablement plusieurs versions (single, album, concert ici ou là, version instrumentale, ...).

Tu "sens" que ces deux données sont liées, mais ont une certaine indépendance qu'il vaut mieux se donner les moyens de retranscrire dans la base. Une base est justement faite pour ça : assurer des liens relationnels éventuellement complexes entre des données de nature différentes.

Si tu laisses tout en vrac dans une seule table, tu arrives vite à un sac de noeuds pour l'usager : 156 versions différentes et non classées d'un seul et même titre de tel artiste. Même si tu n'as pas l'ambition de rivaliser avec freedb (voir le site) il est intéressant de s'inspirer (tout ou partie) de ses principes de fonctionnement. freedb ou autre, évidemment. Rien ne t'empêche non plus de viser la compatibilité avec freedb (éventuellement à terme).

Rien de cela n'est envisageable avec des moyens de stockage rudimentaires (fichier plat ou assimilés) tndis que mettre en oeuvre une base décente n'est pas très compliqué et surtout s'avèrera beacoup plus simple à gérer si tu fais évoluer ta réalisation.

Ici comme ailleurs bien souvent, ce n'est que le premier pas qui compte.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
SurPriseS
Niveau 6
Niveau 6
Messages : 293
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [..] Avis méthode pour création d'une playlist - SQLite

#12

Message par SurPriseS »

Han, merci pour toute ces précisions !

Sa résoudras en plus mon problème de " ' que j'avais je pense !

Je testerais sa des que j'aurais le temps !

Sinon, pour ce qui est de "ranger" la bdd, je suis tout à fait d'accord, mais pour le moment (et c'est peut être une erreur), je veux faire fonctionner toutes les fonctions de "base".
J'ai pas trop mal avancé et toutes les fonctions quasiment basique d'un lecteur audio sont implanté, et semble fonctionné ;) (lecture/stop/pause/suivant/avance rapide/précédent/retour rapide), y'a surement pas mal d'optimisation à faire, mais bon, "sa marche", et c'est déjà pas mal !

Pour le moment, j'utilise une listview pour l'affichage des titres, mais je pense que ce n'est pas une solution "viable" à terme...

Pour la compatibilité avec FreeDB, j'y ai songé, le "soucis" c'est que c'est un programme dédié à être installer dans une voiture, donc pas de connexion internet réelement dispo, FreeDB, propose des version 'offline' de sa base de données, mais je ne sais pas trop comment exploité ça...
En tar.gz, elle ne prend pas trop de place, par contre une fois complètement dézipper, elle pèse vraiment très lourd :\
Je me suis pas penché sur la question, mais il est peut être possible de "lire" la bdd, directement en tar.gz


Bref, j'ai pas mal d'idée en tête, mais pour un débutant, qui n'as quasiment aucune notion de programmation, bah, y'a du boulot ! :D

Merci en tout cas pour toutes les info ;)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Avis méthode pour création d'une playlist - SQLite

#13

Message par jchd »

Non je ne critique rien, je te donne seulement des pistes. Il faut progresser à son rythme sinon on se prend les pieds dans les tapis et un beau jour on lâche tout par découragement, débordé par trop de "todo".

Euh, pourquoi proposer une URL si pas de net ?

Tu n'as peut-être pas besoin de toutes les tables/colonnes de freedb. A creuser.

Débutant ? Bah, la motivation remue des montagnes.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
SurPriseS
Niveau 6
Niveau 6
Messages : 293
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [..] Avis méthode pour création d'une playlist - SQLite

#14

Message par SurPriseS »

Enfaite, j'ai mis URL, parce que c'était plus "simple" que de mettre chemin, ou je ne sais quoi d'autre ^^

ça correspond juste au C:\musique\truc\bidule.mp3

Ma "base", fait juste le lien entre l'adresse du fichier, et son IDTag, même si c'est vrai que je prend le risque d'avoir plusieurs fois le même IDTag et donc de me mélanger les pinceaux...

Mais oui, j'y vais à mon rythme, avec l'aide trouvé ici ou là, et pour le moment sa avance pas trop mal (même si faudrait que je prenne vraiment du temps pour rangé un peu mon code, qui est pas vraiment lisible...). Je bute encore sur quelques problèmes, mais les solutions finirons bien par être trouvées !
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Avis méthode pour création d'une playlist - SQLite

#15

Message par jchd »

Ah OK, c'est plus clair.

Bon courage en tout cas. Tu sais où sonner si tu as besoin d'aide !
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
overflow
Niveau 5
Niveau 5
Messages : 138
Enregistré le : sam. 05 déc. 2009 23:49
Status : Hors ligne

Re: [..] Avis méthode pour création d'une playlist - SQLite

#16

Message par overflow »

Bonsoirs

En lisant le sujet je me suis intéresser au Tag des mp3

en faite si tu a les bonnes structures tu ne doit pas avoir a passer par un prog tiers qui te fait perdre du temp

en cherchant sur wiki je suis tombé sur ca

http://fr.wikipedia.org/wiki/ID3

et du coup je me suis lancer dans un test de lecture de tag
► Afficher le texte

ce script inscrit les tag dans un fichier ini
et dans la derniere clef c est le temps en milliseconde et le nombre de fichier traiter

je me suis aperçu après coup que les dernier tag en date ID3V2.4 avait une en-tête en début de fichier
donc c est juste pour voir un peut comment cela peut se traiter
j ai pas tester non plus sur du wma


je n est pas de gros rep mp3 mais la ca m a donner ( script compiler ) 237.381846016742 milli/ 63 fichier
ca représente plus de 15000 fichier a la minute dans un même répertoire
(encore que le tableau auras peut etre pété les plombs avant ^^ )


hadopi ?? hein koi koi ?
SurPriseS
Niveau 6
Niveau 6
Messages : 293
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [..] Avis méthode pour création d'une playlist - SQLite

#17

Message par SurPriseS »

Enfaite, j'ai pas trop fouillé de ce coté, comme noté plus haut je débute :oops:

J'ai trouvé une UDF qui fait sa très bien sur du MP3, mais incapable de le faire sur du FLAC... Et j'utilise quasi exclusivement du FLAC...

J'essayerais avec ton exemple en tout cas ;)

Merci pour la piste ;)
SurPriseS
Niveau 6
Niveau 6
Messages : 293
Enregistré le : jeu. 06 sept. 2007 11:35
Localisation : Finistère sud
Status : Hors ligne

Re: [..] Avis méthode pour création d'une playlist - SQLite

#18

Message par SurPriseS »

Bonsoir :)

J'avance dans la création de ma base, j'ai galéré avec des trucs cons, mais bon...

overflow > j'ai testé vite fait ton script, sa roule sur du FLAC aussi ;)

Je vais essayer d'utiliser ça plutôt que ma méthode ;)

Merci !


>>> Edit : Enfaite ça ne fonctionne pas sur tous, je pense à une différence de lecture entre TAG V1 / V3...

je fouillerais quand j'aurais le temps :)
Répondre