Main Content

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:

  1. Cree un objeto audiorecorder.

  2. 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.

  3. 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:

  1. 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.

    info = audiodevinfo;
    
    Identifique las tarjetas de sonido que quiera utilizar por su nombre y anote los valores de ID.

  2. 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 código crea el objeto audiorecorder 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);
    

  3. Grabe cada uno de los canales de audio por separado.

    record(recorder1);
    record(recorder2); 
    pause(5);
    
    Las grabaciones se realizan de forma simultánea, ya que la primera llamada a record no se bloquea.

  4. 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 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 de muestra gong.

    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 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 área de trabajo base, puede pausar la reproducción desde la línea de comandos.

    pause(h)
    

Consulte también

| | |

Temas relacionados