Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SPECTROGRAPHE EN C AVEC L'API WINDOWS


Information sur la source

Catégorie :Multimédia Classé sous : lecteur, audio, winapi, c, spectrographe Niveau : Débutant Date de création : 12/02/2007 Date de mise à jour : 29/03/2007 21:39:36 Vu / téléchargé: 6 684 / 639

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
*Présentation:
Ce programme permet d'avoir la visualisation spectrale d'un fichier audio mp3, wma ou wav.
Il est basé sur l'idée du spectrographe en SDL de Mateo21 sur le site du zero.
De plus, il peut-être réduit dans la systray, mettre en pause, accélérer, revenir en arrière,...
Tout ceci est expliqué dans le programme: Fichier/informations après avoir ouvert un fichier.
*Points forts:
-Toutes les fonctions d'un lecteur de base
-Relativement léger en utilisation de mémoire vive
-Testé sur Xp et Vista
*Points faibles:
-Il utilise fmod en plus de lui-même.
 

Source

  • main.c:
  • ------------------------------------------------------------------------------
  • #include <windows.h>
  • #include <fmod/fmod.h>
  • #define ID_B_INFO 0
  • #define ID_B_QUITTER 1
  • #define ID_B_OUVRIR 2
  • #define ID_B_PAUSE 3
  • #define ID_B_STOP 4
  • #define ID_B_MUET 5
  • #define ID_B_BOUCLE 7
  • #define ID_B_SUIVANT 8
  • #define ID_B_ICONIFIER 6
  • #define ID_B_DESIGNA 9
  • #define ID_B_DESIGNB 10
  • #define MY_WM_NOTIFYICON WM_USER+1
  • #define IDM_QUIT 100
  • #define IDM_RESTORE 101
  • #define IDM_OPEN 102
  • #define IDM_PAUSE 103
  • #define IDM_SUIVANT 104
  • #define ID_ICONPLAY 105
  • #define ID_ICONPAUSE 106
  • ///////////////////////////////////////////////////////////////////////
  • ///////////////////////////////////////////////////////////////////////
  • ///////////////////////////////////////////////////////////////////////
  • //Déclaration des valeurs de la fenetre
  • char szClassName[ ] = "WindowsApp";
  • char szWindowTitle[ ] = "Spectrographe";
  • int fwidth = 400;
  • int fheight = 255;
  • int ewidth;
  • int eheight;
  • int i,j,replenght,act;
  • int continuer=1;
  • int changeok=1,suivant=0;
  • //Declaration nécessaires à la playlist
  • char rep[30][400];
  • char repertoire[400];
  • char repertoiresave[400];
  • char playlist[50][300];
  • char playlistrep[50][450];
  • char playing[300];
  • char *result = NULL;
  • //Définitions principales
  • LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
  • static HWND hEdit;
  • NOTIFYICONDATA TrayIcon;
  • HMENU menu, Fichier,Options,Design;
  • HWND ecran;
  • HINSTANCE instance;
  • MSG messages;
  • WNDCLASSEX classefenetre;
  • RECT Rectecran;
  • HMENU hmenu;
  • HMENU hpopup;
  • POINT pos;
  • WIN32_FIND_DATA File;
  • HANDLE hSearch;
  • BOOL re;
  • //Déclaration pour l'ouverture d'un fichier
  • char szFile[MAX_PATH]={0};
  • char szFileprec[MAX_PATH]={0};
  • //Déclaration des outils de dessin
  • PAINTSTRUCT ps;HPEN hp;HDC hdc;
  • //Variables pour fmod
  • FSOUND_STREAM *musique = NULL;
  • int iChannel;
  • float *spectre = NULL;
  • int hauteurBarre=0;
  • int pause=0,stop=1,muet=0,balance=128,volume=255;
  • int barprogwidth=100,barprogheight=6,barprogvpos=50;
  • int ncolonnesinit=401,ncolonnes,design=2,designchoice;
  • //Declaration des caractères pour affichage
  • int mina=0,sa=0,minb=0,sb=0;
  • char duree[50] = "";
  • char minaa[3]="";
  • char saa[3]="";
  • char minbb[3]="";
  • char sbb[3]="";
  • //Déclarations de fonctions
  • void fquitter();
  • void ficonifier();
  • void frestaurer();
  • void finfo();
  • void fouvrir();
  • void fstop();
  • void freplay();
  • void freinit();
  • void fpause();
  • void fbalanceleft();
  • void fbalanceright();
  • void fmuet();
  • void fvolumedown();
  • void fvolumeup();
  • void ftimedown();
  • void ftimeup();
  • void fscan();
  • void fplay();
  • void fchange();
  • void fboucle();
  • void fsuivant();
  • void fdesign();
  • ///////////////////////////////////////////////////////////////////////
  • ///////////////////////////////////////////////////////////////////////
  • ///////////////////////////////////////////////////////////////////////
  • //Programme principal
  • int WINAPI WinMain (HINSTANCE instance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int modeaffichage)
  • {//Initialisation de fmod
  • FSOUND_Init(44100, 32, 0);
  • //Adaptation de la taille de la fenetre en fonction des dimensions voulues avec menu pris en compte
  • if(fwidth>ncolonnes){ncolonnes=(fwidth/(((int)(fwidth/ncolonnesinit))+1));}
  • else{ncolonnes=fwidth;};
  • ewidth=fwidth+6;
  • eheight=fheight+42;
  • //Déclaration de la classe de la fenetre et enregistrement
  • classefenetre.style = CS_DBLCLKS;
  • classefenetre.lpfnWndProc = WindowProcedure;
  • classefenetre.cbClsExtra = 0;
  • classefenetre.cbWndExtra = 0;
  • classefenetre.hInstance = instance;
  • classefenetre.hIconSm = LoadIcon (instance, "ID_ICONE");
  • classefenetre.hCursor = LoadCursor (NULL, IDC_ARROW);
  • classefenetre.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
  • classefenetre.lpszMenuName = NULL;
  • classefenetre.lpszClassName = szClassName;
  • classefenetre.cbSize = sizeof (WNDCLASSEX);
  • if (!RegisterClassEx (&classefenetre)){return 0;};
  • //Définition du menu et des sous-menus
  • Fichier = CreateMenu();
  • AppendMenu(Fichier,MF_STRING,ID_B_OUVRIR,"Ouvrir");
  • AppendMenu(Fichier,MF_STRING, ID_B_INFO, "Informations");
  • AppendMenu(Fichier,MF_SEPARATOR, (UINT)NULL, "");
  • AppendMenu(Fichier,MF_STRING, ID_B_ICONIFIER, "Mettre en icone");
  • AppendMenu(Fichier,MF_STRING,ID_B_QUITTER,"Quitter");
  • Options = CreateMenu();
  • AppendMenu(Options,MF_STRING,ID_B_SUIVANT,"Suivant");
  • AppendMenu(Options,MF_STRING,ID_B_STOP,"Stop");
  • AppendMenu(Options,MF_SEPARATOR, (UINT)NULL, "");
  • AppendMenu(Options,MF_STRING,ID_B_PAUSE,"Pause");
  • AppendMenu(Options,MF_STRING,ID_B_MUET,"Muet");
  • AppendMenu(Options,MF_STRING,ID_B_BOUCLE,"Boucle");
  • Design = CreateMenu();
  • AppendMenu(Design,MF_STRING,ID_B_DESIGNA,"Barres");
  • AppendMenu(Design,MF_STRING,ID_B_DESIGNB,"Analyseur");
  • menu = CreateMenu();
  • AppendMenu(menu, MF_POPUP, (UINT)Fichier, "Fichier");
  • AppendMenu(menu, MF_POPUP, (UINT)Options, "Edition");
  • AppendMenu(menu, MF_POPUP, (UINT)Design, "Design");
  • //Etat de certains menus
  • EnableMenuItem(menu, ID_B_INFO, MF_BYCOMMAND | MF_GRAYED);
  • EnableMenuItem(menu, ID_B_ICONIFIER, MF_BYCOMMAND | MF_GRAYED);
  • EnableMenuItem(menu, ID_B_STOP, MF_BYCOMMAND | MF_GRAYED);
  • EnableMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND | MF_GRAYED);
  • EnableMenuItem(menu, ID_B_MUET, MF_BYCOMMAND | MF_GRAYED);
  • EnableMenuItem(menu, ID_B_BOUCLE, MF_BYCOMMAND | MF_GRAYED);
  • EnableMenuItem(menu, ID_B_SUIVANT, MF_BYCOMMAND | MF_GRAYED);
  • //Declaration et affichage de la fenetre principale
  • ecran = CreateWindowEx (0,szClassName,szWindowTitle,WS_SYSMENU|WS_THICKFRAME,CW_USEDEFAULT,CW_USEDEFAULT,ewidth,eheight,NULL,menu,instance,NULL);
  • ShowWindow (ecran,modeaffichage);
  • UpdateWindow(ecran);
  • //Timer
  • SetTimer(ecran,1,30,NULL);
  • //Boucle évenementielle
  • while (GetMessage (&messages, NULL, 0, 0)){
  • TranslateMessage(&messages);
  • DispatchMessage(&messages);};
  • return messages.wParam;
  • };
  • ///////////////////////////////////////////////////////////////////////
  • ///////////////////////////////////////////////////////////////////////
  • ///////////////////////////////////////////////////////////////////////
  • LRESULT CALLBACK WindowProcedure (HWND ecran, UINT message, WPARAM wParam, LPARAM lParam)
  • {switch (message){
  • //Cas de la fermeture
  • case WM_CLOSE:{fquitter();};
  • break;
  • //Cas de redimension
  • case WM_SIZE:{GetWindowRect(ecran, &Rectecran);
  • eheight = Rectecran.bottom - Rectecran.top;
  • fheight = eheight-42;
  • ewidth = Rectecran.right - Rectecran.left;
  • fwidth = ewidth-6;
  • if(fwidth>ncolonnes){ncolonnes=(fwidth/(((int)(fwidth/ncolonnesinit))+1));}
  • else{ncolonnes=fwidth;};
  • };
  • break;
  • //Cas du timer
  • case WM_TIMER:{RedrawWindow(ecran,NULL,NULL,RDW_ERASE|RDW_INVALIDATE|RDW_ERASENOW|RDW_NOCHILDREN);fchange();};
  • break;
  • //Cas de dessin
  • case WM_PAINT:{//Obtention des données du spectre
  • spectre = FSOUND_DSP_GetSpectrum();
  • i=0;
  • if(spectre!=NULL){
  • //Calcul des durées
  • mina=(int)(FSOUND_Stream_GetTime(musique)/60000);
  • sa=(FSOUND_Stream_GetTime(musique)/1000)-(60*((int)(FSOUND_Stream_GetTime(musique)/60000)));
  • minb=(int)(FSOUND_Stream_GetLengthMs(musique)/60000);
  • sb=(FSOUND_Stream_GetLengthMs(musique)/1000)-(60*((int)(FSOUND_Stream_GetLengthMs(musique)/60000)));
  • if(mina<10){sprintf(minaa, "0%ld",mina);}else{sprintf(minaa, "%ld",mina);};
  • if(sa<10){sprintf(saa, "0%ld",sa);}else{sprintf(saa, "%ld",sa);};
  • if(minb<10){sprintf(minbb, "0%ld",minb);}else{sprintf(minbb, "%ld",minb);};
  • if(sb<10){sprintf(sbb, "0%ld",sb);}else{sprintf(sbb, "%ld",sb);};
  • //Ecriture de la chaine de durée
  • sprintf(duree, "%s:%s/%s:%s",minaa,saa,minbb,sbb);
  • //Début des dessins
  • hdc = BeginPaint(ecran, &ps);
  • SetBkMode(hdc, TRANSPARENT);
  • SetTextColor(hdc, RGB(255,255,0));
  • TextOut(hdc,((int)(fwidth-(3*barprogwidth/2))-18), (barprogvpos-42), playing, lstrlen(playing));
  • TextOut(hdc,((int)(fwidth-(3*barprogwidth/2))-18), (barprogvpos-22), duree, lstrlen(duree));
  • //Création de la barre de progression
  • hp=CreatePen(PS_SOLID, barprogheight, RGB(120,120,120));
  • SelectObject(hdc,hp);
  • Rectangle(hdc, ((((int)(fwidth-(3*barprogwidth/2)))-15)+barprogwidth),(barprogvpos+barprogheight), ((int)(fwidth-(3*barprogwidth/2))-15),barprogvpos);
  • DeleteObject(hp);
  • hp=CreatePen(PS_SOLID, barprogheight, RGB(255,255,0));
  • SelectObject(hdc,hp);
  • Rectangle(hdc, ((((int)(fwidth-(3*barprogwidth/2)))-15)+((barprogwidth*FSOUND_Stream_GetTime(musique))/(FSOUND_Stream_GetLengthMs(musique)))),(barprogvpos+barprogheight),((int)(fwidth-(3*barprogwidth/2))-15),barprogvpos);
  • DeleteObject(hp);
  • //Dessin du spectrographe
  • i=0;
  • while(i<ncolonnes){
  • if(i>=(3*ncolonnes/4)){hauteurBarre = spectre[i]* 16 * fheight;}
  • else if(i>=(2*ncolonnes/4)&&i<(3*ncolonnes/4)){hauteurBarre = spectre[i]* 12 * fheight;}
  • else if(i>=(ncolonnes/4)&&i<(2*ncolonnes/4)){hauteurBarre = spectre[i]* 8 * fheight;}
  • else if(i<(ncolonnes/4)){hauteurBarre = spectre[i]* 3 * fheight;};
  • if (hauteurBarre > fheight){hauteurBarre = fheight;};
  • if(hauteurBarre<=(eheight/4)){hp=CreatePen(PS_SOLID, 1, RGB(0,255,0));}
  • else if(hauteurBarre>(eheight/4)&&hauteurBarre<=(eheight/2)){hp=CreatePen(PS_SOLID, 1, RGB(125,255,0));}
  • else if(hauteurBarre>(eheight/2)&&hauteurBarre<=((3*eheight)/4)){hp=CreatePen(PS_SOLID, 1, RGB(255,125,0));}
  • else if(hauteurBarre>((3*eheight)/4)){hp=CreatePen(PS_SOLID, 1, RGB(255,0,0));};
  • SelectObject(hdc,hp);
  • if(design==1){Rectangle(hdc, (ewidth/ncolonnes)*i,(fheight-hauteurBarre), ((ewidth/ncolonnes)*(i+1)), fheight);}
  • else if(design==2){Rectangle(hdc, (ewidth/ncolonnes)*i,((int)((fheight-hauteurBarre)/2)), ((ewidth/ncolonnes)*(i+1)), ((int)((fheight+hauteurBarre)/2)));};
  • DeleteObject(hp);
  • i++;};
  • //Fin des dessins
  • EndPaint(ecran, &ps);
  • };
  • };
  • break;
  • //Cas d'appui sur une touche
  • case WM_KEYDOWN:{switch(wParam){case 0x1B:{ficonifier();};
  • break;
  • case 0x70:{finfo();};
  • break;
  • case 0x71:{fouvrir();};
  • break;
  • case 0x72:{fstop();};
  • break;
  • case 0x73:{freplay();};
  • break;
  • case 0x74:{freinit();};
  • break;
  • case 0x13:{fpause();};
  • break;
  • case 0x76:{fbalanceleft();};
  • break;
  • case 0x77:{fbalanceright();};
  • break;
  • case 0x4D:{fmuet();};
  • break;
  • case 0x7A:{fvolumedown();};
  • break;
  • case 0x7B:{fvolumeup();};
  • break;
  • case 0x22:{ftimedown();};
  • break;
  • case 0x21:{ftimeup();};
  • break;
  • case 0x24:{fsuivant();};
  • break;
  • };
  • };
  • break;
  • //Cas d'utilisation de boutons ou menus
  • case WM_COMMAND:{switch(LOWORD(wParam)){case ID_B_OUVRIR:{fouvrir();};
  • break;
  • case ID_B_INFO:{finfo();};
  • break;
  • case ID_B_ICONIFIER:{ficonifier();};
  • break;
  • case ID_B_QUITTER:{fquitter();};
  • break;
  • case ID_B_PAUSE:{fpause();};
  • break;
  • case ID_B_STOP:{fstop();};
  • break;
  • case ID_B_MUET:{fmuet();};
  • break;
  • case ID_B_BOUCLE:{fboucle();};
  • break;
  • case ID_B_SUIVANT:{fsuivant();};
  • break;
  • case ID_B_DESIGNA:{designchoice=1;fdesign();};
  • break;
  • case ID_B_DESIGNB:{designchoice=2;fdesign();};
  • break;
  • case IDM_QUIT: {fquitter();};
  • break;
  • case IDM_RESTORE :{frestaurer();};
  • break;
  • case IDM_OPEN :{fouvrir();};
  • break;
  • case IDM_PAUSE :{fpause();};
  • break;
  • case IDM_SUIVANT :{fsuivant();};
  • break;
  • };
  • };
  • break;
  • //Cas d'action sur l'icontray
  • case MY_WM_NOTIFYICON :{if(lParam == WM_LBUTTONUP){frestaurer();};
  • if(lParam == WM_RBUTTONUP){GetCursorPos(&pos);
  • hmenu = LoadMenu(instance,"LEMENU");
  • hpopup = GetSubMenu(hmenu, 0);
  • SetForegroundWindow(ecran);
  • TrackPopupMenuEx(hpopup, 0, pos.x, pos.y, ecran, NULL);
  • DestroyMenu(hmenu);};
  • };
  • break;
  • //Cas de destruction de la fenetre
  • case WM_DESTROY:{FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), 0);FSOUND_Stream_Close(musique);FSOUND_Close();Shell_NotifyIcon(NIM_DELETE,&TrayIcon);PostQuitMessage (0);};
  • break;
  • //Cas par défaut
  • default:return DefWindowProc (ecran, message, wParam, lParam);
  • };
  • //Fin du programme
  • return 0;
  • };
  • ///////////////////////////////////////////////////////////////////////
  • ///////////////////////////////////////////////////////////////////////
  • ///////////////////////////////////////////////////////////////////////
  • //Fonctions attachées au programme
  • void fquitter(){
  • SendMessage(ecran, WM_DESTROY, 0, 0);
  • };
  • void finfo(){
  • if(musique!=NULL){MessageBox(ecran,"Merci d'utiliser ce programme!\n\nAuteur: Alexandre Patarot\nAnnée de création: 2007\nDernière mise à jour: 27-02-07\nSite web: http://www.alexandrepatarot.new.fr/\n\nCe programme utilise fmod (http://www.fmod.org/)\n\nUtilisation du logiciel:\n-Echap: Mettre en icône\n-Bas de page: Retour rapide\n-Haut de page: Avance rapide\n-Home: Suivant\n-Pause: Pause\n-M: Muet\n-F1: Aide\n-F2: Ouvrir un fichier\n-F3: Arrêt de la lecture\n-F4: Relecture du morceau\n-F5: Réinitialisation des valeurs\n-F7: Balance à gauche\n-F8: Balance à droite\n-F11: Diminution du volume\n-F12: Augmentation du volume\n\n","Informations sur Spectrographe 1.7",MB_ICONINFORMATION);};
  • };
  • void fouvrir(){
  • //Ouverture de l'explorateur
  • OPENFILENAME ofn;
  • if(szFile!=NULL){strcpy(szFileprec,szFile);};
  • ZeroMemory(&ofn, sizeof(OPENFILENAME));
  • ofn.lStructSize = sizeof(OPENFILENAME);
  • ofn.hwndOwner = ecran;
  • ofn.lpstrFile = szFile;
  • ofn.nMaxFile = MAX_PATH;
  • ofn.lpstrFilter ="Fichier audio (.mp3, .wav, .wma)\0*.mp3;*.wav;*.wma\0";
  • ofn.nFilterIndex = 1;
  • ofn.Flags =OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
  • if (GetOpenFileName(&ofn)==TRUE)
  • {HANDLE hf;DWORD FileSize,nbcharRead ;CHAR *buffer;
  • hf = CreateFile(szFile, GENERIC_READ, 0,NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  • FileSize = GetFileSize(hf, NULL);
  • buffer = (PCHAR)LocalAlloc(LMEM_FIXED, FileSize+1);
  • ReadFile(hf, buffer, FileSize, &nbcharRead, NULL) ;
  • buffer[FileSize] = 0;
  • SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)buffer);
  • LocalFree(buffer);
  • CloseHandle(hf);};
  • if(szFile[strlen(szFile)-4]=='.'){fplay();fscan();};
  • };
  • void fplay(){
  • if(strcmp(szFileprec,szFile)!=0||stop==1){
  • stop=0;pause=0;
  • EnableMenuItem(menu, ID_B_INFO, MF_BYCOMMAND);
  • EnableMenuItem(menu, ID_B_ICONIFIER, MF_BYCOMMAND);
  • EnableMenuItem(menu, ID_B_STOP, MF_BYCOMMAND);
  • EnableMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND);
  • EnableMenuItem(menu, ID_B_MUET, MF_BYCOMMAND);
  • EnableMenuItem(menu, ID_B_BOUCLE, MF_BYCOMMAND);
  • EnableMenuItem(menu, ID_B_SUIVANT, MF_BYCOMMAND);
  • CheckMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND);
  • CheckMenuItem(menu, ID_B_MUET, MF_BYCOMMAND);
  • if(musique!=NULL){FSOUND_Stream_Close(musique);};
  • musique = FSOUND_Stream_Open(szFile,FSOUND_LOOP_NORMAL, 0, 0);
  • iChannel = FSOUND_Stream_Play(FSOUND_FREE, musique);
  • FSOUND_SetVolume(FSOUND_Stream_Play(FSOUND_FREE, musique),volume);
  • FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), 1);};
  • };
  • void fscan(){
  • //Remise à zéro de répertoire
  • memset( repertoire, 0, strlen(repertoire));
  • strcpy(playing,strrchr (szFile,'\\'));
  • strncpy(repertoire,szFile,strlen(szFile)-strlen(playing)+1);
  • i=0;
  • while(i<strlen(playing)){if(i<(strlen(playing)-5)){playing[i]=playing[i+1];}else{playing[i]=' ';};i++;};
  • strcpy(repertoiresave,repertoire);
  • strcat(repertoire,"*.*");
  • hSearch=FindFirstFile(repertoire, &File);
  • if(hSearch != INVALID_HANDLE_VALUE){
  • re=TRUE;
  • i=0;
  • while(re){re = FindNextFile(hSearch, &File);
  • if(strstr(File.cFileName, ".mp3")!=NULL){strcpy(playlistrep[i],repertoiresave);
  • strcat(playlistrep[i],File.cFileName);
  • strcpy(playlist[i],playlistrep[i]);
  • i++;};
  • };
  • replenght=i-1;i=0;};
  • FindClose(hSearch);
  • };
  • void fchange(){
  • if(changeok==1){
  • if(suivant==1||FSOUND_Stream_GetTime(musique)>=FSOUND_Stream_GetLengthMs(musique)-500){
  • if(act<replenght){
  • if(replenght==1||strcmp(playlist[act],szFile)!=0){
  • strcpy(szFile,playlist[act]);fplay();act++;
  • if(szFile!=NULL){strcpy(szFileprec,szFile);};
  • //Mise à jour du nom de fichier
  • strcpy(playing,strrchr (szFile,'\\'));
  • i=0;
  • while(i<strlen(playing)){if(i<(strlen(playing)-5)){playing[i]=playing[i+1];}else{playing[i]=' ';};i++;};
  • if(suivant==1){suivant=0;};
  • }
  • else{act++;fchange();};}
  • else{act=0;};}
  • else{};};
  • };
  • void fboucle(){
  • if(changeok==1){changeok=0;CheckMenuItem(menu, ID_B_BOUCLE, MF_BYCOMMAND | MF_CHECKED);}
  • else{changeok=1;CheckMenuItem(menu, ID_B_BOUCLE, MF_BYCOMMAND);};
  • };
  • void fstop(){
  • if(stop==0){stop=1;FSOUND_Stream_Stop(musique);
  • CheckMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND);
  • CheckMenuItem(menu, ID_B_MUET, MF_BYCOMMAND);
  • EnableMenuItem(menu, ID_B_STOP, MF_BYCOMMAND | MF_GRAYED);
  • EnableMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND | MF_GRAYED);
  • EnableMenuItem(menu, ID_B_MUET, MF_BYCOMMAND | MF_GRAYED);
  • EnableMenuItem(menu, ID_B_BOUCLE, MF_BYCOMMAND | MF_GRAYED);
  • EnableMenuItem(menu, ID_B_SUIVANT, MF_BYCOMMAND | MF_GRAYED);};
  • };
  • void fsuivant(){
  • if(changeok==1&&replenght!=0){suivant=1;fchange();}
  • else{};
  • };
  • void freplay(){
  • if(musique!=NULL){iChannel=FSOUND_Stream_Play(FSOUND_FREE, musique);
  • FSOUND_SetVolume(FSOUND_Stream_Play(FSOUND_FREE, musique),volume);
  • stop=0;pause=0;
  • EnableMenuItem(menu, ID_B_STOP, MF_BYCOMMAND);
  • EnableMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND);
  • EnableMenuItem(menu, ID_B_MUET, MF_BYCOMMAND);
  • EnableMenuItem(menu, ID_B_BOUCLE, MF_BYCOMMAND);
  • EnableMenuItem(menu, ID_B_SUIVANT, MF_BYCOMMAND);
  • CheckMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND);
  • CheckMenuItem(menu, ID_B_MUET, MF_BYCOMMAND);};
  • };
  • void freinit(){
  • volume=255;balance=128;
  • FSOUND_SetVolume(FSOUND_Stream_Play(FSOUND_FREE, musique),volume);
  • FSOUND_SetPan(FSOUND_Stream_Play(FSOUND_FREE, musique),balance);
  • };
  • void fpause(){
  • if(pause==0){pause=1;FSOUND_SetPaused(iChannel,pause);
  • CheckMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND | MF_CHECKED);
  • TrayIcon.hIcon = LoadIcon((HINSTANCE) GetModuleHandle (NULL),MAKEINTRESOURCE(ID_ICONPAUSE));
  • Shell_NotifyIcon(NIM_MODIFY, &TrayIcon);
  • }
  • else{pause=0;FSOUND_SetPaused(iChannel,pause);
  • CheckMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND);
  • TrayIcon.hIcon = LoadIcon((HINSTANCE) GetModuleHandle (NULL),MAKEINTRESOURCE(ID_ICONPLAY));
  • Shell_NotifyIcon(NIM_MODIFY, &TrayIcon);
  • };
  • };
  • void fbalanceleft(){
  • balance=balance-10;if(balance<=0){balance=0;};FSOUND_SetPan(FSOUND_Stream_Play(FSOUND_FREE, musique),balance);
  • };
  • void fbalanceright(){
  • balance=balance+10;if(balance>=255){balance=255;};FSOUND_SetPan(FSOUND_Stream_Play(FSOUND_FREE, musique),balance);
  • };
  • void fmuet(){
  • if(muet==0){muet=1;FSOUND_SetMute(iChannel,muet);
  • CheckMenuItem(menu, ID_B_MUET, MF_BYCOMMAND | MF_CHECKED);}
  • else{muet=0;FSOUND_SetMute(iChannel,muet);CheckMenuItem(menu, ID_B_MUET, MF_BYCOMMAND);};
  • };
  • void fvolumedown(){
  • volume=volume-10;if(volume>=255){volume=255;};FSOUND_SetVolume(FSOUND_Stream_Play(FSOUND_FREE, musique),volume);
  • };
  • void fvolumeup(){
  • volume=volume+10;if(volume<=0){volume=0;};FSOUND_SetVolume(FSOUND_Stream_Play(FSOUND_FREE, musique),volume);
  • };
  • void ftimedown(){
  • if(musique!=NULL){if(FSOUND_Stream_GetTime(musique)>1000){FSOUND_Stream_SetTime(musique,(FSOUND_Stream_GetTime(musique)-1000));};};
  • };
  • void ftimeup(){
  • if(musique!=NULL){if(FSOUND_Stream_GetTime(musique)<(FSOUND_Stream_GetLengthMs(musique)-1000)){FSOUND_Stream_SetTime(musique,(FSOUND_Stream_GetTime(musique)+1000));};};
  • };
  • void fdesign(){
  • design=designchoice;
  • };
  • void ficonifier(){
  • if(musique!=NULL){
  • ShowWindow(ecran,SW_HIDE);
  • TrayIcon.cbSize = sizeof( TrayIcon );
  • TrayIcon.hWnd = ecran;
  • TrayIcon.uID = 0;
  • TrayIcon.uCallbackMessage = MY_WM_NOTIFYICON;
  • TrayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
  • strcpy(TrayIcon.szTip, "Spectrographe");
  • if(pause==1){TrayIcon.hIcon = LoadIcon((HINSTANCE) GetModuleHandle (NULL),MAKEINTRESOURCE(ID_ICONPAUSE));}
  • else{TrayIcon.hIcon = LoadIcon((HINSTANCE) GetModuleHandle (NULL),MAKEINTRESOURCE(ID_ICONPLAY));};
  • Shell_NotifyIcon(NIM_ADD, &TrayIcon);
  • };
  • };
  • void frestaurer(){
  • ShowWindow(ecran,SW_SHOW);Shell_NotifyIcon(NIM_DELETE,&TrayIcon);
  • };
  • -------------------------------------------------------------------------------
  • -------------------------------------------------------------------------------
  • -------------------------------------------------------------------------------
  • ressources.rc:
  • -------------------------------------------------------------------------------
  • #include <windows.h>
  • #define IDM_QUIT 100
  • #define IDM_RESTORE 101
  • #define IDM_OPEN 102
  • #define IDM_PAUSE 103
  • #define IDM_SUIVANT 104
  • #define ID_ICONPLAY 105
  • #define ID_ICONPAUSE 106
  • ID_ICONPAUSE ICON "iconepause.ico"
  • ID_ICONPLAY ICON "iconeplay.ico"
  • ID_ICONE ICON "icone.ico"
  • LEMENU MENU
  • BEGIN
  • POPUP "TrayMenu"
  • BEGIN
  • MENUITEM "Quitter", IDM_QUIT
  • MENUITEM SEPARATOR
  • MENUITEM "Afficher", IDM_RESTORE
  • MENUITEM SEPARATOR
  • MENUITEM "Ouvrir", IDM_OPEN
  • MENUITEM "Pause", IDM_PAUSE
  • MENUITEM "Suivant", IDM_SUIVANT
  • END
  • END
