Main Content

capture

Capture data from audio device connected to Raspberry Pi

    Add-On Required: This feature requires the MATLAB Support Package for Raspberry Pi Hardware add-on.

    Description

    data = capture(audioCaptureObj) captures data from the audio input device connected to the Raspberry Pi® hardware. This function uses the Advanced Linux Sound Architecture (ALSA) driver framework to read audio data.

    Simulating this function results in an error. The function is supported only for deployment.

    Note

    To capture audio data with more than two channels, you must have Audio Toolbox™ license.

    example

    Examples

    collapse all

    Create a connection from the MATLAB® to the Raspberry Pi board.

    Note

    This example uses Audio Toolbox.

    mypi = raspi;

    Create a raspi_pitchshiftdeployment() function. In this function, connections to the audio input and output devices are created using the audiocapture and audioplayer objects. Modify the properties of the audio objects to match the properties of the device that you are using.

    function raspi_pitchshiftdeployment()
    % This function is used to deploy an audio processing application to a
    % Raspberry Pi. The specific application of interest is pitch-shifting.
    % This function takes audio input from a device connected to the Raspberry
    % Pi, pitch-shifts this audio input to the desired pitch and then sends
    % this output to the playback device connected to the Raspberry Pi
    
    %#codegen
    % Copyright 2019 The MathWorks, Inc.
    
    % Create capture and playback system objects for audio processing on
    % Raspberry Pi Hardware.
    
    r = raspi();
    captureObj = audiocapture(r,'plughw:2,0','SampleRate', 48000, 'SamplesPerFrame', 4800);
    
    playbackObj = audioplayer(r,'plughw:2,0', 'SampleRate', 48000);
    
    % Settings for pitch shifting operation
    pitch = -5;         % Pitch shift in semi-tones
    overlap = 0.2;      % Overlap of delay line
    Fs = 8192;          % Sampling Frequency
    
    
    pitchShifter = audiopluginexample.PitchShifter('PitchShift',8,'Overlap',0.3);
    setSampleRate(pitchShifter,Fs);
    
    for k = 1:3000
        % capture audio input from the input device
        input = capture(captureObj);
        
        % pitch shift the audio input.
        % input is of type int16 and needs to be converted to type double
        % before processing the data. This is because the function shiftPitch
        % expects all its inputs to be of the same data type which in this case
        % is type double
        
        pitchShifted = zeros(size(double(input)),'like',double(input)); %#ok<PREALL>
        
        pitchShifter.PitchShift = pitch;
        pitchShifter.Overlap = overlap;
        
        [pitchShifted] = pitchShifter(double(input));
        
        % playback audio output using the output device
        % output data needs to be of type int16 and thus pitchShifted
        % which is a double is cast to be of type int16 before being sent to
        % the device
        play(playbackObj,int16(pitchShifted));
    end
    end

    Create a Raspberry Pi configuration object, board.

    Note

    For Raspberry Pi with 32-bit OS use targetHardware('Raspberry Pi') and 64-bit OS use targetHardware('Raspberry Pi (64bit)').

    board = targetHardware('Raspberry Pi (64bit)')
    board = 
    targetHardware with properties:
    
                   Name: 'Raspberry Pi (64bit)'
          DeviceAddress: '172.18.182.234'
               Username: 'pi'
               Password: '*********'
               BuildDir: '/home/pi'
        EnableRunOnBoot: 0
            BuildAction: 'Build, load, and run'
            CoderConfig: [1×1 coder.CodeConfig]
    

    Deploy the raspi_pitchshiftdeployment() function on Raspberry Pi using the configuration object, board. On successful deployment, hold the audio capture device close to your mouth and start speaking. You can hear your pitch shifted voice through the audio playback device.

    deploy(board,'raspi_pitchshiftdeployment')
    Code generation successful: View report

    Input Arguments

    collapse all

    Connection between audio input device and Raspberry Pi hardware, specified as a audiocapture object.

    Example: data = capture(audioCaptureObj)

    Data Types: char

    Output Arguments

    collapse all

    Data captured from audio input device, specified as scalar or vector. The function outputs the data read from the audio capture device that is connected to the hardware. The audio data is returned as an N-by-C matrix, where N is the samples per channel and C is the number of channels supported by the audio device. The values of N and C are specified in the SamplesPerFrame and NumberOfChannels properties of the audiocapture object, respectively.

    For example, for a stereo audio source file with three samples per channel, the function outputs the audio data as a 3-by-2 matrix.

    Limitations

    MATLAB Connected I/O on the capture function is not supported.

    Version History

    Introduced in R2015b