Position Trackbar wave c++ [Résolu]

Signaler
Messages postés
18
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
17 janvier 2009
-
Messages postés
18
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
17 janvier 2009
-
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

Messages postés
18
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
17 janvier 2009

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));
Messages postés
54
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
15 août 2015

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;
}
Messages postés
18
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
17 janvier 2009

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)
Messages postés
18
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
17 janvier 2009

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