main.c:
------------------------------------------------------------------------------
#include <windows.h>
#include <fmod/fmod.h>
#define ID_B_INFO 0
#define ID_B_QUITTER 1
#define ID_B_OUVRIR 2
#define ID_B_PAUSE 3
#define ID_B_STOP 4
#define ID_B_MUET 5
#define ID_B_BOUCLE 7
#define ID_B_SUIVANT 8
#define ID_B_ICONIFIER 6
#define ID_B_DESIGNA 9
#define ID_B_DESIGNB 10
#define MY_WM_NOTIFYICON WM_USER+1
#define IDM_QUIT  100
#define IDM_RESTORE 101
#define IDM_OPEN 102
#define IDM_PAUSE 103
#define IDM_SUIVANT 104
#define ID_ICONPLAY 105
#define ID_ICONPAUSE 106
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
//Déclaration des valeurs de la fenetre
char szClassName[ ] = "WindowsApp";
char szWindowTitle[ ] = "Spectrographe";
int fwidth = 400;
int fheight = 255;
int ewidth;
int eheight;
int i,j,replenght,act;
int continuer=1;
int changeok=1,suivant=0;
//Declaration nécessaires à la playlist
char rep[30][400];
char repertoire[400];
char repertoiresave[400];
char playlist[50][300];
char playlistrep[50][450];
char playing[300];
char *result = NULL;
//Définitions principales
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
static HWND hEdit;
NOTIFYICONDATA TrayIcon;
HMENU menu, Fichier,Options,Design;
HWND ecran;
HINSTANCE instance;
MSG messages;
WNDCLASSEX classefenetre;
RECT Rectecran;
HMENU hmenu;
HMENU hpopup;
POINT pos;
WIN32_FIND_DATA File;
HANDLE hSearch;
BOOL re;
//Déclaration pour l'ouverture d'un fichier
char szFile[MAX_PATH]={0};
char szFileprec[MAX_PATH]={0};
//Déclaration des outils de dessin
PAINTSTRUCT ps;HPEN hp;HDC hdc;
//Variables pour fmod
FSOUND_STREAM *musique = NULL;
int iChannel;
float *spectre = NULL;
int hauteurBarre=0;
int pause=0,stop=1,muet=0,balance=128,volume=255;
int barprogwidth=100,barprogheight=6,barprogvpos=50;
int ncolonnesinit=401,ncolonnes,design=2,designchoice;
//Declaration des caractères pour affichage
int mina=0,sa=0,minb=0,sb=0;
char duree[50] = "";
char minaa[3]="";
char saa[3]="";
char minbb[3]="";
char sbb[3]="";
//Déclarations de fonctions
void fquitter();
void ficonifier();
void frestaurer();
void finfo();
void fouvrir();
void fstop();
void freplay();
void freinit();
void fpause();
void fbalanceleft();
void fbalanceright();
void fmuet();
void fvolumedown();
void fvolumeup();
void ftimedown();
void ftimeup();
void fscan();
void fplay();
void fchange();
void fboucle();
void fsuivant();
void fdesign();
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
//Programme principal
int WINAPI WinMain (HINSTANCE instance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int modeaffichage)
{//Initialisation de fmod
FSOUND_Init(44100, 32, 0);
//Adaptation de la taille de la fenetre en fonction des dimensions voulues avec menu pris en compte
if(fwidth>ncolonnes){ncolonnes=(fwidth/(((int)(fwidth/ncolonnesinit))+1));}
else{ncolonnes=fwidth;};
ewidth=fwidth+6;
eheight=fheight+42;
//Déclaration de la classe de la fenetre et enregistrement
classefenetre.style = CS_DBLCLKS;
classefenetre.lpfnWndProc = WindowProcedure;
classefenetre.cbClsExtra = 0;
classefenetre.cbWndExtra = 0;
classefenetre.hInstance = instance;
classefenetre.hIconSm = LoadIcon (instance, "ID_ICONE");
classefenetre.hCursor = LoadCursor (NULL, IDC_ARROW);
classefenetre.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); 
classefenetre.lpszMenuName = NULL;
classefenetre.lpszClassName = szClassName;
classefenetre.cbSize = sizeof (WNDCLASSEX);
if (!RegisterClassEx (&classefenetre)){return 0;};
//Définition du menu et des sous-menus
Fichier = CreateMenu();
AppendMenu(Fichier,MF_STRING,ID_B_OUVRIR,"Ouvrir");
AppendMenu(Fichier,MF_STRING, ID_B_INFO, "Informations");
AppendMenu(Fichier,MF_SEPARATOR, (UINT)NULL, "");
AppendMenu(Fichier,MF_STRING, ID_B_ICONIFIER, "Mettre en icone");
AppendMenu(Fichier,MF_STRING,ID_B_QUITTER,"Quitter");
Options = CreateMenu();
AppendMenu(Options,MF_STRING,ID_B_SUIVANT,"Suivant");
AppendMenu(Options,MF_STRING,ID_B_STOP,"Stop");
AppendMenu(Options,MF_SEPARATOR, (UINT)NULL, "");
AppendMenu(Options,MF_STRING,ID_B_PAUSE,"Pause");
AppendMenu(Options,MF_STRING,ID_B_MUET,"Muet");
AppendMenu(Options,MF_STRING,ID_B_BOUCLE,"Boucle");
Design = CreateMenu();
AppendMenu(Design,MF_STRING,ID_B_DESIGNA,"Barres");
AppendMenu(Design,MF_STRING,ID_B_DESIGNB,"Analyseur");
menu = CreateMenu();
AppendMenu(menu, MF_POPUP, (UINT)Fichier, "Fichier");
AppendMenu(menu, MF_POPUP, (UINT)Options, "Edition");
AppendMenu(menu, MF_POPUP, (UINT)Design, "Design");
//Etat de certains menus
EnableMenuItem(menu, ID_B_INFO, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(menu, ID_B_ICONIFIER, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(menu, ID_B_STOP, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(menu, ID_B_MUET, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(menu, ID_B_BOUCLE, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(menu, ID_B_SUIVANT, MF_BYCOMMAND | MF_GRAYED);
//Declaration et affichage de la fenetre principale
ecran = CreateWindowEx (0,szClassName,szWindowTitle,WS_SYSMENU|WS_THICKFRAME,CW_USEDEFAULT,CW_USEDEFAULT,ewidth,eheight,NULL,menu,instance,NULL);
ShowWindow (ecran,modeaffichage);
UpdateWindow(ecran);
//Timer
SetTimer(ecran,1,30,NULL);
//Boucle évenementielle
while (GetMessage (&messages, NULL, 0, 0)){
TranslateMessage(&messages);
DispatchMessage(&messages);};
return messages.wParam;
};
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
LRESULT CALLBACK WindowProcedure (HWND ecran, UINT message, WPARAM wParam, LPARAM lParam)
{switch (message){
//Cas de la fermeture
case WM_CLOSE:{fquitter();};
break;
//Cas de redimension
case WM_SIZE:{GetWindowRect(ecran, &Rectecran);
              eheight = Rectecran.bottom - Rectecran.top;
              fheight = eheight-42;
              ewidth = Rectecran.right - Rectecran.left;
              fwidth = ewidth-6;
              if(fwidth>ncolonnes){ncolonnes=(fwidth/(((int)(fwidth/ncolonnesinit))+1));}
              else{ncolonnes=fwidth;};
             };
break;
//Cas du timer
case WM_TIMER:{RedrawWindow(ecran,NULL,NULL,RDW_ERASE|RDW_INVALIDATE|RDW_ERASENOW|RDW_NOCHILDREN);fchange();};
break;
//Cas de dessin
case WM_PAINT:{//Obtention des données du spectre
               spectre = FSOUND_DSP_GetSpectrum();
               i=0;
               if(spectre!=NULL){
               //Calcul des durées
               mina=(int)(FSOUND_Stream_GetTime(musique)/60000);
               sa=(FSOUND_Stream_GetTime(musique)/1000)-(60*((int)(FSOUND_Stream_GetTime(musique)/60000)));
               minb=(int)(FSOUND_Stream_GetLengthMs(musique)/60000);
               sb=(FSOUND_Stream_GetLengthMs(musique)/1000)-(60*((int)(FSOUND_Stream_GetLengthMs(musique)/60000)));
               if(mina<10){sprintf(minaa, "0%ld",mina);}else{sprintf(minaa, "%ld",mina);};
               if(sa<10){sprintf(saa, "0%ld",sa);}else{sprintf(saa, "%ld",sa);};
               if(minb<10){sprintf(minbb, "0%ld",minb);}else{sprintf(minbb, "%ld",minb);};
               if(sb<10){sprintf(sbb, "0%ld",sb);}else{sprintf(sbb, "%ld",sb);};
               //Ecriture de la chaine de durée
               sprintf(duree, "%s:%s/%s:%s",minaa,saa,minbb,sbb);
               //Début des dessins   
               hdc = BeginPaint(ecran, &ps);
               SetBkMode(hdc, TRANSPARENT);
               SetTextColor(hdc, RGB(255,255,0));
               TextOut(hdc,((int)(fwidth-(3*barprogwidth/2))-18), (barprogvpos-42), playing, lstrlen(playing));
               TextOut(hdc,((int)(fwidth-(3*barprogwidth/2))-18), (barprogvpos-22), duree, lstrlen(duree));
               //Création de la barre de progression
               hp=CreatePen(PS_SOLID, barprogheight, RGB(120,120,120));
               SelectObject(hdc,hp);
               Rectangle(hdc, ((((int)(fwidth-(3*barprogwidth/2)))-15)+barprogwidth),(barprogvpos+barprogheight), ((int)(fwidth-(3*barprogwidth/2))-15),barprogvpos);
               DeleteObject(hp);
               hp=CreatePen(PS_SOLID, barprogheight, RGB(255,255,0));
               SelectObject(hdc,hp);
               Rectangle(hdc, ((((int)(fwidth-(3*barprogwidth/2)))-15)+((barprogwidth*FSOUND_Stream_GetTime(musique))/(FSOUND_Stream_GetLengthMs(musique)))),(barprogvpos+barprogheight),((int)(fwidth-(3*barprogwidth/2))-15),barprogvpos);
               DeleteObject(hp);
               //Dessin du spectrographe
               i=0;
               while(i<ncolonnes){
               if(i>=(3*ncolonnes/4)){hauteurBarre = spectre[i]* 16 * fheight;}
               else if(i>=(2*ncolonnes/4)&&i<(3*ncolonnes/4)){hauteurBarre = spectre[i]* 12 * fheight;}
               else if(i>=(ncolonnes/4)&&i<(2*ncolonnes/4)){hauteurBarre = spectre[i]* 8 * fheight;}
               else if(i<(ncolonnes/4)){hauteurBarre = spectre[i]* 3 * fheight;};
               if (hauteurBarre > fheight){hauteurBarre = fheight;};
               if(hauteurBarre<=(eheight/4)){hp=CreatePen(PS_SOLID, 1, RGB(0,255,0));}
               else if(hauteurBarre>(eheight/4)&&hauteurBarre<=(eheight/2)){hp=CreatePen(PS_SOLID, 1, RGB(125,255,0));}
               else if(hauteurBarre>(eheight/2)&&hauteurBarre<=((3*eheight)/4)){hp=CreatePen(PS_SOLID, 1, RGB(255,125,0));}
               else if(hauteurBarre>((3*eheight)/4)){hp=CreatePen(PS_SOLID, 1, RGB(255,0,0));};
               SelectObject(hdc,hp);
               if(design==1){Rectangle(hdc, (ewidth/ncolonnes)*i,(fheight-hauteurBarre), ((ewidth/ncolonnes)*(i+1)), fheight);}
               else if(design==2){Rectangle(hdc, (ewidth/ncolonnes)*i,((int)((fheight-hauteurBarre)/2)), ((ewidth/ncolonnes)*(i+1)), ((int)((fheight+hauteurBarre)/2)));};
               DeleteObject(hp);
               i++;};
               //Fin des dessins
               EndPaint(ecran, &ps);
               };
              };
break;
//Cas d'appui sur une touche
case WM_KEYDOWN:{switch(wParam){case 0x1B:{ficonifier();};  
                                break;
                                case 0x70:{finfo();};  
                                break;
                                case 0x71:{fouvrir();};  
                                break;
                                case 0x72:{fstop();};  
                                break;
                                case 0x73:{freplay();};  
                                break;
                                case 0x74:{freinit();};  
                                break;
                                case 0x13:{fpause();};  
                                break;
                                case 0x76:{fbalanceleft();};  
                                break;
                                case 0x77:{fbalanceright();};  
                                break;
                                case 0x4D:{fmuet();};  
                                break;
                                case 0x7A:{fvolumedown();};  
                                break;
                                case 0x7B:{fvolumeup();};  
                                break;
                                case 0x22:{ftimedown();};  
                                break;
                                case 0x21:{ftimeup();};     
                                break;
                                case 0x24:{fsuivant();};
                                break;
                                };
                };
break;  
//Cas d'utilisation de boutons ou menus
case WM_COMMAND:{switch(LOWORD(wParam)){case ID_B_OUVRIR:{fouvrir();};
                                        break;
                                        case ID_B_INFO:{finfo();};
                                        break;
                                        case ID_B_ICONIFIER:{ficonifier();};
                                        break;
                                        case ID_B_QUITTER:{fquitter();};
                                        break;
                                        case ID_B_PAUSE:{fpause();};
                                        break;
                                        case ID_B_STOP:{fstop();};
                                        break;
                                        case ID_B_MUET:{fmuet();};
                                        break;
                                        case ID_B_BOUCLE:{fboucle();};
                                        break;
                                        case ID_B_SUIVANT:{fsuivant();};
                                        break;
                                        case ID_B_DESIGNA:{designchoice=1;fdesign();};
                                        break;
                                        case ID_B_DESIGNB:{designchoice=2;fdesign();};
                                        break;
                                        case IDM_QUIT: {fquitter();};
                                        break;
                                        case IDM_RESTORE :{frestaurer();};
                                        break;
                                        case IDM_OPEN :{fouvrir();};
                                        break;
                                        case IDM_PAUSE :{fpause();};
                                        break;
                                        case IDM_SUIVANT :{fsuivant();};
                                        break;
                                      }; 
               };       
break;
//Cas d'action sur l'icontray
case MY_WM_NOTIFYICON :{if(lParam == WM_LBUTTONUP){frestaurer();};
                        if(lParam == WM_RBUTTONUP){GetCursorPos(&pos);
                                                   hmenu = LoadMenu(instance,"LEMENU");
                                                   hpopup = GetSubMenu(hmenu, 0);
                                                   SetForegroundWindow(ecran);
                                                   TrackPopupMenuEx(hpopup, 0, pos.x, pos.y, ecran, NULL);              
                                                   DestroyMenu(hmenu);};
                       };    
break;
//Cas de destruction de la fenetre
case WM_DESTROY:{FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), 0);FSOUND_Stream_Close(musique);FSOUND_Close();Shell_NotifyIcon(NIM_DELETE,&TrayIcon);PostQuitMessage (0);};
break;
//Cas par défaut
default:return DefWindowProc (ecran, message, wParam, lParam);
};
//Fin du programme
return 0;
};
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
//Fonctions attachées au programme
void fquitter(){
SendMessage(ecran, WM_DESTROY, 0, 0);
};
void finfo(){
if(musique!=NULL){MessageBox(ecran,"Merci d'utiliser ce programme!\n\nAuteur: Alexandre Patarot\nAnnée de création: 2007\nDernière mise à jour: 27-02-07\nSite web: http://www.alexandrepatarot.new.fr/\n\nCe programme utilise fmod (http://www.fmod.org/)\n\nUtilisation du logiciel:\n-Echap: Mettre en icône\n-Bas de page: Retour rapide\n-Haut de page: Avance rapide\n-Home: Suivant\n-Pause: Pause\n-M: Muet\n-F1: Aide\n-F2: Ouvrir un fichier\n-F3: Arrêt de la lecture\n-F4: Relecture du morceau\n-F5: Réinitialisation des valeurs\n-F7: Balance à gauche\n-F8: Balance à droite\n-F11: Diminution du volume\n-F12: Augmentation du volume\n\n","Informations sur Spectrographe 1.7",MB_ICONINFORMATION);};
};
void fouvrir(){
//Ouverture de l'explorateur
OPENFILENAME ofn;
if(szFile!=NULL){strcpy(szFileprec,szFile);};
ZeroMemory(&ofn, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = ecran;
ofn.lpstrFile = szFile;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrFilter ="Fichier audio (.mp3, .wav, .wma)\0*.mp3;*.wav;*.wma\0";
ofn.nFilterIndex = 1;
ofn.Flags =OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
if (GetOpenFileName(&ofn)==TRUE)
{HANDLE hf;DWORD FileSize,nbcharRead ;CHAR *buffer;
hf = CreateFile(szFile, GENERIC_READ, 0,NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
FileSize = GetFileSize(hf, NULL);
buffer = (PCHAR)LocalAlloc(LMEM_FIXED, FileSize+1);
ReadFile(hf, buffer, FileSize, &nbcharRead, NULL) ;
buffer[FileSize] = 0;
SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)buffer);
LocalFree(buffer);
CloseHandle(hf);};
if(szFile[strlen(szFile)-4]=='.'){fplay();fscan();};
};
void fplay(){
if(strcmp(szFileprec,szFile)!=0||stop==1){
stop=0;pause=0;
EnableMenuItem(menu, ID_B_INFO, MF_BYCOMMAND);
EnableMenuItem(menu, ID_B_ICONIFIER, MF_BYCOMMAND);
EnableMenuItem(menu, ID_B_STOP, MF_BYCOMMAND);
EnableMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND);
EnableMenuItem(menu, ID_B_MUET, MF_BYCOMMAND);
EnableMenuItem(menu, ID_B_BOUCLE, MF_BYCOMMAND);
EnableMenuItem(menu, ID_B_SUIVANT, MF_BYCOMMAND);
CheckMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND);
CheckMenuItem(menu, ID_B_MUET, MF_BYCOMMAND);
if(musique!=NULL){FSOUND_Stream_Close(musique);};
musique = FSOUND_Stream_Open(szFile,FSOUND_LOOP_NORMAL, 0, 0);
iChannel = FSOUND_Stream_Play(FSOUND_FREE, musique);
FSOUND_SetVolume(FSOUND_Stream_Play(FSOUND_FREE, musique),volume);
FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), 1);};
};    
void fscan(){
//Remise à zéro de répertoire
memset( repertoire, 0, strlen(repertoire));
strcpy(playing,strrchr (szFile,'\\'));
strncpy(repertoire,szFile,strlen(szFile)-strlen(playing)+1);
i=0;
while(i<strlen(playing)){if(i<(strlen(playing)-5)){playing[i]=playing[i+1];}else{playing[i]=' ';};i++;};
strcpy(repertoiresave,repertoire);
strcat(repertoire,"*.*");
hSearch=FindFirstFile(repertoire, &File);
if(hSearch !=  INVALID_HANDLE_VALUE){
re=TRUE;
i=0;
while(re){re = FindNextFile(hSearch, &File);
          if(strstr(File.cFileName, ".mp3")!=NULL){strcpy(playlistrep[i],repertoiresave);
                                                   strcat(playlistrep[i],File.cFileName);
                                                   strcpy(playlist[i],playlistrep[i]);
                                                   i++;};
         };
replenght=i-1;i=0;};                    
FindClose(hSearch);
};
void fchange(){
if(changeok==1){
if(suivant==1||FSOUND_Stream_GetTime(musique)>=FSOUND_Stream_GetLengthMs(musique)-500){
if(act<replenght){
if(replenght==1||strcmp(playlist[act],szFile)!=0){
                                    strcpy(szFile,playlist[act]);fplay();act++;
                                    if(szFile!=NULL){strcpy(szFileprec,szFile);};
                                    //Mise à jour du nom de fichier
                                    strcpy(playing,strrchr (szFile,'\\'));
                                    i=0;
                                    while(i<strlen(playing)){if(i<(strlen(playing)-5)){playing[i]=playing[i+1];}else{playing[i]=' ';};i++;};
                                    if(suivant==1){suivant=0;};
                                                 }
else{act++;fchange();};}
else{act=0;};}
else{};};
};
void fboucle(){
if(changeok==1){changeok=0;CheckMenuItem(menu, ID_B_BOUCLE, MF_BYCOMMAND | MF_CHECKED);}
else{changeok=1;CheckMenuItem(menu, ID_B_BOUCLE, MF_BYCOMMAND);};
};
void fstop(){
if(stop==0){stop=1;FSOUND_Stream_Stop(musique);
CheckMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND);
CheckMenuItem(menu, ID_B_MUET, MF_BYCOMMAND);
EnableMenuItem(menu, ID_B_STOP, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(menu, ID_B_MUET, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(menu, ID_B_BOUCLE, MF_BYCOMMAND | MF_GRAYED);
EnableMenuItem(menu, ID_B_SUIVANT, MF_BYCOMMAND | MF_GRAYED);};
};
void fsuivant(){
if(changeok==1&&replenght!=0){suivant=1;fchange();}
else{};
};    
void freplay(){
if(musique!=NULL){iChannel=FSOUND_Stream_Play(FSOUND_FREE, musique);
                  FSOUND_SetVolume(FSOUND_Stream_Play(FSOUND_FREE, musique),volume);
                  stop=0;pause=0;
                  EnableMenuItem(menu, ID_B_STOP, MF_BYCOMMAND);
                  EnableMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND);
                  EnableMenuItem(menu, ID_B_MUET, MF_BYCOMMAND);
                  EnableMenuItem(menu, ID_B_BOUCLE, MF_BYCOMMAND);
                  EnableMenuItem(menu, ID_B_SUIVANT, MF_BYCOMMAND);
                  CheckMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND);
                  CheckMenuItem(menu, ID_B_MUET, MF_BYCOMMAND);};
};    
void freinit(){
volume=255;balance=128;
FSOUND_SetVolume(FSOUND_Stream_Play(FSOUND_FREE, musique),volume);
FSOUND_SetPan(FSOUND_Stream_Play(FSOUND_FREE, musique),balance);                             
};    
void fpause(){
if(pause==0){pause=1;FSOUND_SetPaused(iChannel,pause);
CheckMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND | MF_CHECKED);
TrayIcon.hIcon = LoadIcon((HINSTANCE) GetModuleHandle (NULL),MAKEINTRESOURCE(ID_ICONPAUSE));
Shell_NotifyIcon(NIM_MODIFY, &TrayIcon);
}
else{pause=0;FSOUND_SetPaused(iChannel,pause);
CheckMenuItem(menu, ID_B_PAUSE, MF_BYCOMMAND);
TrayIcon.hIcon = LoadIcon((HINSTANCE) GetModuleHandle (NULL),MAKEINTRESOURCE(ID_ICONPLAY));
Shell_NotifyIcon(NIM_MODIFY, &TrayIcon);
};                                                   
}; 
void fbalanceleft(){
balance=balance-10;if(balance<=0){balance=0;};FSOUND_SetPan(FSOUND_Stream_Play(FSOUND_FREE, musique),balance);  
}; 
void fbalanceright(){
balance=balance+10;if(balance>=255){balance=255;};FSOUND_SetPan(FSOUND_Stream_Play(FSOUND_FREE, musique),balance);
}; 
void fmuet(){
if(muet==0){muet=1;FSOUND_SetMute(iChannel,muet);
CheckMenuItem(menu, ID_B_MUET, MF_BYCOMMAND | MF_CHECKED);}
else{muet=0;FSOUND_SetMute(iChannel,muet);CheckMenuItem(menu, ID_B_MUET, MF_BYCOMMAND);};                                                   
};
void fvolumedown(){
volume=volume-10;if(volume>=255){volume=255;};FSOUND_SetVolume(FSOUND_Stream_Play(FSOUND_FREE, musique),volume);                    
};
void fvolumeup(){
volume=volume+10;if(volume<=0){volume=0;};FSOUND_SetVolume(FSOUND_Stream_Play(FSOUND_FREE, musique),volume);
};    
void ftimedown(){
if(musique!=NULL){if(FSOUND_Stream_GetTime(musique)>1000){FSOUND_Stream_SetTime(musique,(FSOUND_Stream_GetTime(musique)-1000));};};
};
void ftimeup(){
if(musique!=NULL){if(FSOUND_Stream_GetTime(musique)<(FSOUND_Stream_GetLengthMs(musique)-1000)){FSOUND_Stream_SetTime(musique,(FSOUND_Stream_GetTime(musique)+1000));};};
};
void fdesign(){
design=designchoice;
};    
void ficonifier(){
if(musique!=NULL){
ShowWindow(ecran,SW_HIDE);
TrayIcon.cbSize = sizeof( TrayIcon );
TrayIcon.hWnd = ecran;
TrayIcon.uID = 0;
TrayIcon.uCallbackMessage = MY_WM_NOTIFYICON;
TrayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
strcpy(TrayIcon.szTip, "Spectrographe");
if(pause==1){TrayIcon.hIcon = LoadIcon((HINSTANCE) GetModuleHandle (NULL),MAKEINTRESOURCE(ID_ICONPAUSE));}
else{TrayIcon.hIcon = LoadIcon((HINSTANCE) GetModuleHandle (NULL),MAKEINTRESOURCE(ID_ICONPLAY));};
Shell_NotifyIcon(NIM_ADD, &TrayIcon);
};
};   
void frestaurer(){
ShowWindow(ecran,SW_SHOW);Shell_NotifyIcon(NIM_DELETE,&TrayIcon);
};    
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
ressources.rc:
-------------------------------------------------------------------------------
#include <windows.h>
#define IDM_QUIT  100
#define IDM_RESTORE 101
#define IDM_OPEN 102
#define IDM_PAUSE 103
#define IDM_SUIVANT 104
#define ID_ICONPLAY 105
#define ID_ICONPAUSE 106

