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

VB 6 et antérieur Discussion :

Représentation des variables en mémoire


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier
    Représentation des variables en mémoire
    Bonjour tout le monde.

    Je vais reposer la même question que dans mon post précédent, mais de façon beaucoup plus explicite :

    Qui peut me donner un lien vers un document décrivant la représentation des données de VB6 en mémoire SVP.

    Pour expliquer encore mieux ce que je cherche, voila : j'utilise une API de WINMM qui manipule des tableaux d'octets et je coince actuellement pour traiter ces octets : j'étais parti sur la définition
    Code vb6 :Sélectionner tout -Visualiser dans une fenêtre à part
    dim tableau as byte(dimension)
    , et j'ai mis un moment à comprendre que ça ne marchait pas par ce que VB6 crée en réalité un tableau de Long dont il n'utilise que l'octet de poids faible (tout du moins, c'est comme ça que j'interprète ce que je vois).

    Merci d'avance.

    AMIcalement.

  2. #2
    Rédacteur

    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  3. #3
    Membre régulier
    Merci Omen999 : cela semble répondre à ma question... mais je ne suis pas sur de tout comprendre, et/ou ma compétence en VB6 est insuffisante...

    Puis-je demander de l'aide un peu plus explicite - et française - sur mon problème précis ? L'API que j'utilise est WaveInAddBuffer, à qui l'on transmet le pointeur et la taille d'une zone mémoire pour capturer le son du microphone. Mais je tiens absolument à pouvoir traiter les échantillons le plus près possible du temps réel. Je sais "à peu près" le faire, mais cet "à peu près" vient de l'arrangement des octets dans la mémoire : j'avais commencé par définir mon buffer comme un tableau de byte, mais j'ai cru comprendre que VB6 crée un tableau de Long, dont il n'utilise que l'octet de poids faible (cela n'est pas mentionné dans le document : est-ce que je me trompe ?) J'ai essayé de définir mon buffer comme un tableau de long (et donc de longueur divisée par 4) mais (pour le moment) je n'arrive pas à récupérer les octets un par un.

    Ne venez pas me dire d'utiliser "copymemory" ou des trucs du genre : je veux faire mes traitement d'octets sans attendre que le buffer soit plein.

    Si quelque lecteur comprend ce que j'explique, et a déjà résolu le même genre de problème, ses lumières seront bienvenues.

    Et encore merci à Omen999 pour sa réponse

    AMIcalement.

  4. #4
    Membre régulier
    J'AI TROUVEEEEEEEEEEE !!!!!!!!!!!!!!!!!!!!!!

    Excusez-moi de crier, mais j'ai tellement galéré. Et c'était tellement bête !

    Pour pouvoir échantillonner et représenter les sonogrammes en temps réel, je fais tourner l'échantillonneur sur 4 buffers, que j'ai déclarés comme
    Code vb6 :Sélectionner tout -Visualiser dans une fenêtre à part
    Public InData(3,2756) As Long

    puisque j'échantillonne à 11025 hertz et que je veux que chaque buffer représente une seconde de son. Vous me suivez bien : j'ai abandonné les byte, et 2756 est le quart de 11024.

    Eh bien c'était ça l'erreur ! Il fallait déclarer
    Code vb6 :Sélectionner tout -Visualiser dans une fenêtre à part
    Public InData(2756, 3) As Long

    En VB6, l'indice qui varie le plus vite est le premier !!!

    Merci de votre attention.

    AMIcalement.

  5. #5
    Membre régulier
    J'ajoute un dernier point : je suis revenu à la déclaration de tableaux de byte, et VB6 ne réserve bel et bien qu'un seul octet par byte.

    J'aurais pu faire la vérification plus tôt, mais bon, c'est fait, c'est fait.

    AMIcalement.