Spectrographe en c avec l'api windows

Description

  • 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 / Exemple :


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

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

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

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

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

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