ID_ICONPAUSE  ICON  "iconepause.ico"
ID_ICONPLAY  ICON  "iconeplay.ico"
ID_ICONE  ICON  "icone.ico"

LEMENU MENU
BEGIN
  POPUP "TrayMenu"
    BEGIN
       MENUITEM "Quitter", IDM_QUIT
       MENUITEM SEPARATOR
       MENUITEM "Afficher", IDM_RESTORE
       MENUITEM SEPARATOR
       MENUITEM "Ouvrir", IDM_OPEN
       MENUITEM "Pause", IDM_PAUSE
       MENUITEM "Suivant", IDM_SUIVANT
    END
END

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • Spectrosetup.exTélécharger ce fichier [Réservé aux membres club]584 946 octets

Télécharger le zip

Historique

02 mars 2007 13:38:44 :
Update et corrections.
29 mars 2007 21:39:37 :
Ajout du fichier d'installation

Commentaires et avis

signaler à un administrateur
Commentaire de Patrice99 le 13/02/2007 09:14:27

Voir aussi :
VBWaveComp : Le comparateur de spectre audio en VB .Net
Vers un "benchmark" de la compression audio
www.vbfrance.com/code.aspx?ID=5319

signaler à un administrateur
Commentaire de Mr.X le 16/02/2007 11:42:57

