begin process at 2012 02 12 13:02:34
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Multimédia

 > SPECTROGRAPHE EN C AVEC L'API WINDOWS

SPECTROGRAPHE EN C AVEC L'API WINDOWS


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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é :8 380 / 794

Auteur : patarotalexandre

Ecrire un message privé
Site perso
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

Les Membres Club peuvent 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

 Sources du même auteur

Source avec Zip Source avec une capture FRACTALES DE JULIA ET MANDELBROT EN SDL
Source avec Zip Source avec une capture ARRÊT AUTOMATIQUE DE WINDOWS.

 Sources de la même categorie

Source avec Zip ADAPTER LES TEMPS DE SUBTITLES DE SOUS TITRAGE ENTRE DEUX LA... par berrami
Source avec Zip Source avec une capture DÉTECTION DE VISAGE (YEUX, NEZ, BOUCHE) AVEC OPENCV EN TEMPS... par MadM@tt
Source avec Zip Source avec une capture GÉNÉRATEUR FM EXPÉRIMENTAL par tontonCD
Source avec Zip LECTEUR MULTIMÉDIA par omegatou
Source avec Zip IMPLÉMENTATION D'UN ALGORITHME DE COMPRESSION/DECOMPRESSION ... par eemikhm

 Sources en rapport avec celle ci

Source avec Zip LECTEUR MULTIMÉDIA par omegatou
Source avec Zip CONVERTIR FLV 2 MP3 par nipepsinicolas
Source avec Zip Source avec une capture LECTEUR DE MUSIQUE AVEC SDL ET FMOD par Lemng
Source avec Zip CODE DE HUFFMAN par Ricky_MacElroy
Source avec Zip Source avec une capture ~~ PETIT LECTEUR VIDEO [ WXWIDGETS ----> WXMEDIACTRL ] ~~ par satellite34

Commentaires et avis

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

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

Commentaire de Mini92 le 01/03/2007 20:16:34

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

Commentaire de Mini92 le 03/03/2007 17:46:38

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

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 lecteur audio [ par diaso ] bonjour, je développe un lecteur audio, sur le qu'elle je veux que le son se joue selon la position du curseur, sur le spectre qui affiche les ondes q capturer le flux audio de la carte son et l'envoyer via bluetooth [ par electrogeek21 ] Bonjour, Je suis sur un projet en ce moment et l'objectif est d'envoyer le son qui se joue sur le pc (media player , internet ou autre) vers sa chai Signal [ par bilumbo13 ] Bonjour, Voila mon problème : ( j'espère que vous pourrez m'aider ) j'ai deux processus " un ecrivain " et " un lecteur " le processus écrivain ecr traçage de courbe en C [ par tecna36 ] Bonjour, J'aimerai afficher la courbe d'un signal audio sur un graphe. Et ce à partir d'un fichier audio (.wav) pouvoir visualiser sa courbe. je su comment lire un son.wave sous c [ par dosal ] bonjour, s'il vous plait aidez moi, j'ai un projet de fin d'étude sur le codage et décodage d'un base de données audio sous cou c++, je cherche une fo focus fenêtre WinApi [ par GrandHunier ] Bonjour à tous, J'ai un petit problème en C avec WinApi, je n'arrive pas à conserver la fenêtre que je crée active quand une autre fenêtre quelconque USB - HID [ par acarapataf ] Bonjour à tou(te)s, Dans le cadre d'un projet de régulation, je dois faire communiquer (envoie + réception) un mini-pc avec un microcontroleur de typ volume d'un sample audio [ par oeildedinde ] Salut, Je cherche une solution pour abaisser le niveau sonore d'un sample audio (dans un filtre directshow). J'ai testé 2 solutions qui me font appar


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,196 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales