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

C++Builder Discussion :

Faire un zoom sur courbe Wave avec d�placement


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    332
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2003
    Messages : 332
    Par d�faut Faire un zoom sur courbe Wave avec d�placement
    Bonjour,

    Je cherche � afficher une courbe d'un wave(PCM) � l'�cran. J'ai trouv� des explications sur ce site. Jusque la pas de probl�me pour afficher mon tra�� en entier sur un TImage avec une taille fixe.

    Mais je voudrais r�aliser un zoom sur ce trac�. Mon id�e �tait de d�finir un nombre de pixel par seconde, par exemple (100px/sec), et d'afficher la courbe en entier sur mon TImage avec cette �chelle. Donc j'aurais un TImage d'une certaine longeur avec mon tra��.
    Puis pour d�placer mon tra��, je glisse simplement mon TImage en dehors de l'�cran sur la gauche (donc monimage->Left devient n�gatif...)...
    Mais je suis sur que ce n'est pas la bonne m�thode.

    Mais quand le fichier sonore est tr�s long, alors mon TImage devient tr�s grand, et mon application plante � cause de la m�moire (taille de mon TImage->Width=41000).

    J'aurais voulu savoir comment faire un vrai zoom d'une courbe wave, et que l'on puisse la d�placer avec des scrollbars sans tout faire planter et sans faire ramer l'ordinateur....
    Auriez-vous des id�es � me proposer ?

    Merci d'avance.
    Fred

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 412
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    Si ton wav est en m�moire, il suffit de travailler avec un Index.
    Cet index repr�sente la position, dans le tableau, du sample le plus � gauche
    de l'�cran et peut, par exemple, �tre donn� par un ScrollBar->Position...
    Rappel : dans un fichier wav, les samples commencent apr�s le header.

    A partir de l�, tu peux te d�placer dans ce tableau, depuis l'index, sur
    un nombre calculable de samples puisqu'il d�pend de la largeur de la fen�tre
    et du facteur zoom.
    Si x est la position � �cran, la position du sample dans le wav est :
    - Pour un signal mono :
    int pos = Index + (x * Zoom);
    - Pour un signal st�r�o :
    int gauche = Index + (x * Zoom * 2);
    int droite = Index + (x * Zoom * 2) + 1;
    Cel� suppose donc de v�rifier dans la boucle si l'on est bien dans le tableau !

    Les rep�res temporels demandent un peu plus de r�flexion puisqu'il peut s'agir
    d'une simple grille fixe (simple indication) ou d'une grille flottante
    (indication r�elle en fonction de la position de l'index dans le wav)...

    Je ne sais pas quelle version BCB tu utilises, mais personnellement, avec ma
    version BCB3 Pro, je dessine sur un bitmap que je recopie ensuite sur la form.
    Ceci permet de supprimer les scintillements. Au cas o�...

    A plus !

  3. #3
    Membre �clair�
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    332
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2003
    Messages : 332
    Par d�faut
    Salut,

    for (int X=0; X < iDataSize; X+=16) {
    pTmp->Picture->Bitmap->Canvas->LineTo((X*pImage->Width) / iDataSize , ((pData[X]+1)*pImage->Height)/2);
    }
    pImage->Picture->Bitmap->Canvas->Draw(0,0, pTmp->Picture->Graphic);
    X+=16 pour sauter un petit peu des donnees pour aller un peu plus vite
    iDataSize = Taille totale des donnees de mon wav
    pTmp = TImage temporaire pour dessiner dessus la courbe
    pImage = Mon TImage d'origine ou apparaitra ma courbe
    pData = contient la valeur � afficher

    Donc avec ce code, j'affiche la courbe au complet dans mon TImage.

    Pourrais-tu stp m'expliquer comment utiliser ta fonction :
    int pos = Index + (x * Zoom);
    avec mon code ci dessus ? D�sol� mais je ne saisi pas trop ......


    Merci
    Fred

  4. #4
    Membre �clair�
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    332
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2003
    Messages : 332
    Par d�faut
    Merci beaucoup Henderson..

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 1
    Dernier message: 15/05/2008, 20h11
  2. Comment faire un zoom sur un bloc html ?
    Par vodnok dans le forum G�n�ral JavaScript
    R�ponses: 7
    Dernier message: 12/07/2007, 14h51
  3. R�ponses: 3
    Dernier message: 19/06/2007, 22h34
  4. Faire un zoom sur un TImage
    Par Archim�de dans le forum Langage
    R�ponses: 6
    Dernier message: 28/01/2006, 11h12
  5. Faire un zoom sur un picture
    Par dibeloni dans le forum VB 6 et ant�rieur
    R�ponses: 2
    Dernier message: 14/12/2005, 08h14

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