Projet de lecture RFID + GUI - C++ - Programmation
Marsh Posté le 10-07-2013 à 19:08:07
Bonjour !
Étant assez fan de Qt (que je pratique depuis 10 ans), je ne peux qu'approuver votre choix !
En revanche, n'ayant jamais travaillé sur Mac', je ne saurais guère vous conseiller au niveau du compilateur et/ou de l'API AppleScript.
Pour la configuration et les bibliothèques dynamiques, je confirme, c'est bien un problème de path (ou de DYLD_LIBRARY_PATH, en l'occurrence). En revanche, sous Linux, l'option "rpath" fonctionne avec g++, xcode ne la gère pas ?
Et, pour finir, concernant votre approche, rien de particulier à redire, une vision incrémentale me paraît tout à fait adaptée.
Bon courage et tenez nous au courant de votre progression !
Marsh Posté le 14-07-2013 à 20:29:49
Cela semble bien fonctionner jusqu'alors sur Qt Creator, je pense donc rester dessus pour le moment.
J'ai appris presque par hasard que Qt propose bien plus que du fenêtrage, c'est pas mal du tout !
Ma première question est basique.
Je compte récupérer la liste des albums iTunes via un AppleScript :
Code :
|
Ça me sort donc une liste des albums et des artistes associés (du style {"Album 1;Artiste 1", "Album 2; Artiste 2", etc}).
Pour la récupérer dans mon programme C++, puis-je utiliser une commande (QProcess::execute() par exemple) ou dois-je la stocker dans un fichier que je lis ensuite avec le programme ?
Dans le cas de QProcess::execute(), la fonction retourne -2, -1 ou 0, mais puis-je récupérer la sortie d'une commande système via cette fonction ?
Marsh Posté le 14-07-2013 à 20:46:41
Ton programme n'aura jamais besoin de tourner sur une machine qui ne soit pas Apple ?
Parce que je soupçonne que l'AppleScript ne fonctionne pas top pour dialoguer avec un iTunes sous windows ... Peut-être que je me trompe, cela dit.
De même, je trouve la dépendance forte vers un lecteur de musique spécifique un peu contraignante, mais ca, c'est aussi notamment une question de goût.
Marsh Posté le 14-07-2013 à 22:39:03
theshockwave a écrit : Ton programme n'aura jamais besoin de tourner sur une machine qui ne soit pas Apple ? |
En effet, si je souhaite le distribuer, il faudra que je l'adapte pour les autres systèmes et lecteurs, car pas d'AppleScript sous Windows par exemple.
Mais mon niveau en C++ est encore trop faible pour déjà me soucier de portabilité et d'API, si j'arrive à mener à bien ce projet pour qu'il fonctionne chez moi ce sera déjà un grand pas
Je peux par contre m'efforcer de développer le truc de sorte à ce qu'il soit modulable et donc pouvoir facilement ajouter un nouveau lecteur...
Marsh Posté le 23-07-2013 à 14:56:27
J'ai un petit soucis avec mon parser XML.
J'utilise QtXML sur cet extrait de la librairie iTunes (qui n'utilise pas vraiment XML de façon standard comme vous le remarquerez), ce qui me permet de pouvoir trouver la liste des albums iTunes toutes plateformes confondues sans passer par AppleScript.
J'ai modifié le nom de certains tags pour pouvoir les repérer dans la sortie.
La logique est la suivante : j'analyse tous les tags et leurs enfants (et leurs enfants, etc) jusqu'à trouver un <key> qui contient Album, auquel cas j'affiche le contenu du tag suivant qui contient le nom de l'album en question.
Voici mon code :
Code :
|
Et voici ma sortie...
En commentant la ligne qui indique le tag analysé, je souhaiterai que le programme ne me sorte que les deux albums listés dans le XML.
Je n'arrive pas à comprendre pourquoi il tourne en boucle, j'ai l'impression de faire tous les tests nécessaires pour ne séléctionner que ce que je cherche.
Des idées ?
Marsh Posté le 24-07-2013 à 11:33:09
wizardman a écrit : J'ai un petit soucis avec mon parser XML. |
Bonjour !
Plutôt que de continuer à chercher ce qui ne va pas dans votre code, je suis reparti d'un vieux code de parsing DOM que j'avais écrit il y a 10 ans (!) et que j'ai adapté pour l'occasion :
Code :
|
qui est appelée ainsi :
Code :
|
Le résultat est satisfaisant :
Code :
|
(je ne m'explique pas les sauts de ligne ... et la flemme de chercher ou de tester en dehors de QtCreator )
Ensuite, j'ai tenté une approche plus ambitieuse, qui récupère pour chaque album toutes les infos dans une map (clé, valeur) :
Code :
|
l'appel et l'affichage se faisant ainsi :
Code :
|
On obtient alors :
Code :
|
Et vous pouvez ensuite accéder directement aux champs qui vous intéressent, par exemple l'affichage de l'artiste du nom de tous les albums :
Code :
|
Bonne continuation !
Marsh Posté le 24-07-2013 à 17:11:04
Juste une proposition pour le pb de portabilité, je me disais que Java aurait été un choix peut-être plus judicieux; restait le pb du "pilotage" d'itunes. Après une rapide recherche sur Google "java iTunes", il semblerait qu'il existe une API pour java permettant de piloter iTunes :
http://code.google.com/p/java-itunes-api/wiki/Welcome
Marsh Posté le 24-07-2013 à 18:08:43
rufo a écrit : Juste une proposition pour le pb de portabilité, je me disais que Java aurait été un choix peut-être plus judicieux; restait le pb du "pilotage" d'itunes. Après une rapide recherche sur Google "java iTunes", il semblerait qu'il existe une API pour java permettant de piloter iTunes : |
mais apparamment, cette API est seulement pour OSX
Marsh Posté le 24-07-2013 à 18:51:01
Merci Farian pour tes recherches. Elles m'ont permis, avec une aide sur Stackoverflow, d'en venir au code suivant en abandonnant la récursivité et en allant directement cherche le tag qui m'intéresse :
Code :
|
Rufo: peut-être oui, mais je ne suis vraiment pas familier de Java, et je préfère voir large avec le C++ qui est vraiment toutes plateformes pour le coup !
Marsh Posté le 10-07-2013 à 18:40:16
Bonjour à tous,
Je travaille actuellement sur un projet qui permettrai de lancer la lecture d'un album de musique (pour commencer) à la suite de la lecture d'un tag RFID.
De façon à le rendre le plus souple possible, je me suis tourné vers le C++ et la bibliothèque Qt 5.1.0 pour l'interface utilisateur, ainsi que AppleScript pour controler iTunes qui sera le premier lecteur média (d'autres plus tard si possible). J'ai quelques notions de C++ mais je me considère débutant. Néanmoins, cela ne devrait pas poser trop de problèmes dans un premier temps.
On considèrera qu'il existe déjà une base de données mettant en relation des numéros de tag RFID avec des identifiants d'albums (ou de morceaux) dans iTunes.
La logique d'action est la suivante :
- Lecture du tag RFID
- Recherche de l'album correspondant à l'identifiant RFID
- Exécution de la commande AppleScript qui lance l'album correspondant sur iTunes
Que pensez-vous du choix des différents éléments pour ce projet (C++, Qt 5.1.0, AppleScript) ?
Je développe sous Mac OS X Snow Leopard (10.6.8) avec Xcode 4.2 (par défaut), est-ce également un bon choix ? Existe-t-il une solution plus optimale ?
Sachant que j'ai déjà quelques soucis pour y linker Qt (il ne trouve tout simplement pas les librairies lors de la compilation, apparemment une histoire de PATH). Je ne vois pas où configurer le chemin vers Qt (néanmoins cela fonctionne très bien dans Qt Creator).
Je compte y aller par petits bouts, j'ai déjà trifouillé l'AppleScript (récupérer la liste des albums, lancer un morceau, etc.), également l'exécution du script via C++, et je pense ajouter les fonctionnalités au fur et à mesure de mon apprentissage.
Vos avis et recommandations me seraient très précieux