RtAudio播放PCM

1. RtAudio简介

RtAudio是一个跨平台的音频I/O库,可以在Windows、MacOS和Linux上使用。它提供了简单易用的接口,可以方便地进行音频数据的输入和输出。项目地址

Pulse和ALSA的区别

PulseAudio和ALSA是Linux系统中两种重要的音频处理组件,它们在功能和用途上存在显著区别。

  1. ALSA(Advanced Linux Sound Architecture)
    ALSA是Linux内核的一部分,主要负责与声卡的直接通信。它提供了一套底层的音频驱动接口,允许应用程序直接访问声卡硬件。然而,ALSA有一些局限性,例如它一次只能处理一个应用程序的音频流,且不支持多路混音。此外,ALSA的配置和使用相对复杂,需要手动设置和调整。

  2. PulseAudio
    PulseAudio是一个运行在用户空间的音频服务器,它通过ALSA与硬件通信。PulseAudio的主要功能是作为多个应用程序之间的音频仲裁者,能够同时处理多个音频流,并提供混音、音量控制、设备切换等功能。PulseAudio还支持跨平台使用,可以在不同的操作系统上运行,包括POSIX标准的Unix-like系统和Windows。

  3. 两者的关系
    在典型的Linux系统中,PulseAudio通常依赖于ALSA来实现音频硬件的控制。PulseAudio将自己模拟成一个输出设备,供ALSA调用,从而实现对多个应用程序音频流的管理。这种设计使得PulseAudio可以集中处理音频混音和路由问题,而不需要每个应用程序单独与硬件交互。

  4. 优缺点

    • ALSA的优点:低延迟、性能稳定,适合对音频性能要求较高的场景。
    • PulseAudio的优点:易于使用、功能丰富(如混音、音量控制、设备切换)、跨平台支持,适合普通桌面用户。
    • PulseAudio的缺点:默认配置下可能会引入较大的延迟,且配置复杂度较高,容易出错。
  5. 应用场景

    • 如果你需要低延迟的音频体验,或者需要直接与硬件交互,建议使用ALSA。
    • 如果你需要一个易于使用的音频解决方案,希望在多个应用程序之间共享音频设备,或者需要跨平台支持,建议使用PulseAudio。

PulseAudio和ALSA各有优缺点,适用于不同的使用场景。在实际应用中,许多Linux发行版(如Ubuntu)默认采用ALSA + PulseAudio的组合,以兼顾性能和易用性。

2. RtAudio调用ALSA播放PCM

确认已安装libasound

1
2
dpkg -l |grep asound
dpkg -L libasound2-dev

否则

1
apt install libasound2-dev

同理,如果需要使用pulse

1
apt install libpulse-dev

编译

Playraw

1
2
3
4
5
6
$tree
.
|-- CMakeLists.txt
|-- RtAudio.cpp # RtAudio库源码
|-- RtAudio.h # RtAudio库头文件
|-- playraw.cpp # RtAudio/tests/playraw.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cmake_minimum_required(VERSION 3.5)

project(simrtaudio)

# add_definitions(-D__WINDOWS_WASAPI__) # WASAPI
add_definitions(-D__LINUX_ALSA__) # ALSA
# add_definitions(-D__LINUX_PULSE__) # PULSE

set(CMAKE_CXX_STANDARD 11)
aux_source_directory(. SRC)

add_executable(playrt ${SRC})

find_package(Threads REQUIRED)

# target_link_libraries(playrt ksuser mfplat mfuuid wmcodecdspuuid)# WASAPI
target_link_libraries(playrt asound ${CMAKE_THREAD_LIBS_INIT}) # ALSA
# target_link_libraries(playrt pulse pulse-simple ${CMAKE_THREAD_LIBS_INIT}) # PULSE