[C]Titre lecture musique en cours

Résolu
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 - 11 mai 2008 à 18:04
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 - 14 mai 2008 à 18:08
Bonjour à tous,
Développant une application en C en Console, je voudrais pouvoir récupérer le titre de la musique que le player (Windows media, Winamp, ...) est en train de lire (MSN le fait donc c'est possible ;-) ), afin de l'afficher dans la console.
Ou à la limite que l'on m'explique comment, de manière simple , on pourrais faire lire les musiques par mon appli console.





Cordialement,
[Insert_Emoticon%28%27/imgs2/smile.gif%27%29;

]

             Bastien 

37 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
11 mai 2008 à 21:43
Ben sinon, y'a toujours mciSendString et mciSendCommand qui peuvent lire plusieurs formats (dont mp3). Exemple avec mciSendString:

mciSendString("open c:\\test.mp3 alias mysound1", 0, 0, 0);
mciSendString("play mysound1", 0, 0, 0);
Sleep(3000);
mciSendString("close mysound1", 0, 0, 0);

C++ (@++)
3
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
12 mai 2008 à 15:19
Essaye avec "winmm"

Neo_Fr
3
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
12 mai 2008 à 20:22
Pour lire tous les fichier dans un dossier utilise les apis FindFirstFile: http://msdn.microsoft.com/en-us/library/aa364418(VS.85).aspx et FindNextFile: http://msdn.microsoft.com/en-us/library/aa364428(VS.85).aspx

Neo_Fr
3
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
12 mai 2008 à 21:34
Liste tous les .mp3 ds C:\:

char szMP3[] = "C:\\*.mp3";
HANDLE hFind;
WIN32_FIND_DATA wFindData;
hFind = FindFirstFile(szMP3, &wFindData);
if(hFind == INVALID_HANDLE_VALUE) //Erreur
while(1)
{
if(!FindNextFile(hFind, &wFindData)) break;
MessageBox(0, wFindData.cFileName, 0, 0x40);
}
FindClose(hFind);

Neo_Fr
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
13 mai 2008 à 20:18
Faudra formater la chaine.
Exemple:

char tmp[300];
sprintf(tmp, "open %s alias mysound1", variable);

mciSendString(tmp, 0, 0, 0);

C++ (@++)
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 mai 2008 à 16:00
"status mysound1 length"
renverra la longueur (en ms je crois) dans un buffer char passé en 2ème argument que tu pourras convertir en int par la suite.

char buf[300];
int len;

mciSendString("status mysound1 length", buf, 300, 0);
len = atoi(buf);

C++ (@++)
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 mai 2008 à 16:09
Même principe pour récupérer la position actuelle de lecture sauf que ce sera "position" au lieu de "length"

"status mysound1 position"

C++ (@++)
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 mai 2008 à 16:40
Ben là, c'est pas bien compliqué:

char buf[300];
int len;

mciSendString("status mysound1 length", buf, 300, 0);
len = atoi(buf);

// À partir du buffer
printf("%s\n", buf);

// À partir du int
printf("%d\n", len);

C++ (@++)
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
11 mai 2008 à 19:19
PlaySound()
ShellExecute()

ciao...
BruNews, MVP VC++
0
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
11 mai 2008 à 20:58
Merci BruNews mais:

 -
pour playsound: d'après ce que j'ai pu lire sur cette fonction, elle ne permet que de lire des .wav et si ce n'est pas le cas, qu'elle peut aussi lire les mp3, pourrais-tu mettre un petit code d'exemple d'utilisation de la fonction STP?
 

 -
pour ShellExecute: le problème n'est pas d'ouvrir la musique et de la lire (mon programme ouvre toute les musiques contenues dans "ma musique" via le player par défaut), mais de récupérer le titre de la musique qui est en cour de lecture (soit via le player par défaut, soit par une fonction qui "l'ouvre" directement via mon appli mais aschant que si l'on opte pour cette solution, il faut pouvoir lire un maximum de format (.wav, .mp3, .wma, ....) et que pendant la lecture de la musique, la suite du pgm s'éxecute. (au pire je peu faire:
 system("NomDeMonAppliQuiLitDeLaMusique"); et simuler un Alt+Tab pour que mon appli principale repasse devant et la faire travailler en tâche de fond.(l'appli qui lit la musique))

Cordialement,[Insert_Emoticon%28%27/imgs2/smile.gif%27%29; ]
             Bastien

 PS: les (titres des) musiques ne sont pas (pré)défini lors de la compilation ou dans le code source mais c'est juste le répertoire où elles se situes qui peut-être éventuellement prédéfini ("Ma Musique").
0
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
11 mai 2008 à 22:43
Bonsoir,
Merci SAKingdom mais à la compilation de ce code, erreurs. Voici les messages :
undefined reference to `_mciSendStringA@16'
undefined reference to `_mciSendStringA@16'
undefined reference to `_mciSendStringA@16'||Build finished: 3 errors, 0 warnings|

Y aurait il une include spéciale à inclure?
 
Pour info je compile en C sous Code::Blocks 8.02

Cordialement,[Insert_Emoticon%28%27/imgs2/smile.gif%27%29; ]
             Bastien
 
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
11 mai 2008 à 22:57
Rajoute winmm.lib dans la liste des libs a linker

Neo_Fr
0
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
11 mai 2008 à 23:21
Bonsoir,
 Neo, tu veux dire ajouter la ligne "#pragma comment( lib, "winmm.lib" )"?
Si oui c'est déjà fait sinon si tu peux expliquer ce qu'il faut faire STP

Cordialement,[Insert_Emoticon%28%27/imgs2/smile.gif%27%29; ]
             Bastien
 
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
11 mai 2008 à 23:58
Quelle compilateur utilises-tu avec C:B?; par defaut c'est GCC et il me semble que le #pragma(lib n'est pas reconnu, regarde ds les options du projet tu doit avoir possibilité de rajouter des lib a linker quand tu auras trouver ajoute -libwinmm ou winmm.lib

Neo_Fr
0
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
12 mai 2008 à 13:03
Bonjour,
Neo, j'ai aouter winmm mais j'ai un message d'erreur à la compilation :
|cannot find -l-libwinmm||Build finished: 1 errors, 0 warnings|
avec "-libwinmm"
ou
|cannot find -lwinmm.lib||Build finished: 1 errors, 0 warnings|
avec "winmm.lib"

Merci à tous de vous interesser à mon problème,

Cordialement,
Bastien
0
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
12 mai 2008 à 18:44
Merci Neo ca a l'air de fonctionner mais je ne peu pas essayer sur ce PC (qui ne fonctionne qu'en mode sans echecs, donc sans son).
Mais je me pose deux questions :
  -Avec cette solution, comment fait-on pour définir non pas un titre mais dire de lire tous les titres contenu dans le sossier "ma musique" de l'utilisateur

  -Et est-ce que la suite du programme s'éxecute durant la lecture de la musique
Et aussi...comment récupère-t-on le titre de la musique étant donné qu'il faut que ca lise toute les musiques de l'utilisateur, donc que l'on ne connait ni le nombre, ni les titres de(s) musique!!

//Merci à tous de vous interesser à mon problème,Cordialement,

          Bastien[Insert_Emoticon%28%27/imgs2/smile.gif%27%29; ]
0
BastienL21 Messages postés 172 Date d'inscription dimanche 10 décembre 2000 Statut Membre Dernière intervention 12 février 2009 2
12 mai 2008 à 21:00
Bonsoir,
Si je copie le texte donné pour FirtFile, voici les erreurs à la compilation :
|In function `main':|
|error: syntax error before "LPCTSTR"||Build finished: 1 errors, 0 warnings|
et pour NextFile :
|In function `main':|
error: syntax error before "HANDLE"|||Build finished: 2 errors, 0 warnings|

C'est sans doute une erreur toute bête mais je débute...
Je rappel que je compile en C et non C++ (je le rappel ca a souvent une importance et je sais que BOOL est + ou - du C++...)

//Merci à tous de vous interesser à mon problème,Cordialement,

            Bastien
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
12 mai 2008 à 21:05
"Et est-ce que la suite du programme s'éxecute durant la lecture de la musique"
Oui. Le système créera un thread dédié à la lecture.

"Et aussi...comment récupère-t-on le titre de la musique"
Ça dépend du format.
Les mp3, par exemple, contiennent des TAGs (ID3v1/v2) ainsi que les informations de base. Ces TAGs contiennent, entre autre, le nom de la pièce, si il y en a un. Cependant j'ignore complètement comment récupérer ces TAGs ou les informations de base.

Pour faire très simple, tu peux simplement récupérer le nom du fichier joué.

C++ (@++)
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
12 mai 2008 à 21:08
BOOL non, c'est utilisable en C, car il s'agit d'un int. bool n'est utilisable qu'en C++ ou avec la norme C99.

Montre la partie du code qui ne compile pas.

C++ (@++)
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
12 mai 2008 à 21:08
Pour les tags ID3v1 c'est les 128 derniers octets du fichier, pour les ID3v2 ca devient plus compliquer a récuperer, sinon pr tes erreurs sans le code c difficile a dire..

Neo_Fr
0
Rejoignez-nous