Voilà, j'ai un problème qui, je l'espère, n'est pas hors sujet dans ce forum
:
Je cherche à numériser en continu du son qui arrive sur l'entrée ligne de la
carte son. Le problème que j'ai, c'est que je ne sais pas, a priori, combien
de temps durera l'enregistrement : en effet, j'acquiers en continu et,
lorsqu'un signal externe arrive (fermeture de contact sur une carte IO), je
conserve une dizaine de secondes d'enregistrement, réparties avant et après
la survenue du signal externe. C'est donc parce qu'il faut que je conserve 5
secondes AVANT la survenue du signal externe que je dois me placer en
acquisition en continu.
J'ai utilisé les outils :
waveInOpen
waveInPrepareHeader
waveInAddBuffer
Chaque buffer a une durée d'une seconde, et une fonction callback (de type
"waveInProc") m'avertit quand le buffer est plein : je stocke alors la
seconde numérisée dans un buffer à moi de 5 secondes (alloué classiquement
en mémoire centrale), puis je relance l'acquisition en repréparant un buffer
(waveInPrepareHeader, puis waveInAddBuffer). Bien entendu, puisqu'il faut
que je conserve les 5 dernières secondes écoulées, lorsque mon grand buffer
de 5 secondes est plein, je le mets à jour en décalant son contenu, puis en
copiant chaque nouvelle seconde numérisée en fin de grand buffer (buffer
"circulaire").
Mon problème vient de ce que, entre le moment où je reçois la notification
de buffer plein (message WIM_DATA dans la waveInProc) et le moment où je
relance le mécanisme (waveInPrepareHeader, puis waveInAddBuffer), il
s'écoule quelques millisecondes, ce qui fait qu'il me manque quelques
millisecondes toutes les secondes, ce qui est, bien entendu, fort
préjudiciable !
J'ai tenté de réduire la taille du buffer de numérisation (100 ms), mais le
problème reste le même.
J'ai l'impression que je devrais m'y prendre autrement pour être sûr de
conserver mes 5 secondes bien en continu... mais comment ? J'ai eu beau
regarder les fonctions de type "waveIn" mises à disposition par le SDK, mais
je ne vois guère comment trouver une solution à l'aide de ces seuls outils.
Dois-je me tourner vers DirectX ? Existe-t-il d'ailleurs des outils
permettant de numériser du son sous DirectX ? Ou bien dois-je me tourner
vers les fonctions MCI ? Si oui, comment chercher ?
Merci de votre aide précieuse, et mille bravos à ceux qui auront eu la
patience de me lire jusqu'au bout !!!
Philippe Gremillet
développeur indépendant
http://www.eclisse.fr
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Eclisse
Salut à tous et honte sur moi !!!
Ben voui, il m'a suffi d'ouvrir mmedia.hlp à la bonne rubrique, et j'ai découvert (à ma grande honte, donc) que je pouvais ajouter plusieurs buffers (avec waveInAddBuffer)... ce qui permet de ne pas perdre de données lors de la numérisation ! Il suffit d'avoir toujours au moins un buffer à donner à bouffer au device audio et tout baigne, quelle nouille je fais !!!
Promis, ch'le r'f'rai pu...
"Eclisse" a écrit dans le message de news: 444e1e32$0$6689$
Bonjour à tous !
Voilà, j'ai un problème qui, je l'espère, n'est pas hors sujet dans ce forum :
Je cherche à numériser en continu du son qui arrive sur l'entrée ligne de la carte son. Le problème que j'ai, c'est que je ne sais pas, a priori, combien de temps durera l'enregistrement : en effet, j'acquiers en continu et, lorsqu'un signal externe arrive (fermeture de contact sur une carte IO), je conserve une dizaine de secondes d'enregistrement, réparties avant et après la survenue du signal externe. C'est donc parce qu'il faut que je conserve 5 secondes AVANT la survenue du signal externe que je dois me placer en acquisition en continu.
J'ai utilisé les outils : waveInOpen waveInPrepareHeader waveInAddBuffer
Chaque buffer a une durée d'une seconde, et une fonction callback (de type "waveInProc") m'avertit quand le buffer est plein : je stocke alors la seconde numérisée dans un buffer à moi de 5 secondes (alloué classiquement en mémoire centrale), puis je relance l'acquisition en repréparant un buffer (waveInPrepareHeader, puis waveInAddBuffer). Bien entendu, puisqu'il faut que je conserve les 5 dernières secondes écoulées, lorsque mon grand buffer de 5 secondes est plein, je le mets à jour en décalant son contenu, puis en copiant chaque nouvelle seconde numérisée en fin de grand buffer (buffer "circulaire").
Mon problème vient de ce que, entre le moment où je reçois la notification de buffer plein (message WIM_DATA dans la waveInProc) et le moment où je relance le mécanisme (waveInPrepareHeader, puis waveInAddBuffer), il s'écoule quelques millisecondes, ce qui fait qu'il me manque quelques millisecondes toutes les secondes, ce qui est, bien entendu, fort préjudiciable !
J'ai tenté de réduire la taille du buffer de numérisation (100 ms), mais le problème reste le même. J'ai l'impression que je devrais m'y prendre autrement pour être sûr de conserver mes 5 secondes bien en continu... mais comment ? J'ai eu beau regarder les fonctions de type "waveIn" mises à disposition par le SDK, mais je ne vois guère comment trouver une solution à l'aide de ces seuls outils. Dois-je me tourner vers DirectX ? Existe-t-il d'ailleurs des outils permettant de numériser du son sous DirectX ? Ou bien dois-je me tourner vers les fonctions MCI ? Si oui, comment chercher ?
Merci de votre aide précieuse, et mille bravos à ceux qui auront eu la patience de me lire jusqu'au bout !!!
Philippe Gremillet développeur indépendant http://www.eclisse.fr
Salut à tous et honte sur moi !!!
Ben voui, il m'a suffi d'ouvrir mmedia.hlp à la bonne rubrique, et j'ai
découvert (à ma grande honte, donc) que je pouvais ajouter plusieurs buffers
(avec waveInAddBuffer)... ce qui permet de ne pas perdre de données lors de
la numérisation ! Il suffit d'avoir toujours au moins un buffer à donner à
bouffer au device audio et tout baigne, quelle nouille je fais !!!
Promis, ch'le r'f'rai pu...
"Eclisse" <philippe.gremillet@eclisse.fr> a écrit dans le message de news:
444e1e32$0$6689$8fcfb975@news.wanadoo.fr...
Bonjour à tous !
Voilà, j'ai un problème qui, je l'espère, n'est pas hors sujet dans ce
forum :
Je cherche à numériser en continu du son qui arrive sur l'entrée ligne de
la carte son. Le problème que j'ai, c'est que je ne sais pas, a priori,
combien de temps durera l'enregistrement : en effet, j'acquiers en continu
et, lorsqu'un signal externe arrive (fermeture de contact sur une carte
IO), je conserve une dizaine de secondes d'enregistrement, réparties avant
et après la survenue du signal externe. C'est donc parce qu'il faut que je
conserve 5 secondes AVANT la survenue du signal externe que je dois me
placer en acquisition en continu.
J'ai utilisé les outils :
waveInOpen
waveInPrepareHeader
waveInAddBuffer
Chaque buffer a une durée d'une seconde, et une fonction callback (de type
"waveInProc") m'avertit quand le buffer est plein : je stocke alors la
seconde numérisée dans un buffer à moi de 5 secondes (alloué classiquement
en mémoire centrale), puis je relance l'acquisition en repréparant un
buffer (waveInPrepareHeader, puis waveInAddBuffer). Bien entendu,
puisqu'il faut que je conserve les 5 dernières secondes écoulées, lorsque
mon grand buffer de 5 secondes est plein, je le mets à jour en décalant
son contenu, puis en copiant chaque nouvelle seconde numérisée en fin de
grand buffer (buffer "circulaire").
Mon problème vient de ce que, entre le moment où je reçois la notification
de buffer plein (message WIM_DATA dans la waveInProc) et le moment où je
relance le mécanisme (waveInPrepareHeader, puis waveInAddBuffer), il
s'écoule quelques millisecondes, ce qui fait qu'il me manque quelques
millisecondes toutes les secondes, ce qui est, bien entendu, fort
préjudiciable !
J'ai tenté de réduire la taille du buffer de numérisation (100 ms), mais
le problème reste le même.
J'ai l'impression que je devrais m'y prendre autrement pour être sûr de
conserver mes 5 secondes bien en continu... mais comment ? J'ai eu beau
regarder les fonctions de type "waveIn" mises à disposition par le SDK,
mais je ne vois guère comment trouver une solution à l'aide de ces seuls
outils. Dois-je me tourner vers DirectX ? Existe-t-il d'ailleurs des
outils permettant de numériser du son sous DirectX ? Ou bien dois-je me
tourner vers les fonctions MCI ? Si oui, comment chercher ?
Merci de votre aide précieuse, et mille bravos à ceux qui auront eu la
patience de me lire jusqu'au bout !!!
Philippe Gremillet
développeur indépendant
http://www.eclisse.fr
Ben voui, il m'a suffi d'ouvrir mmedia.hlp à la bonne rubrique, et j'ai découvert (à ma grande honte, donc) que je pouvais ajouter plusieurs buffers (avec waveInAddBuffer)... ce qui permet de ne pas perdre de données lors de la numérisation ! Il suffit d'avoir toujours au moins un buffer à donner à bouffer au device audio et tout baigne, quelle nouille je fais !!!
Promis, ch'le r'f'rai pu...
"Eclisse" a écrit dans le message de news: 444e1e32$0$6689$
Bonjour à tous !
Voilà, j'ai un problème qui, je l'espère, n'est pas hors sujet dans ce forum :
Je cherche à numériser en continu du son qui arrive sur l'entrée ligne de la carte son. Le problème que j'ai, c'est que je ne sais pas, a priori, combien de temps durera l'enregistrement : en effet, j'acquiers en continu et, lorsqu'un signal externe arrive (fermeture de contact sur une carte IO), je conserve une dizaine de secondes d'enregistrement, réparties avant et après la survenue du signal externe. C'est donc parce qu'il faut que je conserve 5 secondes AVANT la survenue du signal externe que je dois me placer en acquisition en continu.
J'ai utilisé les outils : waveInOpen waveInPrepareHeader waveInAddBuffer
Chaque buffer a une durée d'une seconde, et une fonction callback (de type "waveInProc") m'avertit quand le buffer est plein : je stocke alors la seconde numérisée dans un buffer à moi de 5 secondes (alloué classiquement en mémoire centrale), puis je relance l'acquisition en repréparant un buffer (waveInPrepareHeader, puis waveInAddBuffer). Bien entendu, puisqu'il faut que je conserve les 5 dernières secondes écoulées, lorsque mon grand buffer de 5 secondes est plein, je le mets à jour en décalant son contenu, puis en copiant chaque nouvelle seconde numérisée en fin de grand buffer (buffer "circulaire").
Mon problème vient de ce que, entre le moment où je reçois la notification de buffer plein (message WIM_DATA dans la waveInProc) et le moment où je relance le mécanisme (waveInPrepareHeader, puis waveInAddBuffer), il s'écoule quelques millisecondes, ce qui fait qu'il me manque quelques millisecondes toutes les secondes, ce qui est, bien entendu, fort préjudiciable !
J'ai tenté de réduire la taille du buffer de numérisation (100 ms), mais le problème reste le même. J'ai l'impression que je devrais m'y prendre autrement pour être sûr de conserver mes 5 secondes bien en continu... mais comment ? J'ai eu beau regarder les fonctions de type "waveIn" mises à disposition par le SDK, mais je ne vois guère comment trouver une solution à l'aide de ces seuls outils. Dois-je me tourner vers DirectX ? Existe-t-il d'ailleurs des outils permettant de numériser du son sous DirectX ? Ou bien dois-je me tourner vers les fonctions MCI ? Si oui, comment chercher ?
Merci de votre aide précieuse, et mille bravos à ceux qui auront eu la patience de me lire jusqu'au bout !!!
Philippe Gremillet développeur indépendant http://www.eclisse.fr
Vincent Burel
Je vous conseille aussi de faire vos waveInPrepareHeader une fois pour toute (par exemple sur 4 buffers) et de tourner avec un nombre définit de buffer.
VB
"Eclisse" wrote in message news:444e2d54$0$18329$
Salut à tous et honte sur moi !!!
Ben voui, il m'a suffi d'ouvrir mmedia.hlp à la bonne rubrique, et j'ai découvert (à ma grande honte, donc) que je pouvais ajouter plusieurs
buffers
(avec waveInAddBuffer)... ce qui permet de ne pas perdre de données lors
de
la numérisation ! Il suffit d'avoir toujours au moins un buffer à donner à bouffer au device audio et tout baigne, quelle nouille je fais !!!
Promis, ch'le r'f'rai pu...
Je vous conseille aussi de faire vos waveInPrepareHeader une fois pour toute
(par exemple sur 4 buffers) et de tourner avec un nombre définit de buffer.
VB
"Eclisse" <philippe.gremillet@eclisse.fr> wrote in message
news:444e2d54$0$18329$8fcfb975@news.wanadoo.fr...
Salut à tous et honte sur moi !!!
Ben voui, il m'a suffi d'ouvrir mmedia.hlp à la bonne rubrique, et j'ai
découvert (à ma grande honte, donc) que je pouvais ajouter plusieurs
buffers
(avec waveInAddBuffer)... ce qui permet de ne pas perdre de données lors
de
la numérisation ! Il suffit d'avoir toujours au moins un buffer à donner à
bouffer au device audio et tout baigne, quelle nouille je fais !!!
Je vous conseille aussi de faire vos waveInPrepareHeader une fois pour toute (par exemple sur 4 buffers) et de tourner avec un nombre définit de buffer.
VB
"Eclisse" wrote in message news:444e2d54$0$18329$
Salut à tous et honte sur moi !!!
Ben voui, il m'a suffi d'ouvrir mmedia.hlp à la bonne rubrique, et j'ai découvert (à ma grande honte, donc) que je pouvais ajouter plusieurs
buffers
(avec waveInAddBuffer)... ce qui permet de ne pas perdre de données lors
de
la numérisation ! Il suffit d'avoir toujours au moins un buffer à donner à bouffer au device audio et tout baigne, quelle nouille je fais !!!
Promis, ch'le r'f'rai pu...
Eclisse
Merci du conseil !!!
"Vincent Burel" a écrit dans le message de news: 444e392b$0$21306$
Je vous conseille aussi de faire vos waveInPrepareHeader une fois pour toute (par exemple sur 4 buffers) et de tourner avec un nombre définit de buffer.
VB
"Eclisse" wrote in message news:444e2d54$0$18329$
Salut à tous et honte sur moi !!!
Ben voui, il m'a suffi d'ouvrir mmedia.hlp à la bonne rubrique, et j'ai découvert (à ma grande honte, donc) que je pouvais ajouter plusieurs
buffers
(avec waveInAddBuffer)... ce qui permet de ne pas perdre de données lors
de
la numérisation ! Il suffit d'avoir toujours au moins un buffer à donner à bouffer au device audio et tout baigne, quelle nouille je fais !!!
Promis, ch'le r'f'rai pu...
Merci du conseil !!!
"Vincent Burel" <vincent.burel@nospam.wanadoo.fr> a écrit dans le message de
news: 444e392b$0$21306$8fcfb975@news.wanadoo.fr...
Je vous conseille aussi de faire vos waveInPrepareHeader une fois pour
toute
(par exemple sur 4 buffers) et de tourner avec un nombre définit de
buffer.
VB
"Eclisse" <philippe.gremillet@eclisse.fr> wrote in message
news:444e2d54$0$18329$8fcfb975@news.wanadoo.fr...
Salut à tous et honte sur moi !!!
Ben voui, il m'a suffi d'ouvrir mmedia.hlp à la bonne rubrique, et j'ai
découvert (à ma grande honte, donc) que je pouvais ajouter plusieurs
buffers
(avec waveInAddBuffer)... ce qui permet de ne pas perdre de données lors
de
la numérisation ! Il suffit d'avoir toujours au moins un buffer à donner
à
bouffer au device audio et tout baigne, quelle nouille je fais !!!
"Vincent Burel" a écrit dans le message de news: 444e392b$0$21306$
Je vous conseille aussi de faire vos waveInPrepareHeader une fois pour toute (par exemple sur 4 buffers) et de tourner avec un nombre définit de buffer.
VB
"Eclisse" wrote in message news:444e2d54$0$18329$
Salut à tous et honte sur moi !!!
Ben voui, il m'a suffi d'ouvrir mmedia.hlp à la bonne rubrique, et j'ai découvert (à ma grande honte, donc) que je pouvais ajouter plusieurs
buffers
(avec waveInAddBuffer)... ce qui permet de ne pas perdre de données lors
de
la numérisation ! Il suffit d'avoir toujours au moins un buffer à donner à bouffer au device audio et tout baigne, quelle nouille je fais !!!