home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 November / CDVD1105.ISO / Software / Freeware / programare / bass / c / fxtest / fxtest.c next >
Encoding:
C/C++ Source or Header  |  2005-09-08  |  4.4 KB  |  168 lines

  1. // BASS DX8 Effects Test, copyright (c) 2001-2005 Ian Luck.
  2.  
  3. #include <windows.h>
  4. #include <commctrl.h>
  5. #include <stdio.h>
  6. #include "bass.h"
  7.  
  8.  
  9. HWND win=NULL;
  10.  
  11. DWORD chan;            // channel handle
  12. HFX fx[4];            // 3 eq bands + reverb
  13.  
  14. OPENFILENAME ofn;
  15. char path[MAX_PATH];
  16.  
  17. /* display error messages */
  18. void Error(char *es)
  19. {
  20.     char mes[200];
  21.     sprintf(mes,"%s\n(error code: %d)",es,BASS_ErrorGetCode());
  22.     MessageBox(win,mes,"Error",0);
  23. }
  24.  
  25.  
  26. #define MESS(id,m,w,l) SendDlgItemMessage(win,id,m,(WPARAM)w,(LPARAM)l)
  27.  
  28. void UpdateFX(int b)
  29. {
  30.     int v=MESS(20+b,TBM_GETPOS,0,0);
  31.     if (b<3) {
  32.         BASS_FXPARAMEQ p;
  33.         BASS_FXGetParameters(fx[b],&p);
  34.         p.fGain=10.0-v;
  35.         BASS_FXSetParameters(fx[b],&p);
  36.     } else {
  37.         BASS_FXREVERB p;
  38.         BASS_FXGetParameters(fx[3],&p);
  39.         p.fReverbMix=-0.012*v*v*v;
  40.         BASS_FXSetParameters(fx[3],&p);
  41.     }
  42. }
  43.  
  44. BOOL CALLBACK dialogproc(HWND h,UINT m,WPARAM w,LPARAM l)
  45. {
  46.     switch (m) {
  47.         case WM_COMMAND:
  48.             switch (LOWORD(w)) {
  49.                 case IDCANCEL:
  50.                     DestroyWindow(h);
  51.                     break;
  52.                 case 10:
  53.                     {
  54.                         char file[MAX_PATH]="";
  55.                         ofn.lpstrFilter="playable files\0*.mo3;*.xm;*.mod;*.s3m;*.it;*.mtm;*.umx;*.mp3;*.mp2;*.mp1;*.ogg;*.wav;*.aif\0All files\0*.*\0\0";
  56.                         ofn.lpstrFile=file;
  57.                         if (GetOpenFileName(&ofn)) {
  58.                             memcpy(path,file,ofn.nFileOffset);
  59.                             path[ofn.nFileOffset-1]=0;
  60.                             // free both MOD and stream, it must be one of them! :)
  61.                             BASS_MusicFree(chan);
  62.                             BASS_StreamFree(chan);
  63. #if 1 // with FX flag
  64.                             if (!(chan=BASS_StreamCreateFile(FALSE,file,0,0,BASS_SAMPLE_LOOP|BASS_SAMPLE_FX))
  65.                                 && !(chan=BASS_MusicLoad(FALSE,file,0,0,BASS_MUSIC_LOOP|BASS_MUSIC_RAMP|BASS_SAMPLE_FX,0))) {
  66. #else // without FX flag
  67.                             if (!(chan=BASS_StreamCreateFile(FALSE,file,0,0,BASS_SAMPLE_LOOP))
  68.                                 && !(chan=BASS_MusicLoad(FALSE,file,0,0,BASS_MUSIC_LOOP|BASS_MUSIC_RAMP,0))) {
  69. #endif
  70.                                 // whatever it is, it ain't playable
  71.                                 MESS(10,WM_SETTEXT,0,"click here to open a file...");
  72.                                 Error("Can't play the file");
  73.                                 break;
  74.                             }
  75.                             MESS(10,WM_SETTEXT,0,file);
  76.                             { // setup the effects
  77.                                 BASS_FXPARAMEQ p;
  78.                                 fx[0]=BASS_ChannelSetFX(chan,BASS_FX_PARAMEQ,0);
  79.                                 fx[1]=BASS_ChannelSetFX(chan,BASS_FX_PARAMEQ,0);
  80.                                 fx[2]=BASS_ChannelSetFX(chan,BASS_FX_PARAMEQ,0);
  81.                                 fx[3]=BASS_ChannelSetFX(chan,BASS_FX_REVERB,0);
  82.                                 p.fGain=0;
  83.                                 p.fBandwidth=18;
  84.                                 p.fCenter=125;
  85.                                 BASS_FXSetParameters(fx[0],&p);
  86.                                 p.fCenter=1000;
  87.                                 BASS_FXSetParameters(fx[1],&p);
  88.                                 p.fCenter=8000;
  89.                                 BASS_FXSetParameters(fx[2],&p);
  90.                                 UpdateFX(0);
  91.                                 UpdateFX(1);
  92.                                 UpdateFX(2);
  93.                                 UpdateFX(3);
  94.                             }
  95.                             BASS_ChannelPlay(chan,FALSE);
  96.                         }
  97.                     }
  98.                     break;
  99.             }
  100.             break;
  101.  
  102.         case WM_VSCROLL:
  103.             if (l) {
  104.                 UpdateFX(GetDlgCtrlID((HWND)l)-20);
  105.             }
  106.             break;
  107.  
  108.         case WM_INITDIALOG:
  109.             win=h;
  110.             GetCurrentDirectory(MAX_PATH,path);
  111.             memset(&ofn,0,sizeof(ofn));
  112.             ofn.lStructSize=sizeof(ofn);
  113.             ofn.hwndOwner=h;
  114.             ofn.nMaxFile=MAX_PATH;
  115.             ofn.lpstrInitialDir=path;
  116.             ofn.Flags=OFN_HIDEREADONLY|OFN_EXPLORER;
  117.             // setup output - default device
  118.             if (!BASS_Init(-1,44100,0,win,NULL)) {
  119.                 Error("Can't initialize device");
  120.                 DestroyWindow(win);
  121.                 break;
  122.             }
  123.             {
  124.                 // check that DX8 features are available
  125.                 BASS_INFO bi={sizeof(bi)};
  126.                 BASS_GetInfo(&bi);
  127.                 if (bi.dsver<8) {
  128.                     BASS_Free();
  129.                     Error("DirectX 8 is not installed");
  130.                     DestroyWindow(win);
  131.                 }
  132.             }
  133.             /* initialize eq/reverb sliders */
  134.             MESS(20,TBM_SETRANGE,FALSE,MAKELONG(0,20));
  135.             MESS(20,TBM_SETPOS,TRUE,10);
  136.             MESS(21,TBM_SETRANGE,FALSE,MAKELONG(0,20));
  137.             MESS(21,TBM_SETPOS,TRUE,10);
  138.             MESS(22,TBM_SETRANGE,FALSE,MAKELONG(0,20));
  139.             MESS(22,TBM_SETPOS,TRUE,10);
  140.             MESS(23,TBM_SETRANGE,FALSE,MAKELONG(0,20));
  141.             MESS(23,TBM_SETPOS,TRUE,20);
  142.             return 1;
  143.  
  144.         case WM_DESTROY:
  145.             BASS_Free();
  146.             break;
  147.     }
  148.     return 0;
  149. }
  150.  
  151. int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
  152. {
  153.     /* check that BASS 2.2 was loaded */
  154.     if (BASS_GetVersion()!=MAKELONG(2,2)) {
  155.         MessageBox(0,"BASS version 2.2 was not loaded","Incorrect BASS.DLL",0);
  156.         return 0;
  157.     }
  158.  
  159.     { // enable trackbar support
  160.         INITCOMMONCONTROLSEX cc={sizeof(cc),ICC_BAR_CLASSES};
  161.         InitCommonControlsEx(&cc);
  162.     }
  163.  
  164.     DialogBox(hInstance,(char*)1000,0,&dialogproc);
  165.  
  166.     return 0;
  167. }
  168.