La traducción de esta página está obsoleta. Haga clic aquí para ver la última versión en inglés.
Grabar y reproducir audio
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.
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
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);
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 estructura 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 objetoaudiorecorder
,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.
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 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
.
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 archivogong
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.
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 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
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 espacio de trabajo base, puede pausar la reproducción desde la línea de comandos:pause(h)
Consulte también
audioplayer
| sound
| soundsc
| audiorecorder