# PulseAudio

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

PulseAudio 是一个通用的声音服务器，作为应用程序和硬件设备之间的中间件运行。

PulseAudio 的源代码位于 build-qcom-wayland/workspace/sources/pulseaudio/opensource/pulseaudio。

下面介绍了一些常用的 PulseAudio API。关于所有 API 的完整描述，可参见[开源 PulseAudio 文档](https://freedesktop.org/software/pulseaudio/doxygen/index.html)。

## pa\_stream\_new

使用指定的名称和示例类型创建新的、未连接的流。

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

**参数**

| c | 创建流的上下文 |
| --- | --- |
| name | 流的名称 |
| ss | 示例格式 |
| map | 通道映射，或默认为 NULL |

**返回值**

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

## pa\_stream\_get\_state

返回流的当前状态。

    pa_stream_state_t pa_stream_get_state(
         const pa_stream *p) Copy to clipboard

**参数**

| p | pa\_stream 句柄 |
| --- | --- |

**返回值**

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

## pa\_stream\_get\_device\_name

返回此流在服务器中连接到的Sink或Source的名称。

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

**参数**

| s | pa\_stream 句柄 |
| --- | --- |

**返回值**

设备名称

## pa\_stream\_connect\_playback

将流连接到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

**参数**

| s | 连接到Sink的流 |
| --- | --- |
| dev | 要连接的Sink |
| attr | 缓冲属性，或默认为 NULL |
| 标志 | 其他标志，默认为 0 |
| volume | 初始音量，默认为 NULL |
| sync\_stream | 将此流与指定的流同步，如为独立流，则为 NULL |

**返回值**

成功时返回零。

## pa\_stream\_connect\_record

将流连接到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

**参数**

| s | 连接到Source的流 |
| --- | --- |
| dev | 要连接的Source的名称，如让服务器决定，则为 NULL |
| attr | 缓冲区属性，默认为 NULL |
| 标志 | 其他标志，默认为 0 |

**返回值**

成功时返回零。

## pa\_stream\_write

将数据写入服务器（用于播放流）。

    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

**参数**

| p | 要使用的流 |
| --- | --- |
| data | 要写入的数据 |
| nbytes | 要写入的数据长度（以字节为单位）。必须是流的采样点规格帧大小的倍数。 |
| free\_cb | 数据的清理例程，NULL则为请求内部副本。 |
| offset | 用于查找的偏移量。上行流，则必须为 0。必须是流的采样点规格帧大小的倍数。 |
| seek | 查找模式。如为上行流，则必须为 PA\_SEEK\_RELATIVE。 |

**返回值**

成功时返回零。

## pa\_stream\_set\_write\_callback

设置可以在将新数据写入流时调用的回调函数。

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

**参数**

| p | 要使用的流 |
| --- | --- |
| cb | 要设置的回调函数 |
| userdata | 要发送到回调的用户数据 |

**返回值**

无

## pa\_stream\_set\_read\_callback

设置当流中有新数据可用时调用的回调函数。

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

**参数**

| p | 要使用的流 |
| --- | --- |
| cb | 要设置的回调函数 |
| userdata | 要发送到回调的用户数据 |

**返回值**

无

## pa\_stream\_disconnect

断开流与Source/Sink的连接。

    int pa_stream_disconnect(pa_stream *s)Copy to clipboard

**参数**

| s | pa\_stream 句柄 |
| --- | --- |

**返回值**

成功时返回零。

相关详细信息，可参见 [PulseAudio API](https://freedesktop.org/software/pulseaudio/doxygen/stream_8h.html) 文档。

## 基于 PulseAudio 的应用程序

`PAREC` 应用程序从 PulseAudio 级别捕获音频。例如：

    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

支持的格式为 `s16le`、`s24le`、`s32le`、`s24-32le`。采样率可以是 `8000`、`16000`、`22050`、`24000`、`32000`、`44100`、`48000`、`88200`、`96000`、`17640`、`19200`、`35280` 和 `38400`。

本示例从regular源捕获 48 kHz、16 位单声道音频，并保存在名为 /opt/test.wav 的 .wav 文件。

`paplay` 应用程序从 PulseAudio 级别播放音频。

要执行播放，可以使用以下命令将 .wav 文件推送到设备：

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

例如：

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

本示例使用所有默认配置播放音频文件 /opt/test.wav。

**Parent Topic:** [API 和示例程序](https://docs.qualcomm.com/doc/80-70014-16Y/topic/apis_and_sample_apps.html)

Last Published: Aug 27, 2024

[Previous Topic
GStreamer](https://docs.qualcomm.com/bundle/publicresource/80-70014-16Y/topics/gstreamer.md) [Next Topic
平台适配层 (PAL)](https://docs.qualcomm.com/bundle/publicresource/80-70014-16Y/topics/platform_adaptation_layer_pal.md)