Comme petit morceau de musique expérimentale, j'essaie de programmer un morceau en C standard. Le code génère un fichier PCM brut qui peut être importé dans Audacity. À l'heure actuelle, tout fonctionne comme prévu, mais je rencontre des problèmes lorsque j'essaie d'écrire chaque échantillon en 16 bits par opposition à l'actuel 8 bits que j'utilise. Jusqu'à l'écriture, l'échantillon courant est calculé comme un flottant et ses limites sont maintenues à peu près dans la plage d'un entier signé de 8 bits. Il est ensuite écrit comme un entier de 8 bits avant de répéter le processus pour l'échantillon suivant. Cela fonctionne bien et joue correctement. Le problème se produit lorsque j'essaie de l'écrire en tant que fichier PCM brut 16 bits - je multiplie le flottant par 256 et copiez le résultat dans un entier, sur quoi j'utilise fwrite pour écrire l'entier 16 bits résultant. Cela ne donne pas les résultats attendus lors de l'importation, ce qui entraîne une version très déformée de ce que j'attendais.Problème lors de l'écriture d'un fichier PCM brut 16 bits
J'ai ajouté le code valide ci-dessous, car le problème se produit uniquement à l'écriture.
travail Code 8bit:
if (out<-127) {out=-128;} else if (out>126) {out=127;}
putc(out,fo);
ne fonctionne pas Code 16bit:
if (out<-127) {out=-128;} else if (out>126) {out=127;}
pcm=out*256;
fwrite(&pcm,2,1,fo);
Je suis probablement manque quelque chose d'évident, mais je l'ai essayé de travailler dehors Pendant des heures. Merci d'avance!
est pcm un int16_t? – RWS
Hm ... Je pensais que les fichiers WAV 8 bits étaient supposés utiliser des échantillons * non signés *. –
Vous devez afficher la déclaration de 'pcm'. – caf