[C]Titre lecture musique en cours [Résolu]

Signaler
Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
Statut
Membre
Dernière intervention
12 février 2009
-
Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
Statut
Membre
Dernière intervention
12 février 2009
-
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

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
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++ (@++)
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Essaye avec "winmm"

Neo_Fr
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
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
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
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
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Faudra formater la chaine.
Exemple:

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

mciSendString(tmp, 0, 0, 0);

C++ (@++)
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
"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++ (@++)
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
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++ (@++)
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
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++ (@++)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
23
PlaySound()
ShellExecute()

ciao...
BruNews, MVP VC++
Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
Statut
Membre
Dernière intervention
12 février 2009
2
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").
Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
Statut
Membre
Dernière intervention
12 février 2009
2
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
 
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Rajoute winmm.lib dans la liste des libs a linker

Neo_Fr
Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
Statut
Membre
Dernière intervention
12 février 2009
2
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
 
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
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
Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
Statut
Membre
Dernière intervention
12 février 2009
2
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
Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
Statut
Membre
Dernière intervention
12 février 2009
2
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; ]
Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
Statut
Membre
Dernière intervention
12 février 2009
2
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
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
"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++ (@++)
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
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++ (@++)
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
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