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

Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
Dernière intervention
12 février 2009
- - Dernière réponse : BastienL21
Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
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 
Afficher la suite 

Votre réponse

20/37 réponses

Meilleure réponse
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
3
Merci
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++ (@++)

Merci SAKingdom 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de SAKingdom
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Dernière intervention
10 novembre 2014
3
Merci
Essaye avec "winmm"

Neo_Fr

Merci Neo_Fr 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de Neo_Fr
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Dernière intervention
10 novembre 2014
3
Merci
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

Merci Neo_Fr 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de Neo_Fr
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Dernière intervention
10 novembre 2014
3
Merci
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

Merci Neo_Fr 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de Neo_Fr
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
3
Merci
Faudra formater la chaine.
Exemple:

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

mciSendString(tmp, 0, 0, 0);

C++ (@++)

Merci SAKingdom 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de SAKingdom
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
3
Merci
"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++ (@++)

Merci SAKingdom 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de SAKingdom
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
3
Merci
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++ (@++)

Merci SAKingdom 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de SAKingdom
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
3
Merci
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++ (@++)

Merci SAKingdom 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de SAKingdom
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
0
Merci
PlaySound()
ShellExecute()

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

Neo_Fr
Commenter la réponse de Neo_Fr
Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
Dernière intervention
12 février 2009
0
Merci
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
 
Commenter la réponse de BastienL21
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Dernière intervention
10 novembre 2014
0
Merci
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
Commenter la réponse de Neo_Fr
Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
Dernière intervention
12 février 2009
0
Merci
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
Commenter la réponse de BastienL21
Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
Dernière intervention
12 février 2009
0
Merci
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; ]
Commenter la réponse de BastienL21
Messages postés
172
Date d'inscription
dimanche 10 décembre 2000
Dernière intervention
12 février 2009
0
Merci
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
Commenter la réponse de BastienL21
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
0
Merci
"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++ (@++)
Commenter la réponse de SAKingdom
Messages postés
3213
Date d'inscription
lundi 7 novembre 2005
Dernière intervention
16 février 2009
0
Merci
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++ (@++)
Commenter la réponse de SAKingdom
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Dernière intervention
10 novembre 2014
0
Merci
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
Commenter la réponse de Neo_Fr

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.