Código
Encabezado
numpy: Biblioteca fundamental para operaciones numéricas, especialmente para trabajar con
matrices y arreglos, esenciales para la representación de señales.
wave: Proporciona funciones para leer y escribir archivos de audio WAV.
struct: Se utiliza para empaquetar y desempaquetar datos binarios, lo cual puede ser útil para el
procesamiento de audio de bajo nivel.
os: Proporciona una forma de interactuar con el sistema operativo, como operaciones con archivos
y directorios.
moviepy.editor.VideoFileClip: Clase de la biblioteca moviepy utilizada para cargar y manipular
archivos de video.
scipy.io.wavfile: Funciones de la biblioteca SciPy para leer y escribir archivos de audio WAV.
scipy.interpolate: Contiene herramientas de interpolación, que pueden utilizarse para remuestrear
señales.
matplotlib.pyplot: Biblioteca de gráficos utilizada para crear visualizaciones, potencialmente para
mostrar formas de onda o resultados de análisis. IPython.display.Audio e IPython.display.Video: Se
utilizan en Jupyter Notebooks para mostrar directamente reproductores de audio y video.
pydub.AudioSegment: Una biblioteca diseñada específicamente para trabajar con archivos de
audio en varios formatos.
Audio
load_audio(file_path): Esta función toma la ruta de un archivo como entrada y carga los datos de
audio usando la biblioteca pydub. Devuelve la frecuencia de muestreo (número de muestras por
segundo) y los datos de audio como una matriz NumPy. Si el audio es estéreo (dos canales),
selecciona solo el primer canal.
normalize_signal(signal, v_min=1.0, v_max=5.0): Esta función normaliza la señal de entrada a un
rango de voltaje especificado, con un valor predeterminado de 1 V a 5 V. La normalización escala
los valores de la señal para ajustarlos a un rango específico.
uniform_quantize(signal, bits): Esta función realiza una cuantificación uniforme de la señal de
entrada utilizando un número específico de bits. La cuantificación convierte los valores continuos
de la señal en un conjunto discreto de niveles. La cuantificación uniforme divide el rango de la
señal en intervalos de igual tamaño. Devuelve la señal cuantificada (q_signal) y los índices de
cuantificación correspondientes (q_indices).
nonuniform_quantize(signal, bits): Esta función realiza una cuantificación no uniforme,
específicamente mediante la técnica de compresión-expansión de ley mu, en la señal de entrada
con un número específico de bits. La cuantificación no uniforme asigna más niveles a valores de
señal más pequeños, lo cual se utiliza a menudo en señales de voz para mejorar la relación señal-
ruido. Devuelve la señal reconstruida tras la cuantificación y expansión (recon_signal) y los índices
de cuantificación (q_indices).
encode_to_binary(q_indices, bits): Esta función toma los índices de cuantificación (q_indices) y el
número de bits utilizados para la cuantificación y convierte cada índice en su representación
binaria como una cadena.
decode_from_binary(binary_seq, bits): Esta función toma una secuencia de cadenas binarias
(binary_seq) y las convierte de nuevo en sus valores enteros correspondientes.
save_txt_report(file_path, original, quantized, binary_seq, fs, bits): Esta función genera un informe
de texto que resume el proceso de cuantificación. Guarda el informe en la ruta de archivo
especificada, incluyendo los valores de la señal original, los valores cuantificados, las
representaciones binarias, la frecuencia de muestreo (fs) y el número de bits utilizados. Limita la
salida a las primeras 1000 muestras.
save_audio(signal, sample_rate, filename): Esta función guarda la señal de audio procesada en un
archivo WAV con el nombre de archivo y la frecuencia de muestreo especificados. Escala la señal al
rango adecuado para audio de 16 bits antes de guardarla.
Audio Processing Example
audio_file = 'nombre_audio.mp3': Esta línea establece el nombre del archivo de audio que se
procesará. Debe reemplazar 'nombre_audio.mp3' con el nombre real de su archivo de audio.
sample_rate, audio_data = load_audio(audio_file): Llama a la función load_audio para cargar los
datos de audio del archivo especificado.
La instrucción `if` comprueba si el audio cargado es estéreo y, si lo es, selecciona el primer canal.
audio_norm = normalize_signal(audio_data, 1.0, 5.0): Normaliza los datos de audio a un rango de
voltaje de 1 V a 5 V.
bits = 24: Establece el número de bits para la cuantificación en 24.
modo = 'uniformef': Establece el modo de cuantificación en 'uniformef'. Tenga en cuenta que la
condición a continuación comprueba 'uniforme' y 'no_uniforme', por lo que este valor se incluirá
en el bloque `else`. Normalmente, se establecería en 'uniforme' o 'no_uniforme'.
El bloque if/else invoca la función uniform_quantize o nonuniform_quantize según el valor de la
variable modo.
binary_seq = encode_to_binary(q_indices, bits): Codifica los índices de cuantificación en una
secuencia de cadenas binarias.
save_txt_report("proceso_audio.txt", audio_norm, q_signal, binary_seq, sample_rate, bits):
Guarda un informe de texto del proceso de cuantificación en un archivo llamado
"proceso_audio.txt".
audio_output = f"audio_{bits}bit_{modo}.wav": Crea un nombre de archivo para el archivo de
audio cuantificado de salida según el número de bits y el modo de cuantificación.
save_audio(q_signal, sample_rate, audio_output): Guarda la señal de audio cuantificada en el
nombre de archivo generado en formato WAV. Audio(audio_output): en un entorno de notebook
Jupyter, esta línea mostrará un reproductor de audio que le permitirá escuchar el archivo de audio
procesado.