Record and play audio data for processing in MATLAB® from audio input and output devices on your system. As of R2020b, audio playback is supported in MATLAB Online™.
Record data from an audio input device such as a microphone connected to your system:
record returns immediate control to the calling
function or the command prompt even as recording proceeds. Specify
the length of the recording in seconds, or end the recording with
stop method. Optionally, call the
The recording is performed asynchronously.
recordblocking retains control until the
recording is complete. Specify the length of the recording in
seconds. The recording is performed synchronously.
Create a numeric array corresponding to the signal data using the
The following examples show how to use the
This example shows how to record microphone input, play back the recording, and store the recorded audio signal in a numeric array. You must first connect a microphone to your system.
audiorecorder object named
recObj for recording audio input.
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 creates an 8000 Hz, 8-bit, 1-channel
Record your voice for 5 seconds.
disp('Start speaking.') recordblocking(recObj, 5); disp('End of Recording.');
Play back the recording.
Store data in double-precision array,
y = getaudiodata(recObj);
Plot the audio samples.
To record audio independently from two different sound cards, with a microphone connected to each:
audiodevinfo to list the available sounds
cards. For example, this code returns a structure array containing all
input and output audio devices on your
info = audiodevinfo;
audiorecorder objects. For example, this
code creates the
recorder1, for recording a single channel from
device 3 at 44.1 kHz and 16 bits per sample. The
recorder2, is for recording a single channel from
device 4 at 48 kHz:
recorder1 = audiorecorder(44100,16,1,3); recorder2 = audiorecorder(48000,16,1,4);
Record each audio channel separately.
record(recorder1); record(recorder2); pause(5);
recorddoes not block.
Stop the recordings.
By default, an
audiorecorder object uses a sample rate of
8000 hertz, a depth of 8 bits (8 bits per sample), and a single audio channel.
These settings minimize the required amount of data storage. For higher quality
recordings, increase the sample rate or bit depth.
For example, typical compact disks use a sample rate of 44,100 hertz and a
16-bit depth. Create an
audiorecorder object to record in
stereo (two channels) with those settings:
myRecObj = audiorecorder(44100, 16, 2);
For more information on the available properties and values, see the
After you import or record audio, MATLAB supports several ways to listen to the data:
load chirp.mat; sound(y, Fs);
For more flexibility during playback, including the ability to pause,
resume, or define callbacks, use the
audioplayer object, then call methods to play
the audio. For example, listen to the
load gong.mat; gong = audioplayer(y, Fs); play(gong);
For an additional example, see Record or Play Audio within a Function.
If you do not specify the sample rate,
sound plays back at 8192
hertz. For any playback, specify smaller sample rates to play back more slowly, and
larger sample rates to play back more quickly.
Most sound cards support sample rates between approximately 5,000 and 48,000 hertz. Specifying sample rates outside this range can produce unexpected results.
If you create an
audiorecorder object inside a function, the object exists
only for the duration of the function. For example, create a player function called
playFile and a simple callback function
function playFile(myfile) load(myfile); obj = audioplayer(y, Fs); obj.TimerFcn = 'showSeconds'; obj.TimerPeriod = 1; play(obj); end function showSeconds disp('tick') end
playFile from the command prompt to play the file
At the recorded sample rate of 8192 samples per second, playing the 73113 samples
in the file takes approximately 8.9 seconds. However, the
playFile function typically ends before playback completes,
and clears the
To ensure complete playback or recording, consider the following options:
blocking methods retain control until playing or recording completes. If you
block control, you cannot issue any other commands or methods (such as
resume) during the
playback or recording.
Create an output argument for your function that generates an object in
the base workspace. For example, modify the
function to include an output argument:
function obj = playFile(myfile)
Call the function:
h = playFile('handel.mat');
h exists in the base workspace, you can pause
playback from the command prompt: