La traducción de esta página está obsoleta. Haga clic aquí para ver la última versión en inglés.
Grabe y reproduzca datos de audio para procesarlos en MATLAB® desde dispositivos de entrada y salida de audio del sistema. A partir de la versión R2020b, MATLAB Online™ admite la reproducción de audio.
Grabe datos desde un dispositivo de entrada de audio como un micrófono conectado al sistema:
Cree un objeto audiorecorder
.
Llame al método record
o recordblocking
, donde:
record
devuelve el control inmediato a la función de llamada o a la línea de comandos incluso mientras se está realizando la grabación. Especifique la longitud de la grabación en segundos o finalice la grabación con el método stop
. De manera opcional, llame a los métodos pause
y resume
. La grabación se realiza de forma asíncrona.
recordblocking
retiene el control hasta que la grabación se completa. Especifique la longitud de la grabación en segundos. La grabación se realiza de forma síncrona.
Cree un arreglo numérico que se corresponda con los datos de la señal mediante el método getaudiodata
.
Los siguientes ejemplos muestran cómo usar los métodos recordblocking
y record
.
Este ejemplo muestra cómo grabar la entrada del micrófono, reproducir la grabación y almacenar la señal de audio grabada en un arreglo numérico. Primero debe conectar un micrófono al sistema.
Cree un objeto audiorecorder
llamado recObj
para grabar la entrada de audio.
recObj = audiorecorder
recObj = audiorecorder with properties: SampleRate: 8000 BitsPerSample: 8 NumChannels: 1 DeviceID: -1 CurrentSample: 1 TotalSamples: 0 Running: 'off' StartFcn: [] StopFcn: [] TimerFcn: [] TimerPeriod: 0.0500 Tag: '' UserData: [] Type: 'audiorecorder'
audiorecorder
crea un objeto audiorecorder
de 8000 Hz, 8 bits y 1 canal.
Grabe su voz durante 5 segundos.
disp('Start speaking.') recordblocking(recObj, 5); disp('End of Recording.');
Reproduzca la grabación.
play(recObj);
Almacene los datos en el arreglo de precisión doble, y
.
y = getaudiodata(recObj);
Represente las muestras de audio.
plot(y);
Para grabar audio de manera independiente desde dos tarjetas de sonido distintas, con un micrófono conectado a cada una de ellas:
Llame a audiodevinfo
para enumerar las tarjetas de sonido disponibles. Por ejemplo, este código devuelve un arreglo de estructura que contiene todos los dispositivos de entrada y salida de audio del sistema:
info = audiodevinfo;
ID
.Cree dos objetos audiorecorder
. Por ejemplo, este código crea el objeto audiorecorder
, recorder1
, para grabar un canal único desde el dispositivo 3 a 44,1 kHz y 16 bits por muestra. El objeto audiorecorder
, recorder2
, sirve para grabar un canal único desde el dispositivo 4 a 48 kHz:
recorder1 = audiorecorder(44100,16,1,3); recorder2 = audiorecorder(48000,16,1,4);
Grabe cada uno de los canales de audio por separado.
record(recorder1); record(recorder2); pause(5);
record
no se bloquea.Detenga las grabaciones.
stop(recorder1); stop(recorder2);
De forma predeterminada, un objeto audiorecorder
utiliza una tasa de muestreo de 8000 hercios, una profundidad de 8 bits (8 bits por muestra) y un canal de audio único. Estos ajustes minimizan la cantidad de almacenamiento de datos necesaria. En grabaciones de mayor calidad, aumente la tasa de muestreo o la profundidad de bits.
Por ejemplo, los discos compactos habituales utilizan una tasa de muestreo de 44.100 hercios y una profundidad de 16 bits. Cree un objeto audiorecorder
para grabar en estéreo (dos canales) con estos ajustes:
myRecObj = audiorecorder(44100, 16, 2);
Para obtener más información sobre los valores y las propiedades disponibles, consulte la página de referencia de audiorecorder
.
Después de importar o grabar audio, MATLAB admite varias formas de escuchar los datos:
Para una reproducción simple con una única llamada a una función, use sound
o soundsc
. Por ejemplo, cargue un archivo MAT de muestra que contenga datos de la señal y la tasa de muestreo y escuche el audio:
load chirp.mat; sound(y, Fs);
Para disfrutar de más flexibilidad durante la reproducción, incluida la posibilidad de pausar, reanudar o definir callbacks, use la función audioplayer
. Cree un objeto audioplayer
y después llame a los métodos para reproducir el audio. Por ejemplo, escuche el archivo gong
de muestra:
load gong.mat; gong = audioplayer(y, Fs); play(gong);
Para ver otro ejemplo, consulte Grabar o reproducir audio dentro de una función.
Si no especifica la tasa de muestreo, sound
se reproduce a 8192 hercios. En cualquier reproducción, especifique tasas de muestreo más pequeñas para una reproducción más lenta y tasas de muestreo más elevadas para una reproducción más rápida.
Nota
La mayoría de las tarjetas de sonido admiten tasas de muestreo de entre 5.000 y 48.000 hercios aproximadamente. Si se especifican tasas de muestreo fuera de este rango, se pueden producir resultados inesperados.
Si crea un objeto audioplayer
o audiorecorder
dentro de una función, el objeto solo existe mientras dure la función. Por ejemplo, cree una función de reproducción llamada playFile
y una función callback simple showSeconds
:
function playFile(myfile) load(myfile); obj = audioplayer(y, Fs); obj.TimerFcn = 'showSeconds'; obj.TimerPeriod = 1; play(obj); end function showSeconds disp('tick') end
Llame a playFile
desde la línea de comandos para reproducir el archivo handel.mat
:
playFile('handel.mat')
En la tasa de muestreo registrada de 8192 muestras por segundo, la reproducción de las 73113 muestras del archivo tarda aproximadamente 8,9 segundos. Sin embargo, la función playFile
suele finalizar antes de que finalice la reproducción y elimina el objeto audioplayer
obj
.
Para garantizar que la grabación o reproducción estén completas, tenga en cuenta las siguientes opciones:
Utilice playblocking
o recordblocking
en vez de play
o record
. Los métodos de bloqueo mantienen el control hasta que finaliza la grabación o reproducción. Si bloquea el control, no puede emitir ningún otro comando o método (como pause
o resume
) durante la grabación o reproducción.
Cree un argumento de salida para la función que genere un objeto en el espacio de trabajo base. Por ejemplo, modifique la función playFile
para que incluya un argumento de salida:
function obj = playFile(myfile)
Llame a la función:
h = playFile('handel.mat');
Como h
existe en el espacio de trabajo base, puede pausar la reproducción desde la línea de comandos:
pause(h)
audioplayer
| audiorecorder
| sound
| soundsc