audio - software - Reducir/eliminar el recorte en SoX al convertir la frecuencia de muestreo
sox software (2)
Estoy usando SoX para recortar un conjunto de archivos wav en archivos wav mono canal de 16 kHz, 16 bits (que serán subconjuntos de uno de los archivos wav iniciales). La mayoría de los archivos wav de origen ya están configurados para esta especificación, sin embargo, acabo de descubrir que algunos de ellos tienen diferentes frecuencias de muestreo. Como se va a automatizar en Java usando un ProcessBuilder, pensé que podría usar el siguiente comando:
sox <source_wav> -b 16 <dest_wav> channels 1 rate 16000 trim <startTime> =<endTime>
y solo cambiará la frecuencia de muestreo si no es 16000 Hz. Hace lo que se supone que debe hacer en los archivos con la misma especificación, pero en los archivos con diferentes frecuencias de muestreo, obtengo:
sox WARN rate: rate clipped 48 samples; decrease volume?
sox WARN dither: dither clipped 44 samples; decrease volume?
¿Cómo debo lidiar con esto sin degradar la calidad del audio? Tenga en cuenta que no sé nada sobre el procesamiento de la señal.
Como lo sugiere la herramienta, intente reducir el volumen ligeramente, por ejemplo, precediendo con -v 0.99 (o 0.98, etc.). Tales pequeños cambios en el volumen son imperceptibles.
Ejemplo:
sox -v 0.99 <source_wav> -b 16 <dest_wav> channels 1 rate 16000 trim <startTime> =<endTime>
Si aún tiene clipping, entonces es probable que el audio esté severamente recortado (es decir, distorsionado) para comenzar (esto es común con la música moderna; vea Wikipedia: Loudness war ), por lo que se pueden ignorar las advertencias, no se está introduciendo una distorsión adicional.
Como se mencionó en los comentarios, se puede dar la opción -G, la cual automáticamente ajustará el volumen necesario para evitar el recorte (a expensas de un poco más de tiempo de CPU, es decir, se ejecuta un poco más lento con -G).
Tuve el problema El cambio de la codificación del archivo wav lo solucionó:
sox input.wav -e signed-integer output.wav