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

BastienL21 172 Messages postés dimanche 10 décembre 2000Date d'inscription 12 février 2009 Dernière intervention - 11 mai 2008 à 18:04 - Dernière réponse : BastienL21 172 Messages postés dimanche 10 décembre 2000Date d'inscription 12 février 2009 Dernière intervention
- 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

37 réponses

Meilleure réponse
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 11 mai 2008 à 21:43
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de SAKingdom
Meilleure réponse
Neo_Fr 653 Messages postés mardi 6 décembre 2005Date d'inscription 10 novembre 2014 Dernière intervention - 12 mai 2008 à 15:19
3
Merci
Essaye avec "winmm"

Neo_Fr

Merci Neo_Fr 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de Neo_Fr
Meilleure réponse
Neo_Fr 653 Messages postés mardi 6 décembre 2005Date d'inscription 10 novembre 2014 Dernière intervention - 12 mai 2008 à 20:22
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de Neo_Fr
Meilleure réponse
Neo_Fr 653 Messages postés mardi 6 décembre 2005Date d'inscription 10 novembre 2014 Dernière intervention - 12 mai 2008 à 21:34
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de Neo_Fr
Meilleure réponse
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 13 mai 2008 à 20:18
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de SAKingdom
Meilleure réponse
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 14 mai 2008 à 16:00
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de SAKingdom
Meilleure réponse
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 14 mai 2008 à 16:09
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de SAKingdom
Meilleure réponse
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 14 mai 2008 à 16:40
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

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

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

Neo_Fr
Commenter la réponse de Neo_Fr
BastienL21 172 Messages postés dimanche 10 décembre 2000Date d'inscription 12 février 2009 Dernière intervention - 11 mai 2008 à 23:21
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
Neo_Fr 653 Messages postés mardi 6 décembre 2005Date d'inscription 10 novembre 2014 Dernière intervention - 11 mai 2008 à 23:58
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
BastienL21 172 Messages postés dimanche 10 décembre 2000Date d'inscription 12 février 2009 Dernière intervention - 12 mai 2008 à 13:03
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
BastienL21 172 Messages postés dimanche 10 décembre 2000Date d'inscription 12 février 2009 Dernière intervention - 12 mai 2008 à 18:44
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
BastienL21 172 Messages postés dimanche 10 décembre 2000Date d'inscription 12 février 2009 Dernière intervention - 12 mai 2008 à 21:00
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
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 12 mai 2008 à 21:05
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
SAKingdom 3213 Messages postés lundi 7 novembre 2005Date d'inscription 16 février 2009 Dernière intervention - 12 mai 2008 à 21:08
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
Neo_Fr 653 Messages postés mardi 6 décembre 2005Date d'inscription 10 novembre 2014 Dernière intervention - 12 mai 2008 à 21:08
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.