En relisant la dernière news de Zerosquare et en réalisant une fois de plus mon ignorance totale dans tout ce qui touche de près ou de loin au son, j'ai voulu faire quelques tests et écrire un fichier WAVE tout con qui joue quelques notes.
Ça marchouille à peu près, mais il y a quand même des trucs qui m'échappent. Si je ne me trompe pas, quand on code son fichier en PCM, mettons sur 16 bits et un seul canal, la T-ième valeur représente une approximation sur 16 bits de la position de la membrane à l'instant T (soit à la T/11025-ième seconde si je suis en 11025Hz). Je lis un peu partout que cette valeur peut aller de -32768 à 32767, ok, mais j'ai du mal à voir ce que ça représente. Si je veux jouer une note, il vaut mieux que j'oscille entre -1000 et 1000 ? -10000 et 10000 ? -32768 et 32767 ? Comment choisir une "bonne" valeur, sans qu'elle soit trop faible mais sans non plus qu'elle soit trop proche des limites et m'empêche d'y superposer une seconde note ? Sinon je peux aussi tout normaliser de façon à ce que le max de mon signal soit codé par 32767 et adapter l'échelle à partir de ça, mais je ne sais pas si c'est une bonne idée.
Je suis encore plus perdu pour les WAVE codés directement avec des floats sur 32 bits, je pensais naïvement que les valeurs devaient être entre -1 et 1 mais visiblement c'est pas du tout ça, du coup je ne sais même pas quelles valeurs minimale/maximale peuvent être utilisées, et j'ai un peu de mal à trouver des spécifications là-dessus.
Quelqu'un pour m'éclairer ?