Bon quelqu'un à supprimer mon ancien commentaire, voila comment changer l'icône :
HICON hIcon = (HICON)LoadImage(FirstInstance, MAKEINTRESOURCE(IDI_ICON), IMAGE_ICON, LR_DEFAULTSIZE, LR_DEFAULTSIZE,LR_DEFAULTCOLOR);

Qu'il faut mettre ici : TrayIcon.hIcon = hIcon

signaler à un administrateur
Commentaire de Mini92 le 01/03/2007 20:16:34

Ce serait sympas de compresser tes fichiers (avec le .exe aussi)

signaler à un administrateur
Commentaire de Mini92 le 03/03/2007 17:46:38

Cette source est trés intéressante. 10/10

signaler à un administrateur
Commentaire de Dinacy_1 le 27/08/2007 02:04:16

Super sources mais le logiciels aprés etre compilé bug à l'ouverture d'une musique si vous des subjestions pour remedier a ce probleme ???

Merci d'avance

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

developper un lecteur audio en ligne [ par flofloo ] bonjour tout voila je me suis leve ce bon matin et je me suis dit flo et si tu developper un serveur ki partagerais de la musik en ligne a tes clients ASCII [ par musikadri ] Bonjour à tousJe suis complètement novice dans tous ces domaines de codes sources.Voici ma question:En voulant lire un fichier audio (wav) sur mon MAC Pb d'un driver Audio:pas de son!!! [ par cpp26 ] salut;j'ai un notebook HP 2510p.Depuis quelques jours j'ai formaté mon ordi.En effet j'avais pas du probleme avec les drivers ;je les ai trouvés  au s [HP] Driver Audio [ par cpp26 ] salut;j'ai un notebook HP 2510p.Depuis quelques jours je l'ai formaté.En effet j'avais pas du probleme avec les drivers ;je les ai trouvés  au site of lire fichier audio dans une durée donnée [ par Noura12 ] slt à tous, Bon je cherche une librairie qui me permet de lire un fichier audio en précisant la durée de lecture,disant le lire  de 0 ms juqu'à 1000 Line In audio [ par cand1de ] Bonjour.Comment accéder au flux audio délivré par un microphone (line-in) ? Sous quel forme se présente-t-il ?Merci. Pb avec accès à une class et classement d'un listview [ par xasm ] Bonjour,   j'ai réalisé une application qui liste les fichiers d'un dossier ou lecteur puis en faitune base de données afin de faire une comparaison a ellipse sans Pen(contour) winapi [ par dyroj ] salut tous le monde,je voudrais dessiner une ellipse sans contour comme avec la fontion FillRect() pour les rectangles.J'ai chercher FillEllipse() mai


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,593 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.