MATLAB: Leyendo subvectores de un audio

Download PDF

En un post anterior MATLAB: Leyendo un audio y calculando su FFT se realizó el proceso de leer un archivo de sonido y calcular su FFT. El archivo analizado previamente, contiene las notas de un piano correspondientes a la octava comprendida entre las notas C4 hasta el B4, ejecutadas secuencialmente mediante una escala cromática ascendente.

ROLAND

 

Para poder indicarle al computador donde se ubica cada sonido de cada nota, debemos realizar algún proceso basado en algoritmos tipo sound detection, el cual se realizará con ayuda del algoritmo del software de audio Audacity, denominado Sound Finder e implementado por Jeremy R. Brown.

 

audacity

 

 

El algoritmo Sound Finder genera una serie de datos exportables como un archivo .txt el cual contiene una estructura de 3 columnas en donde por cada dato se indica el instante de tiempo donde comienza el sonido, el instante de tiempo donde termina y un numero correlativo asignado.

datos_sonido_piano

 

Con todo a continuación se presenta un codigo en MATLAB para leer este archivo y extraer subvectores (subsets) del archivo de audio (que en términos computacionales es un vector).


clear; %limpiar variables
clc; %limpiar pantalla
[data fs]=wavread('01_piano.wav');
data=data';
etiquetas=load('01_piano.txt');
etiquetas(1:12,1:2)=floor(fs*etiquetas(1:12,1:2));
diferencias=etiquetas(1:12,2)-etiquetas(1:12,1);
medida=max(diferencias)+1;
%medida=176399;
audios=[zeros(12,medida)];

for j=1:12
subvector=data(etiquetas(j,1):etiquetas(j,2));
agregar=medida-length(subvector);
audios(j,:)=[subvector zeros(1,agregar)];
end

%GRAFICANDO 6x4
for j=1:12
subplot(4,6,j)
plot(audios(1,:));

subplot(4,6,j+12)
a=abs(fft(audios(1,:)));
plot(a(1:(end/2)/4));
end

sonidos_piano

The following two tabs change content below.

LEONARDO PARADA VALENCIA

INGENIERO ACÚSTICO EXPERTO EN DISEÑO SONORO Y MÚSICA PARA VIDEOJUEGOS