How to play audio

来自百问网嵌入式Linux wiki
Wiki讨论 | 贡献2020年11月5日 (四) 10:24的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

Article purpose

本文介绍了如何在Linux® OS 上下文中通过 ALSA音频框架播放音频。 下面的示例演示如何在STM32MPU的不同音频硬件接口上播放音频 boards.

Audio playback overview

The ALSA 框架公开了与板音频硬件接口关联的音频设备。 默认情况下,应用程序音频流通过 PulseAudio 声音服务器进行路由。PulseAudio公开了映射在ALSA声卡音频设备上的音频配置文件。 PulseAudio服务器提供了一个命令行界面,该界面允许列出音频配置文件并选择配置文件以在特定的音频接口上播放。

以下各节中的音频播放示例适用于 ALSA utilities.但是,音频回放可以由gstreamer 多媒体框架等其他应用程序启动。

Examples

Audio playback on headset output

Playback on ALSA device

在 'playback_codec' ALSA设备上运行音频播放:

Info.png 'playback_codec' is an alias defined in /etc/asound.conf, for headset output device.
Board $> aplay -D playback_codec /usr/share/sounds/alsa/Front_Left.wav

Playback via PulseAudio

  • 配置Pulseaudio

将声卡的Pulseaudio活动配置文件更改为'analog-stereo' 配置文件:

Info.png Pulseaudio模拟立体声配置文件是默认配置文件。 因此启动后不需要下一个命令。
Info.png 以下是 sound card index 0的示例。用 "pactl list cards short" 命令检查声卡索引。
Board $> pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo
  • 运行音频播放:
Board $> aplay /usr/share/sounds/alsa/Front_Left.wav

Audio playback on HDMI output

Warning.png HDMI输出的支持取决于主板。 请用"aplay -l" 命令检查可用的输出。

Playback on ALSA device

在 'playback_hdmi' ALSA设备上运行音频播放:

Info.png 'playback_hdmi'是在 /etc/asound.conf 中为hdmi输出设备定义的别名。
Board $> aplay -D playback_hdmi /usr/share/sounds/alsa/Front_Left.wav

Playback via PulseAudio

  • 配置Pulseaudio

将声卡的Pulseaudio活动配置文件更改为‘ hdmi-stereo’配置文件:

Info.png 以下是 sound card index 0的示例。 用 "pactl list cards short" 命令检查声卡索引。
Board $> pacmd set-card-profile 0 output:hdmi-stereo
  • 运行音频播放:
Board $> aplay /usr/share/sounds/alsa/Front_Left.wav

Audio playback on S/PDIF output

Warning.png S/PDIF输出的支持取决于电路板。 请用 "aplay -l" 命令检查可用的输出。
Info.png S/PDIF ALSA设备仅支持 32-bit audio streams. 由于示例声音文件中未提供32位波形文件,因此在这里为方便起见,使用扬声器测试代替了播放。 扬声器测试在以下示例中生成440Hz正弦波。

Set IEC958 status bits

Example: set IEC958 mode bit.

Board $> iecset -c STM32MP1EV -n device=0 pro on

Playback on ALSA device

在 'playback spdif' ALSA设备上运行音频播放

Info.png “ playback_spdif”是在/etc/asound.conf中为 S/PDIF 输出设备定义的别名。
Board $> speaker-test -D playback_spdif -c 2 -F S32_LE -f 440 -t sine -l 1

Playback via PulseAudio

  • 配置Pulseaudio

将声卡活动配置文件更改为S / PDIF'iec958-stereo'配置文件。

Info.png 以下是 sound card index 0的示例。用"pactl list cards short" 命令检查声卡索引。
Board $> pacmd set-card-profile 0 output:iec958-stereo
  • 运行音频播放:
Board $> speaker-test -c 2 -F S32_LE -f 440 -t sine -l 1