Position Trackbar wave c++ [Résolu]

csauvane 18 Messages postés mardi 29 avril 2008Date d'inscription 17 janvier 2009 Dernière intervention - 11 janv. 2009 à 22:05 - Dernière réponse : csauvane 18 Messages postés mardi 29 avril 2008Date d'inscription 17 janvier 2009 Dernière intervention
- 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
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
csauvane 18 Messages postés mardi 29 avril 2008Date d'inscription 17 janvier 2009 Dernière intervention - 13 janv. 2009 à 14:24
3
Merci
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));

Merci csauvane 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de csauvane
nanonavich 54 Messages postés mardi 25 mars 2008Date d'inscription 15 août 2015 Dernière intervention - 11 janv. 2009 à 22:45
0
Merci
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;
}
Commenter la réponse de nanonavich
csauvane 18 Messages postés mardi 29 avril 2008Date d'inscription 17 janvier 2009 Dernière intervention - 12 janv. 2009 à 12:17
0
Merci
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)
Commenter la réponse de csauvane
csauvane 18 Messages postés mardi 29 avril 2008Date d'inscription 17 janvier 2009 Dernière intervention - 12 janv. 2009 à 19:50
0
Merci
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
Commenter la réponse de csauvane

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.