Técnicas de ralentización de sonido

¿Alguna vez habéis pensado en cómo “hablan” los lectores de texto? Por ejemplo, en los eBooks o en los menús de accesibilidad de muchas aplicaciones. Muchas de ellas tienen la posibilidad de lectura digital con la opción de velocidad de lectura por si queréis que bien lea más deprisa o, por el contrario, más lentamente. En concreto, nos centraremos en una de las técnicas de ralentización de sonido en procesado digital.

Los dispositivos actuales suelen trabajar con DSP’s, o procesadores digitales de señal, que trabajan a menudo a una frecuencia única de forma que el hardware sea algo menos complejo. Esto significa que sólo puede existir una velocidad de reproducción.

Pongámonos ahora en la situación en la cual un eBook << supondremos la hipótesis inicial en la que el eBook sólo dispone de una frecuencia; desconozco su hardware 😉 >> está en modo lectura digital reproduciendo a x1; esto es, a una velocidad “normal”. En caso de que queramos que vaya más lento, por ejemplo a x0.5 (velocidad mitad), esto no será posible , ¿por qué? porque, como hemos dicho, solo tenemos una frecuencia de trabajo. Aquí entran en juego las diferentes técnicas de las que queremos hablar.

Existen varias técnicas de ralentización en la que se trabaja a frecuencia de muestreo única, donde cada una de ellas tiene sus ventajas e inconvenientes. Como en la mayoría de desarrollos tecnológicos, una buena calidad casi siempre suele implicar una maquinaria compleja (software o hardware); por ello se debe analizar el contexto y elegir entre calidad o sencillez. Una mayor sencillez redunda en menor computación, menores costes, etc; mayor complejidad es sinónimo de calidad, aunque sin las ventajas del caso anterior.

En primer lugar os queremos mostrar qué efectos ocurren cuando reproduces un mismo audio a su frecuencia de muestreo natural y a la mitad. Para esto abriremos MatLab (tutorial para los más novatos), crearemos un nuevo script y copiaremos lo siguiente:

load('AudioPSOLA.mat')
soundsc(x, fs)
soundsc(x, fs/2)

Cargamos el archivo “AudioPSOLA.mat” (lo podéis descargar aquí) que nos dará las variables ‘x’ y ‘fs’. Luego reproducimos a su frecuencia original de muestreo y, posteriormente, a la mitad.

Como vemos, la reproducción a la frecuencia mitad es completamente antinatural; sí, esta ralentizada, pero esta técnica no es buena. ¡Habrá que mejorar! Y eso es lo que haremos.

Técnica de duplicado de tramas.

Esta primera evolución se basa en, como dice su nombre, duplicar de una forma ordenada las tramas, que no son más que la separación del audio en partes, según nuestro criterio.

Introducimos el concepto de ventana, que se trata del número de muestras que utilizaremos para cada parte en la que vamos a separar el audio.

Con la siguiente figura debe quedar asentada y entendida esta técnica:

Duplicado_tramas

¡Hora de probarlo! De nuevo abrimos MatLab y escribimos:

%% Duplicado de tramas.

load('AudioPSOLA.mat')
ventana = 500;
n_partes = length(x)/ventana;

senal_duplicada = [];
for m = 1:partes
    vector = (x((m-1)*ventana + 1 :m*ventana)).';
    senal_duplicada = [senal_duplicada vector vector];
end

soundsc(senal_duplicada, fs)

Al ejecutarlo apreciaremos una mejora con respecto al caso de cambiar la frecuencia de muestreo a la mitad. Es normal que se escuchen saltos, al fin y al cabo esta técnica no es perfecta ni la mejor que se puede hacer; podéis afinarlo cambiando el tamaño de ventana y escuchando los cambios.

– Técnica “OverLap and Add” (OLA).

Es conocida también por las siglas OA, además de por OLA. Ésta se basa también en la separación en tramas pero no en su duplicación. En lugar de esto lo que haremos será solaparlas y sumar dicho solapamiento habiéndolos antes multiplicado por una señal creciente o decreciente, según la trama. La razón de esta multiplicación es provocar una transición suave desde una trama hacia la otra.  Podríamos resumirlo con la siguiente imagen, ya que es siempre más fácil de comprender:

ola

El resultado sería la suma de todas las tramas en el orden que veis. El “recorte” que se le ha hecho a las tramas representa la fase de multiplicación en la que a cada una se le multiplica por la señal escalera, de modo que según nos alejamos d ésta, las muestras de la siguiente cobren más importancia. Podríamos decir que se trata de una media de muestras según la distancia hacia una u otra trama.

Si sois observadores os podréis haber percatado de que el solape de mismas tramas de como resultado la propia trama inicial; fijaos en las tramas de color malva y verde.

El código para llevarlo a la práctica:

%% OLA. Overlap-Add

load('AudioPSOLA.mat')
w = 500; %Tamano de ventana
partes = length(x)/w;

vector = x(1:w)';

km = w/2;
esc1 = linspace(0,1,km);
esc2 = linspace(1,0,km);

media_mismo_vector = vector(end-km+1:end).*esc2 + vector(1:end-km).*esc1;
x_sola = [vector(1:w/2) media_mismo_vector vector(w/2+1:end) ];

for ind = 1:partes - 1
    vector = x(ind*0.5*w+1:w*(1+ind*0.5))';
    anterior_vector = x_sola(end-w/2+1:end);
    esc1 = linspace(0,1,km);
    esc2 = linspace(1,0,km);
    x_sola(end-km+1:end) = x_sola(end-km+1:end).*esc2 + vector(1:end-km).*esc1;
    media_mismo_vector = vector(end-km+1:end).*esc2 + vector(1:end-km).*esc1;
    x_sola = [x_sola media_mismo_vector vector(end-km:km) vector(w/2+1:end)];
end

soundsc(x_sola, fs)

Las variables “esc1” y “esc2” no son más que vectores que contiene los valores de la señal escalera de la que hemos hablado antes. Antes de sumar las semi-tramas debemos multiplicar por estas variables.

Si reproducís el nuevo resultado veréis que mejora y que conseguimos un sonido más natural, aunque sigue habiendo ciertas brusquedades.

Para la próxima entrega reservamos un método similar llamado SOLA, o “Synchronous Overlap and Add” donde el resultado es aún mejor, pudiendo conseguir un audio de mediana calidad en un archivo de música.

¿Qué opináis vosotros acerca de estas técnicas? 😉

Acerca de Codificando Escarabajos

Blog de música!
Esta entrada fue publicada en Aprende con nosotros, Tecnología en el audio y la música y etiquetada , , , , , , , , , , , , . Guarda el enlace permanente.

Una respuesta a Técnicas de ralentización de sonido

  1. excellent post, very informative. I wonder why the opposite specialists of this sector do not notice this. You should continue your writing. I am confident, you’ve a huge readers’ base already!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s