[Sub0] - 26/05/03

conversion 16 bits stéréo en 8 bits stéréo

 

Les données du sample 16 bits stéréo possèdent 4 octets: 2 octets pour la voie de gauche, et 2 octets pour la voie de droite. Pour convertir en 8 bits stéréo, nous allons retirer 1 octets sur chaque voie en divisant l'amplitude par 256. Il ne faut pas oublier que les données 16 bits sont signées, alors que le 8 bits ne l'est pas!

1) Convertir les données 16 bits signées en données non signées.
2) Diviser ces données par 256 pour chaque voie.
3) Modifier l'en-tête du fichier pour le nouveau format.

Pour convertir les données en données non-signées, il faut soustraire $8000 (32768). Si le résultat est inférieur à zéro, alors il faut additionner $10000 (65536) au résultat. Ensuite, pour convertir la donnée en valeur signée, il additionner $8000. Si le résultat est supérieure à $10000, il faut soustraire $10000. Pour le reste, il suffit de diviser les données par $100 (256).
 
Le code suivant est un exemple de conversion d'une seule donnée. Il est destiné à vous expliquer la méthode utilisée. Dans le cas d'un fichier entier, il faudra placer ce code dans la boucle de traitement:

VAR voieL,voieR: longint;

BEGIN
 voieL:=voieL-
$8000; IF(voieL<0)THEN voieL:=voieL+$10000;
 voieR:=voieR-
$8000; IF(voieR<0)THEN voieR:=voieR+$10000;
 voieL:=byte(voieL
DIV $100);
 voieR:=byte(voieR
DIV $100);
END;


En ce qui concerne l'en-tête du fichier, il faut apporter les modifications suivantes:
-
Filesize est divisée par deux.
-
Format change cette fois.
- Par contre,
Mode ne bouge pas.
- Comme d'hab, il faudra modifier
BytePerSec et NbrByte.


 

SOURCE DU PROGRAMME