How to play audio

来自百问网嵌入式Linux wiki
Zhouyuebiao讨论 | 贡献2019年12月26日 (四) 15:02的版本

如何播放音频

文章目的

本文介绍了如何通过具备 ALSA 音频架构的 Linux ® OS 环境播放音频。以下示例显示了如何在 STM32MPU 开发板上的不同音频硬件接口上播放音频。

音频播放概述

ALSA框架公开了与板音频硬件接口关联的音频设备。
默认情况下,应用程序音频流通过 PulseAudio 声音服务器进行路由。PulseAudio 公开了映射在 ALSA 声卡音频设备上的音频配置文件。PulseAudio 服务器提供了一个命令行界面,该界面允许列出音频配置文件并选择配置文件以在特定的音频接口上播放。
以下各节中针对 ALSA 实用程序给出对应的音频播放示例。但是,音频回放可以由其他应用程序启动,例如 gstreamer 多媒体框架。

示例

在耳机输出设备上播放音频

在 ALSA 设备上播放
在 “playback_codec” ALSA 设备上运行音频播放:
注意:“playback_codec” 在 /etc/asound.conf 中为耳机输出设备定义别名。
		Board $> aplay -D playback_codec /usr/share/sounds/alsa/Front_Left.wav
通过 PulseAudio 播放
将声卡的Pulseaudio活动配置文件更改为"analog-stereo”配置文件:
注意:Pulseaudio 模拟立体声时使用系统默认的配置文件件。因此引导后不需要下一个命令。
注意:下面给出了声卡索引 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

在HDMI输出设备上播放音频

注意:HDMI输出的支持取决于主板的硬件是否支持。请使用 “aplay -l” 命令检查所有的可用的输出。
在 ALSA 设备上播放。
在 “playback_hdmi” ALSA 设备上运行音频播放:
注意:“playback_hdmi” 是在 /etc/asound.conf 文件中为 hdmi 输出设备定义别名。
	Board $> aplay -D playback_hdmi /usr/share/sounds/alsa/Front_Left.wav
通过PulseAudio播放
将声卡的Pulseaudio活动配置文件更改为"hdmi-stereo”配置文件:
注意:下面给出了声卡索引0的示例。使用"pactl list cards short"命令可检查所有的声卡索引。
	Board $> pacmd set-card-profile 0 output:hdmi-stereo
运行音频播放:
	Board $> aplay /usr/share/sounds/alsa/Front_Left.wav

在 S/PDIF 输出设备上播放音频

注意:: S/PDIF 输出的支持取决于主板的硬件是否支持。请使用"aplay -l"命令检查可用的输出。
注意: S/PDIF ALSA 设备仅支持 32 位音频流。由于示例声音文件中未提供 32 位波形文件,因此在这里为方便起见,使用扬声器测试代替了播放。扬声器测试在以下示例中生成 440Hz 正弦波。
在 ALSA 设备上播放
在"playback_spdif” ALSA 设备上运行音频播放:
注意:"playback_spdif” 是在 /etc/asound.conf 文件中为 S/PDIF 输出设备定义的别名。
	Board $> speaker-test -D playback_spdif -c 2 -F S32_LE -f 440 -t sine -l 1
通过 PulseAudio 播放
将声卡活动配置文件更改为 S/PDIF 'iec958-stereo' 配置文件。
注意:下面给出了声卡索引 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