# PulseAudio

Source: [https://docs.qualcomm.com/doc/80-70014-16/topic/pulseaudio.html](https://docs.qualcomm.com/doc/80-70014-16/topic/pulseaudio.html)

PulseAudio is a general purpose sound server intended to run as middleware between
        applications and hardware devices.

Source code for PulseAudio is located at
                build-qcom-wayland/workspace/sources/pulseaudio/opensource/pulseaudio.

Some of the frequently used PulseAudio APIs are described below. See the [open source PulseAudio documentation](https://freedesktop.org/software/pulseaudio/doxygen/index.html) for a complete
            description of all APIs .

## pa\_stream\_new

Creates a new, unconnected stream with the specified name and sample type.

    pa_stream* pa_stream_new (
         pa_context * c, 
         const char *name,
         const pa_sample_spec * ss, 
         const pa_channel_map *map) Copy to clipboard

**Parameter**

| c | Context in which to create the stream |
| --- | --- |
| name | Name of the stream name |
| ss | Sample format |
| map | Channel map, or NULL for default |

**Return value**

[**pa\_stream**](https://freedesktop.org/software/pulseaudio/doxygen/stream_8h.html#a960d798980692a2ff01e5a70553d4f29)\* handle

## pa\_stream\_get\_state

Returns the current state of the stream.

    pa_stream_state_t pa_stream_get_state(
         const pa_stream *p) Copy to clipboard

**Parameters**

| p | pa\_stream handle |
| --- | --- |

**Return value**

Returns the [**pa\_stream\_state\_t**](https://freedesktop.org/software/pulseaudio/doxygen/def_8h.html#a750e398d2ce663b858c87d8aa2f81eaa)

## pa\_stream\_get\_device\_name

Returns the name of the sink or source this stream is connected to in the server.

    const char* pa_stream_get_device_name(const pa_stream *s) Copy to clipboard

**Parameters**

| s | pa\_stream handle |
| --- | --- |

**Return value**

Name of the device

## pa\_stream\_connect\_playback

Connects the stream to a sink.

    int pa_stream_connect_playback (
         pa_stream * s, 
         const char * dev, 
         const pa_buffer_attr *attr, 
         pa_stream_flags_t flags, 
         const pa_cvolume *volume, 
         pa_stream *sync_stream) Copy to clipboard

**Parameter**

| s | Stream to connect to a sink |
| --- | --- |
| dev | Name of the sink to connect to, or NULL to let the server<br>                                decide |
| attr | Buffering attributes, or NULL for default |
| flags | Additional flags, or 0 for default |
| volume | Initial volume, or NULL for default |
| sync\_stream | Synchronizes this stream with the specified one, or NULL for a<br>                                standalone stream |

**Return value**

Returns zero on success.

## pa\_stream\_connect\_record

Connects the stream to a source.

    int pa_stream_connect_record(
         pa_stream *s, 
         const char * dev, 
         const pa_buffer_attr * attr,     
         pa_stream_flags_t flags) Copy to clipboard

**Parameters**

| s | Stream to connect to a source |
| --- | --- |
| dev | Name of the source to connect to, or NULL to let the server<br>                                decide |
| attr | Buffer attributes, or NULL for default |
| flags | Additional flags, or 0 for default |

**Return value**

Returns zero on success.

## pa\_stream\_write

Writes data to the server (for playback streams).

    int pa_stream_write(
         pa_stream * p, 
         const void * data, 
         size_t nbytes, 
         pa_free_cb_t free_cb, 
         int64_t offset, 
         pa_seek_mode_t seek) Copy to clipboard

**Parameters**

| p | Stream to use |
| --- | --- |
| data | Data to write |
| nbytes | Length of the data to write in bytes. Must be in multiples of the<br>                                stream's sample spec frame size. |
| free\_cb | Clean-up routine for the data, or NULL to request an internal<br>                                copy |
| offset | Offset for seeking. Must be 0 for upload streams. Must be in<br>                                multiples of the stream's sample spec frame size. |
| seek | Seek mode. Must be PA\_SEEK\_RELATIVE for upload streams. |

**Return value**

Returns zero on success.

## pa\_stream\_set\_write\_callback

Sets the callback function that is called when new data may be written to the
                stream.

    void pa_stream_set_write_callback(
         pa_stream * p, 
         pa_stream_request_cb_t cb, 
         void *userdata) Copy to clipboard

**Parameters**

| p | The stream to use |
| --- | --- |
| cb | Callback function to be set |
| userdata | User data to be sent to callback |

**Return value**

None

## pa\_stream\_set\_read\_callback

Sets the callback function that is called when new data is available from the
                stream.

    void pa_stream_set_read_callback(
         pa_stream * p, 
         pa_stream_request_cb_t cb, 
         void *userdata) Copy to clipboard

**Parameters**

| p | Stream to use |
| --- | --- |
| cb | Callback function to be set |
| userdata | User data to be sent to callback |

**Return value**

None

## pa\_stream\_disconnect

Disconnects a stream from a source/sink.

    int pa_stream_disconnect(pa_stream *s)Copy to clipboard

**Parameters**

| s | pa\_stream handle |
| --- | --- |

**Return value**

Returns zero on success.

For more information, see the  [PulseAudio API](https://freedesktop.org/software/pulseaudio/doxygen/stream_8h.html) documentation.

## PulseAudio-based applications

The `PAREC` application captures audio from the PulseAudio level. For
                example:

    ssh root@ip-addr
    setenforce 0
    #pactl set-source-port regular2 handset-mic
    #parec -v --rate=48000 --format=s16le --channels=1 --file-format=wav /opt/ test.wav --device=regular2
    Copy to clipboard

Supported formats are `s16le`, `s24le`,
                    `s32le`, `s24-32le`. The rate can be
                    `8000`, `16000`, `22050`,
                    `24000`, `32000`, `44100`,
                    `48000`, `88200`, `96000`,
                    `17640`, `19200`, `35280`, and
                    `38400`.

This example captures 48 kHz, 16-bit mono audio from a regular source and saves it as
                a wav file at /opt/test.wav.

The `paplay` application plays audio from the PulseAudio level.

To perform playback, the wav file can be pushed to the device using the following
                command:

    scp test.wav root@[ip-addr]:/data/Copy to clipboard

For example:

    setenforce 0
    #paplay /opt/test.wav -vCopy to clipboard

This example plays the audio file /opt/test.wav with all default
                configurations.

**Parent Topic:** [APIs and Sample Apps](https://docs.qualcomm.com/doc/80-70014-16/topic/apis_and_sample_apps.html)

Last Published: Jul 15, 2024

[Previous Topic
GStreamer](https://docs.qualcomm.com/bundle/publicresource/80-70014-16/topics/gstreamer.md) [Next Topic
Platform Adaptation Layer (PAL)](https://docs.qualcomm.com/bundle/publicresource/80-70014-16/topics/platform_adaptation_layer_pal.md)