Accueil > > > SPECTROGRAPHE EN C AVEC L'API WINDOWS
SPECTROGRAPHE EN C AVEC L'API WINDOWS
Information sur la source
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
- 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
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
Sources de la même categorie
Commentaires et avis
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
|
Derniers Blogs
SESSION SILVERLIGHT 5 3D : SLIDES ET DEMOSSESSION SILVERLIGHT 5 3D : SLIDES ET DEMOS par Groc
Durant les techdays, j'ai eu le plaisir d'animer une session sur Silverlight 5 et la 3D avec Simon Ferquel. Comme promis, voici nos slides et mes démos (celles avec le viper BSG) ici et là. Pour mémoire, les démos utilisent toutes le viper BSG...
Cliquez pour lire la suite de l'article par Groc [TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES[TECHDAYS 2012] SESSION WEBMATRIX 2 : LE COUTEAU SUISSE GRATUIT POUR VOS DéVELOPPEMENTS WEB - SLIDES par gpommier
Suite à la session que j'ai présenté sur WebMatrix 2, vous pouvez trouver les slides ici, ainsi que les démos en packages nuget : démos1 et démos2 J'en profite pour remercier chaleureusement tous ceux qui sont venus très nombreux à cette sess...
Cliquez pour lire la suite de l'article par gpommier [SHAREPOINT] LES SESSIONS TECHDAYS 2012.[SHAREPOINT] LES SESSIONS TECHDAYS 2012. par Patrick Guimonet
Voici donc pour ceux qui n'ont pas pu venir, ou ceux qui n'ont pas pu toutes les suivre la liste des sessions SharePoint aux TechDays 2012, que je mettrais à jour dès que les liens des vidéo seront disponibles. Ou ici : http...
Cliquez pour lire la suite de l'article par Patrick Guimonet TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko
Logiciels
Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning
|