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
|