web-dev-qa-db-fra.com

Réduction/suppression de l'écrêtage dans SoX lors de la conversion de la fréquence d'échantillonnage

J'utilise SoX pour découper un ensemble de fichiers wav en fichiers wav mono canal 16 kHz, 16 bits (qui seront des sous-ensembles de l'un des fichiers wav initiaux). La plupart des fichiers source wav sont déjà configurés selon cette spécification, cependant, je viens de découvrir que certains d'entre eux ont des taux d'échantillonnage différents. Comme il va être automatisé en Java à l'aide d'un ProcessBuilder, j'ai pensé que je pourrais utiliser la commande suivante:

sox <source_wav> -b 16 <dest_wav> channels 1 rate 16000 trim <startTime> =<endTime>

et le taux d'échantillonnage ne changera que s'il ne s'agit pas de 16 000 Hz. Il fait ce qu'il est supposé faire sur des fichiers avec les mêmes spécifications, mais sur des fichiers avec des fréquences d'échantillonnage différentes, je reçois:

sox WARN rate: rate clipped 48 samples; decrease volume?
sox WARN dither: dither clipped 44 samples; decrease volume?

Comment dois-je gérer cela sans dégrader la qualité de l'audio? Notez que je ne connais rien au traitement du signal.

24
cesar

Comme suggéré par l'outil, essayez de réduire légèrement le volume, par exemple. en précédant avec -v 0,99 (ou 0,98, etc.). Ces petites variations de volume sont imperceptibles.

Exemple:

sox -v 0.99 <source_wav> -b 16 <dest_wav> channels 1 rate 16000 trim <startTime> =<endTime>

Si vous obtenez toujours des coupures, alors le son est probablement gravement coupé (c'est-à-dire déformé) (ceci est courant dans la musique moderne; voir Wikipedia: Loudness war ) et les avertissements peuvent donc être ignorés - aucune distorsion supplémentaire n'est en cours. introduit.

Comme mentionné dans les commentaires, l’option -G peut être utilisée pour ajuster automatiquement le volume nécessaire pour éviter tout écrêtage (au prix d’un peu plus de temps de calcul, c’est-à-dire qu’elle est légèrement plus lente avec -G).

32
user871634

J'ai eu le problème. Changer l'encodage du fichier wav l'a corrigé:

sox input.wav -e signed-integer output.wav
0
Markus Lenger