Conversion numérique int-float-int : pas si simple !
On aurait pu penser (moi le premier) qu'une simple conversion int => float => int ne peut s'effectuer que d'une seule façon et sans difficulté, et bien il n'en est rien ! En effet, un int signed possède 1 valeur positive de plus que de valeur négative...
Il existe de nombreuses méthodes pour effectuer ces conversions ! C'est ce que j'ai découvert sur le blog de Bjorne Roche, programmeur audio. Voici un article intéressant, expliquant 4 différentes méthodes utilisées, suivi d'une analyse sur les performances de chaque méthode :
http://blog.bjornroche.com/2009_12_01_archive.html
En résumé voici les 4 différentes méthodes, la meilleure pour le traitement sur signal étant, d'après l'article et l'analyse réalisée par Bjorne Roche, la méthode 4 :
Int to Float | Float to Int* | Transparency | Used By | |
---|---|---|---|---|
0) | ((integer + .5)/(0x7FFF+.5) | float*(0x7FFF+.5)-.5 | Up to at least 24-bit | DC DAC Modeled |
1) | (integer / 0x8000) | float * 0x8000 | Up to at least 24-bit | Apple (Core Audio)1, ALSA2, MatLab2, sndlib2 |
2) | (integer / 0x7FFF) | float * 0x7FFF | Up to at least 24-bit | Pulse Audio2 |
3) | (integer / 0x8000) | float * 0x7FFF | Non-transparent | PortAudio1,2, Jack2, libsndfile1,3 |
4) | (integer>0?integer/0x7FFF:integer/0x8000) | float>0?float*0x7FFF:float*0x8000 | Up to at least 24-bit | At least one high end DSP and A/D/A manufacturer.2,4 XO Wave 1.0.3. |
5) | Uknown | float*(0x7FFF+.49999) | Unknown | ASIO2 |
Bonne lecture !
Inscrivez-vous au blog
Soyez prévenu par email des prochaines mises à jour
Rejoignez les 20 autres membres