%DEMO_AUDIO
% Demostración en la que se captura una señal de audio y se visualiza el
% histograma de la amplitud de la señal capturada.
% Puede comprobarse que se observa un histograma laplaciano cuando se captura
% la señal de una única persona hablando.
% Si se captura la señal de voz de múltiples personas hablando
% simultaneamente e independientemente, el histograma tiende a ser gaussiano.

%   Copyright (c) 2019 G.T.A.S. (Grupo Tratamiento Avanzado de Señal)
%                 DICOM Universidad de Cantabria
%	Fecha   : Octubre 2019.
%	Version : 1.0

%===========================================================================
% Notas:
% ----------------------
%	o	Comprobada bajo Matlab r2020b y Windows10
%===========================================================================

%===========================================================================
% Historia de Modificaciones:
% ----------------------
%	o	Creada y Comprobada bajo MATLAB r2019a 10/10/2019
%	o	Selección de dispositivo de entrada 21/10/2020
%	o	Uso de histogram en lugar de hist 5/10/2021
%   o   Cambios menores 19/09/2023
%==========================================================================


N_segundos = 5; % Tiempo (en segundos) a capturar

%% Selección del dispositivo de entrada de audio
devices = audiodevinfo;

if length(devices.input)==0
    error('No hay dispositivos de entrada de audio disponibles')
    return
end
disp('Dispositivos de entrada de audio disponibles en el sistema:')
for n = 1:length(devices.input)
    
    disp(devices.input(n))
    disp('')
    
end
device_input_ID = input('Introduzca el ID de la entrada que deseas usar: ');

rec = audiorecorder(8000,16,1,device_input_ID);

%% Captura, visualización y reproducción de la señal de audio


disp('Iniciando grabación.')
disp('    Pulse una tecla para iniciar');
pause
disp(sprintf('    Grabando %d segundos ....',N_segundos))
recordblocking(rec,N_segundos)
disp('Fin de la grabación');
x = getaudiodata(rec);  % vector con las muestras capturadas
x = x(2001:end);  % Eliminamos posible transitorio inicial (2000 primeras muestras)
x = x-mean(x);    % Se elimina el valor medio (la componente de continua)

subplot(211);plot(x);xlabel('tiempo (muestras)');ylabel('Amplitud (voltios)');title('Señal de voz');zoom on
subplot(212);histogram(x,100);xlabel('Amplitud (voltios)');ylabel('N^0 de muestras');title('Histograma')
%subplot(212);histogram(x,100,'Normalization','pdf');xlabel('Amplitud (voltios)');ylabel('fdp estimada');title('Histograma')

disp('    Pulse una tecla para reproducir');
pause

play(rec);
