encodage libsox

voix
0

Pourquoi dois-je obtenir une sortie déformée si je convertir un fichier wav en utilisant libsox à:

&in->encoding.encoding = SOX_ENCODING_UNSIGNED;
&in->encoding.bits_per_sample = 8;

en utilisant le code ci-dessus?

Le fichier d'entrée a bits_per_sample = 16.

Créé 06/02/2009 à 06:11
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Donc, vous dites que vous dites SOX de lire un fichier WAV exemple 16 bits comme un exemple de fichier 8 bits? Ne connaissant rien SOX, j'attendre à lire chaque échantillon de 16 bits en deux 8 échantillons de bits ... le haut octet de l'ordre et l'octet bas de commande comme ceci: ... HLHLHLHLHL ...

Les échantillons Pour simplifier, nous appellerons haut l'ordre des octets des échantillons de A '. échantillons « A » portent le son d'origine avec une gamme dynamique inférieure, parce que l'octet d'ordre inférieur, avec la précision supplémentaire a été coupé hors tension.

Nous appellerons les échantillons d'octets d'ordre bas « des échantillons B ». Ceux-ci seront à peu près au hasard et encoder le bruit.

Donc, par conséquent, nous aurons le son original, les échantillons « A », décalée vers le bas en fréquence par demi. En effet, il y a un échantillon « B » entre tous les « A » échantillon qui réduit de moitié le taux des échantillons « A ». Les échantillons « B » ajouter du bruit au son original. Nous aurons donc le son original, décalé vers le bas par un demi, avec le bruit.

Est-ce que vous entendez?

Modifier Invité a commenté que le but est de downconvert un fichier WAV à 8 bit audio. La lecture de la page de manuel pour les SOx , il semble que SOX utilise toujours 32 bits audio en mémoire à la suite de sox_read (). En passant ce format ne fera que tenter de lire à partir de ce format.

Pour downconvert en mémoire, utilisez de sox.h, à savoir SOX_SAMPLE_TO_SIGNED_8BIT ou SOX_SAMPLE_TO_UNSIGNED_8BIT:

sox_format_t ft = sox_open_read("/file/blah.wav", NULL, NULL);
if( ft ) {
    sox_ssample_t buffer[100];
    sox_size_t amt = sox_read(ft, buffer, sizeof(buffer));
    char 8bitsample = SOX_SAMPLE_TO_SIGNED_8BIT(buffer[0], ft->clips);
}

à la sortie d'un fichier downconvertis, utilisez le format 8 bits lors de l'écriture au lieu de la lecture.

Créé 06/02/2009 à 06:55
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more