Main Content

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:

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

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

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

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 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)

Consulte también

| | |

Temas relacionados