IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Elle danse pour vous


Sujet :

Contribuez

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 548
    Points : 964
    Points
    964
    Par défaut Elle danse pour vous
    Nom : dance.png
Affichages : 55
Taille : 271,5 Ko

    Attention,
    en raison de la taille du projet j'ai été forcé de découper le code en 2 parties pour ne pas dépaser le maximum de 2 Mo par pièce jointe.
    J'ai également réduit au maximum le nombre de plugins OpenGL, et le dossier "Audio" ne comporte qu'une seule musique "Samba Pa Ti", qui a été converti en mono pour respecter les 2 Mo fatidiques.

    Vous devez donc décompresser en premier "Dance.7z", puis "Resource.7z" dont le contenu doit être copiè dans Dance\x94\Release, sinon le programme ne fonctionnera pas.

    Ce projet multimedia VS2022 de type "DreamScene" est très spécial car il utilise simultanément du code 32 et 64-bit.
    Le message WM_COPYDATA permet de faire dialoguer les 2 mondes en utilisant IPC (Inter Process Communication).

    Le code original a été écrit en 2010 avec la bibliothèque graphique GDImage 5.00 32-bit, cette version 64-bit est basée sur GDImage64 7.16.

    Détails sur ce projet :
    Vous trouverez des informations à propos de cette démo sur mon forum privé ici.

    Plugins visuels OpenGL :
    Ce sont de petites DLL 32-bit écrites pour le projet BassBox il y a 17 ans.
    Elles réagissent au tempo de la musique, il est donc conseillé d'utiliser des musiques assez rythmées comme par exemple "Jerusalema".
    Vous pouvez utiliser le tirer-déplacer depuis l'explorateur pour jouer les musiques de votre choix.
    Les extensions supportéss sont : .mp3, .ogg, .wav, .aif, .cda, .mo3, .it, .xm, .s3m, .mtm, .mod, .umx.

    Il existe une application multimedia plus récente dont tous les plugins OpenGL fonctionnent en mode 64-bit
    Voir la video

    Exemple de plugin 64-bit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    //+--------------------------------------------------------------------------+
    //|                                                                          |
    //|                                 Woofer                                   |
    //|                          BassBox OpenGL plugin                           |
    //|                                                                          |
    //+--------------------------------------------------------------------------+
    #include <windows.h>
    #include "..\TCLib\math.h"
    #include "..\TCLib\Strings.cpp"
     
    #include <gl/GL.h>
    #include <gl/GLU.h>
    #include "gl2.h"
     
    typedef ULONGLONG QWORD;
    #include "BBplugin.h"
    #define ExportC extern "C" _declspec (dllexport)
     
    DWORD g_color[34];
    float gsR[32], gsG[32], gsB[32];
    void bbp_ColorInit() {
        g_color[0]  = 0;
        g_color[1]  = bbpARGB(255, 32,32,32);
        g_color[2]  = bbpARGB(255, 0,44,233);
        g_color[3]  = bbpARGB(255, 0,67,210);
        g_color[4]  = bbpARGB(255, 0,89,187);
        g_color[5]  = bbpARGB(255, 0,112,164);
        g_color[6]  = bbpARGB(255, 0,135,142);
        g_color[7]  = bbpARGB(255, 0,159,117);
        g_color[8]  = bbpARGB(255, 0,183,88);
        g_color[9]  = bbpARGB(255, 0,207,58);
        g_color[10] = bbpARGB(255, 0,231,29);
        g_color[11] = bbpARGB(255, 26,234,26);
        g_color[12] = bbpARGB(255, 52,237,23);
        g_color[13] = bbpARGB(255, 79,240,20);
        g_color[14] = bbpARGB(255, 105,243,17);
        g_color[15] = bbpARGB(255, 126,245,14);
        g_color[16] = bbpARGB(255, 147,248,11);
        g_color[17] = bbpARGB(255, 168,250,8);
        g_color[18] = bbpARGB(255, 189,253,5);
        g_color[19] = bbpARGB(255, 210,255,2);
        g_color[20] = bbpARGB(255, 233,255,0);
        g_color[21] = bbpARGB(255, 255,255,0);
        g_color[22] = bbpARGB(255, 255,251,0);
        g_color[23] = bbpARGB(255, 255,235,0);
        g_color[24] = bbpARGB(255, 255,215,0);
        g_color[25] = bbpARGB(255, 255,196,0);
        g_color[26] = bbpARGB(255, 255,176,0);
        g_color[27] = bbpARGB(255, 255,156,0);
        g_color[28] = bbpARGB(255, 253,137,0);
        g_color[29] = bbpARGB(255, 255,117,0);
        g_color[30] = bbpARGB(255, 255,97,0);
        g_color[31] = bbpARGB(255, 255,78,0);
        g_color[32] = bbpARGB(255, 255,58,0);
        g_color[33] = bbpARGB(255, 255,0,0);
    }
     
    void MakeColorLUT() {
        COLORBYTES bytestruct;
        for (long K = 0; K < 34; K++) {
            MoveMemory(&bytestruct, &g_color[K], sizeof(COLORBYTES));
            gsR[K] = (float)(bytestruct.R / 255.0f);
            gsG[K] = (float)(bytestruct.G / 255.0f);
            gsB[K] = (float)(bytestruct.B / 255.0f);
        }
    }
     
    ExportC long BBProc (OUT BBPLUGIN &BBP) {
     long K, KK, nRet = BBP_SUCCESS;
     const float SmoothValue = 0.8f, Cx = -600.0f, Cy = -900.0f, Cz = -150.0f;
     float fft[256], SoundBuffer[256], pulse, rAspect;
     static BBPTEXTURE mt;
     
     switch (BBP.msg) {
     case BBP_RENDER:
      pulse = (float) max(BBP.lpeak / 700, BBP.rpeak / 700) / 14.0f;
      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      glLoadIdentity();
      glTranslatef(0.0f, -0.0f, Cz);
      glRotatef(Cx, 1.0f, 0.0f, 0.0f);
      glRotatef(Cy, 0.0f, 1.0f, 0.0f);
      // This is where the magic happens:
      // BBP.fftdata returns a pointer to an area of memory containing an array of 256 singles.
      MoveMemory(&fft[0], BBP.fftdata, 256 * sizeof(float));
      // Try and smooth out the buffer by averaging the last results:
      for (K = 0; K < 256; K++) {
       // We use SQR to bring out the midtone of the music, otherwise the spectrum is very flat.
       SoundBuffer[K] = (float) (sqrt(sqrt(fft[K]) * 2));
      }
      for (long Direction = -1; Direction < 2; Direction++) {
       if (Direction) {
        for (KK = 0; KK < 3; KK++) {
         K = KK * 16;
         if (KK == 0) { K = 2; }
         glPushMatrix();
     
          // The iterator K goes from 0 (deepest bass) to 255 (highest treble pitch)
          // Ax is the distance from the center. Ay & By are width and height of the flares.
          float Ax = (KK * 16) / 128.0f * 125.0f * Direction * pulse;
          float Ay = 2 + SoundBuffer[K] * (50.0f + K / 255.0f * 70.0f); // As K increases, the relative size of the signal
          float By = 2 + SoundBuffer[K] * (50.0f + K / 255.0f * 70.0f); // drops, so the (K / 255 * 20) compensates by boosting the signal at higher frequencies.
     
          glColor4f(gsR[K] * SoundBuffer[K], gsG[K] * SoundBuffer[K], gsB[K] * SoundBuffer[K] + 0.1f, 0.7f);
          glTranslatef(Ax, 0.0f, 0.0f);
          glRotatef(Cx, 1.0f, 0.0f, 0.0f);
          glRotatef(Cy, 0.0f, 1.0f, 0.0f);
     
          glBegin(GL_QUADS);
           glTexCoord2f(0.0f,0.0f); glVertex3f(-By , Ay, 0.0f);
           glTexCoord2f(1.0f,0.0f); glVertex3f( By , Ay, 0.0f);
           glTexCoord2f(1.0f,1.0f); glVertex3f( By ,-Ay, 0.0f);
           glTexCoord2f(0.0f,1.0f); glVertex3f(-By ,-Ay, 0.0f);
          glEnd();
         glPopMatrix();
        }
       }
      }
      // Very important we must reassign BBP.RC to the new BBP.DC
      // Note: don't use permanent DC, this produce better and smoother display
      wglMakeCurrent(BBP.dc, BBP.rc);
      break;
     
     case BBP_CREATE:
      // Retrieve plugin details
      strcpy(BBP.title, "Woofer");
      strcpy(BBP.author, "Patrice Terrier");
      BBP.version  = MAKEWORD(2, 0); // Version 2.0"
      BBP.renderto = BBP_OPENGL;    // or BBP_GDIPLUS, or BBP_DIRECTX
      break;
     
     case BBP_INIT:
      bbp_ColorInit();
      glShadeModel(GL_SMOOTH);  // Enables Smooth Color Shading
      glClearDepth(1.0f);    // Depth Buffer Setup
      glDisable(GL_DEPTH_TEST); // Disable Depth Buffer
      glBlendFunc(GL_ONE, GL_ONE);
      glDepthFunc(GL_LESS);   // The Type Of Depth Test To Do
      glDisable(GL_LIGHTING);
      glEnable(GL_BLEND); 
      glAlphaFunc(GL_GREATER, 0.01f);
      glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
      glEnable(GL_TEXTURE_2D);
      Path_Combine(mt.FullName, TexturePath(), L"boomer.png"); mt.ID = 1; mt.Square = 3;
      MakeMultipleTexture(&mt, 1);
      MakeColorLUT();
      break;
     
     case BBP_SIZE:
      // The size of the view port has changed.
      RECT rc; GetClientRect(BBP.parent, &rc);
      glViewport(0, 0, Width(rc), Height(rc));
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity();
      rAspect = 0.0f;
      if (Height(rc)) { rAspect = (float) Width(rc) / (float) Height(rc); }
      gluPerspective(50.0f, rAspect, 0.01f, 5000.0f);
      glMatrixMode(GL_MODELVIEW);
      break;
     
     case BBP_DESTROY:
      // Free up your resources there
      DestroyTexture (&mt, 1);
      break;
     
     default:
      nRet = BBP_ERROR;
      break;
     }
     return nRet;
    }
     
    BOOL WINAPI DllMain (HINSTANCE hinstDLL, IN DWORD fdwReason, IN LPVOID lpvReserved) {
     switch (fdwReason) {
     case DLL_PROCESS_ATTACH:
      break;
     case DLL_PROCESS_DETACH:
      break;
     case DLL_THREAD_ATTACH:
      break;
     case DLL_THREAD_DETACH:
      break;
     }
     return TRUE;
    }
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 548
    Points : 964
    Points
    964
    Par défaut Correction
    Pour éviter le rebond de la fenêtre lorsque vous essayez de la déplacer vers le bas en deçà de la barre des tâches.

    Vous pouvez modifier le traitement de WM_MOVING de la façon suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
        case WM_MOVING: // Keep the window into the working area
            //hMonitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST);
            //lpw = (RECT*) lParam;
            //if (lpw->top < 0) { lpw->top = 0; }
            //lpw->right = lpw->left + gP.minTrackSizeW;
            //lpw->bottom = lpw->top + gP.minTrackSizeH;
    
            //tmi.cbSize = sizeof(tmi);
            //if (GetMonitorInfo(hMonitor, &tmi)) {
            //    if (lpw->bottom > tmi.rcWork.bottom) {
            //        lpw->bottom = tmi.rcWork.bottom;
            //        lpw->top = lpw->bottom -gP.minTrackSizeW;
            //    }
            //}
            //return 1;
    
            hMonitor = MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST);
            GetWindowRect(gP.hMain, &lpr);
            lpw = (RECT*) lParam;
            if (lpw->top < 0) { lpw->top = 0; }
            lpw->right = lpw->left + rWidth(lpr);
            lpw->bottom = lpw->top + rHeight(lpr);
            MONITORINFO tmi; ClearMemory(&tmi, sizeof(tmi));
            tmi.cbSize = sizeof(tmi);
            if (GetMonitorInfo(hMonitor, &tmi)) {
                if (lpw->bottom > tmi.rcWork.bottom) {
                    lpw->bottom = tmi.rcWork.bottom;
                    lpw->top = lpw->bottom - rHeight(lpr);
                }
            }
            return 1;

Discussions similaires

  1. Quel est pour vous le meilleur éditeur xml ?
    Par neo.51 dans le forum XML/XSL et SOAP
    Réponses: 87
    Dernier message: 20/02/2010, 20h04
  2. [Débutant] question facile pour vous
    Par Michel_57 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 05/04/2006, 07h16
  3. Réponses: 10
    Dernier message: 25/03/2006, 15h00
  4. Développeur Fonctionnel pour vous c'est quoi ?
    Par petit_skarab dans le forum Structure
    Réponses: 1
    Dernier message: 22/04/2005, 16h31
  5. [sbadecoder a dit].. C'est quoi pour vous un beau programme?
    Par seb.49 dans le forum Langages de programmation
    Réponses: 14
    Dernier message: 13/02/2004, 10h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo