Position Trackbar wave c++

Résolu
csauvane Messages postés 18 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 17 janvier 2009 - 11 janv. 2009 à 22:05
csauvane Messages postés 18 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 17 janvier 2009 - 13 janv. 2009 à 14:24
Bonjour,
Je suis en train de coder une application qui traite les son .wav.
J'ai un petit probleme avec la representation de la barre de progression du son.
En effet, je voudrais representer une "trackbar" qui suis le son pendant qu'il s'execute.
J'utilise le code suivant:

// position du curseur (tous les 200ms) sur une echelle de 2000 unitÈs
// int length=MP1->Length;
MMTIME wavePosition;
wavePosition.wType = TIME_MS;
waveOutGetPosition(&projectWaveHandle, &wavePosition, sizeof(MMTIME));

// DataSize is total size in bits
// so we need position in bytes
// pos is position in ms
int pos = wavePosition.u.ms;

Memo1->Lines->Add("pos: "+String(wavePosition.u.ms)+" DataSize: "+String(DataSize));       
       
Je m'attends a avoir une valeur de pos qui evolue, mais je me retrouve avec une constante. (Je l'affiche toutes les 200ms).

Quelqu'un sait-il d'ou provient le probleme? et eventuellement comment le resoudre?

Merci,

Colin Sauvanet,

Développeur occasionnel

4 réponses

csauvane Messages postés 18 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 17 janvier 2009
13 janv. 2009 à 14:24
J'utilisais mal la fonction waveOutGetPosition, retirer le passage par référence :

waveOutGetPosition(projectWaveHandle, &wavePosition, sizeof(MMTIME));

et non pas

waveOutGetPosition(&projectWaveHandle, &wavePosition, sizeof(MMTIME));
3
nanonavich Messages postés 54 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 15 août 2015
11 janv. 2009 à 22:45
GetPosition()
{
   
    
    MMTIME mmt;
    mmt.wType = TIME_MS;
    waveOutGetPosition(m_hWaveOut, &mmt, sizeof(MMTIME));
    if(mmt.wType==TIME_MS)
        return mmt.u.ms;
    else if(mmt.wType==TIME_BYTES)
    {
        double d;
        d = (double)mmt.u.cb/(double)m_wfx.nAvgBytesPerSec;
        return (DWORD)(d*1000);
    }
    
    return 0;
}
0
csauvane Messages postés 18 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 17 janvier 2009
12 janv. 2009 à 12:17
Non, ça ne fonctionne pas. L'erreur doit venir de la structure de donnée qui ne doit pas être correcte ? (pourtant la fonction waveOutWrite arrive à lire correctement le fichier)
0
csauvane Messages postés 18 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 17 janvier 2009
12 janv. 2009 à 19:50
Après une petit journée de recherche, je pense que c'est surtout parce que l'on ne maîtrise pas assez la structure des wave. Quelqu'un sait-il comment lire correctement les données brutes qu'il y a dans le tableau de caractères DataChunk ? (on comprend la structure, mais comment récupérer les bits du tableau de caractères ?)

Si j'ai besoin d'être plus clair, dites le moi...

Colib
0
Rejoignez-nous