Grabar y reproducir audio
Grabe y reproduzca datos de audio para procesarlos en MATLAB® desde dispositivos de entrada y salida de audio del sistema. Se admite la reproducción y grabación de audio en MATLAB Online™ y MATLAB Web App Server™ desde Google Chrome®.
Grabar 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
orecordblocking
, 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étodostop
. De manera opcional, llame a los métodospause
yresume
. 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
.
Grabar la entrada del micrófono
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
con propiedades predeterminadas 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.
recDuration = 5; disp("Begin speaking.") recordblocking(recObj,recDuration); disp("End of recording.")
Reproduzca la grabación.
play(recObj);
Almacene los datos en el arreglo de doble precisión y
.
y = getaudiodata(recObj);
Represente las muestras de audio.
plot(y);
Grabar dos canales desde dos tarjetas de sonido distintas
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 estructuras que contiene todos los dispositivos de entrada y salida de audio del sistema.Identifique las tarjetas de sonido que quiera utilizar por su nombre y anote los valores deinfo = audiodevinfo;
ID
.Cree dos objetos
audiorecorder
. Por ejemplo, este código crea el objetoaudiorecorder
recorder1
para grabar un canal único desde el dispositivo 3 a 44,1 kHz y 16 bits por muestra. El código crea el objetoaudiorecorder
recorder2
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.
Las grabaciones se realizan de forma simultánea, ya que la primera llamada arecord(recorder1); record(recorder2); pause(5);
record
no se bloquea.Detenga las grabaciones.
stop(recorder1); stop(recorder2);
Especificar la calidad de la grabación
De forma predeterminada, un objeto audiorecorder
utiliza una tasa de muestreo de 8000 Hz, una profundidad de 8 bits (8 bits por muestra) y un canal de audio único. Con esta configuración, la cantidad de almacenamiento de datos necesaria es baja. En grabaciones de mayor calidad, aumente la tasa de muestreo o la profundidad de bits.
Por ejemplo, los discos compactos utilizan una tasa de muestreo de 44.100 hercios, una profundidad de 16 bits y dos canales de audio. Cree un objeto audiorecorder
para grabar con esta configuración.
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
.
Reproducir audio
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
osoundsc
. 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 objetoaudioplayer
y después llame a los métodos para reproducir el audio. Por ejemplo, escuche el archivo de muestragong
.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 Hz. 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 5000 y 192.000 Hz aproximadamente. Si se especifican tasas de muestreo fuera de este rango, se pueden producir resultados inesperados.
Grabar o reproducir audio dentro de una función
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 de 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 73.113 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 que la grabación o reproducción estén completas, considere estas opciones:
Utilice
playblocking
orecordblocking
en vez deplay
orecord
. 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 (comopause
oresume
) 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 área de trabajo base, puede pausar la reproducción desde la línea de comandos.pause(h)
Consulte también
audioplayer
| sound
| soundsc
| audiorecorder