le 03-07-2016 07:31 AM
Bonjour à tous,
Voiçi le problème que j'ai :
Environement : Visual C++, API NI
Cartes : NI9234, NI9263
Dans ma solution de test, j'utilise une carte NI 9234 dans le but de faire une acquistion de son. Je configure ma voie d'acquisition de la façon suivante :
DAQmxCreateAIMicrophoneChan avec les paramètres qui vont bien (Sensibilité micro, IEPE, etc...).
Je lance mon soft qui permet de généré un son par la carte NI9263 tout en enregistrant en mode synchro sur la carte NI9234
J'utilise la fonction NI suivante : DAQmxReadBinaryI32 pour lire les échantillons de ma carte et je les enregistres dans un tableau de type int32 (les données issues de la carte 9234 sont des données codés sur 24bits).
J'obtiens donc mon tableau d'échantillons que j'enregistre dans un second tableau en faisant l'opération suivante :
data[i] = Sample_lue[i] >> 4 sachant que mon data[i] est un tableau déclarer en int16 : je récupère donc les échantillons tronqué de 4 bits de poids fort (?) due au décalage et 12 bits de poids faible(?) du au cast 32bits -> 16bits.
Si ensuite j'enregistre mon tableau final data[i] dans un fichier "raw" et que j'ouvre ce fichier avec un logiciel Audio (CoolEdit) en format "16 bits intel PCM (LSB/MSB)", j'obtiens bien mon son.
Mon problème est que je souhaiterai maintenant enregistrer du son en utilisant la résolution complète de ma carte NI9234 : 24 bits
Si je fais les mêmes opérations pour l'acquisition mais qu'au niveau du traitement des données je fais l'opération suivante :
data_32[i] = Sample_lue[i] (data_32 étant un tableau d'entier int32)
Que j'enregistre data_32[i] dans un fichier raw et que je l'ouvre dans le format 24 bits LSB/MSB je n'obtiens pas un son mais un signal inexploitable qui ne ressemble pas à grand chose.
Ma question est donc : Comment résoudre se problème de résolution 24bits ?
Merci beaucoup,
Stéphane
le 03-08-2016 05:01 AM
Bonjour,
Hormis en lisant le fichier son avec le logiciel l Audio (CoolEdit), avez-vous vérifié que cette opération "data[i] = Sample_lue[i] >> 4" fournie bien exactement les nombres que vous attendez?
Et si vous utilisez la représentation "fixed point" pour écrire les nombres au format 24 bits dans le fichier binaire, cela fonctionne-t-il? Testez d'abord si vous pouvez écrire et lire convenablement un fixed point en utilisant les fonctions "Write Binary File" et "Read Binary File". Dans la fonction "write binary file", mettez un fixed point dans le paramètre d'entrée data. Le fixed ponit doit être configuré pour avoir un word length de 24 bits. Utilisez le même type de données pour renseigner le paramètre d'entrée "data type" de la fonction "read binary data". Vérifiez alors que Audio (CoolEdit) décode bien les données.
Aussi, attention entre le changement de convention big endian / little endian entre labVIEW et windows : http://digital.ni.com/public.nsf/allkb/97332426D63630EE862565070049FFBB
Pierre-Emmanuel BELLES
Certified LabVIEW Developper
Certified TestStand Architect
le 03-08-2016 05:22 AM
Bonjour,
Merci pour votre retour.
Le seul problème, c'est que je n'utilise pas LabVIEW pour réaliser mon acquisition, je développe en C++ donc, je ne pourrai pas utiliser les fonctions "ReadBinaryFile" ou "WriteBinaryFile".
Stéphane