当前位置:首页 > 技术分享 > 正文内容

在 Raspberry Pi 上使用 Python 播放声音

lmwmm5年前 (2022-04-06)技术分享6424

今天,我需要在 Python 脚本中通过树莓派上的 USB 音频设备播放 MP3 或 WAV 文件。“应该很容易吧! ”我想!


raspberry-pi-clarence-bell-speaker-sound-usb-audio-python.jpeg

好吧,几个小时后,我决定写这篇博客文章来记录最简单的方法,因为我不得不花费相当长的时间才能到达真正通过 USB 音频输出播放声音的地步。

问题在于大多数指南,例如来自 Raspberry Pi 项目站点的这个简单指南,假设有两件事:

  1. 您的 Raspberry Pi 有一个已经可以使用的默认声音设备(例如0)

  2. 您正在以交互方式运行代码或以某种方式运行代码,而无需了解底层 API 的工作原理

就我而言,问题是,在无头 Raspberry Pi Zero 上运行 USB 声音设备,这些假设都不是真的。

让 USB 音频正常工作

第一步是检测 USB 音频设备,并告诉您的系统将其用作默认音频设备。还有其他方法可以在 Python 代码本身中检测和/或选择特定设备,但如果您可以在系统范围内设置默认值并让 Python 使用该默认值,这是最简单的。

首先,您需要确保您的声音设备(在我的例子中是一个 9 美元的 Vantec NBA-120U 适配器)被识别。运行以下命令,您应该会看到它列为名称中带有“USB”的设备:

$ cat /proc/asound/modules
 1 snd_usb_audio

一些 Pi 模型也会显示一个0内置设备(例如模型 B 版本上的声音输出)。默认情况下,ALSA(Advanced Linux Sound Architecture)音频系统0无论如何都会尝试使用 device 。要告诉它使用设备1(snd_usb_audio设备),您可以配置全局/etc/asound.conf文件或用户本地~/.asoundrc文件。

在这两个文件之一(我选择配置 Pi 用户的~/.asoundrc文件)中,放入以下内容:

pcm.!default {
        type hw
        card 1
}

ctl.!default {
        type hw
        card 1
}

这告诉 ALSA 默认card 1使用 USB 设备。现在,要测试它是否正常工作,请将耳机或扬声器插入输出,然后运行:

$ speaker-test -c2 -twav -l7

您应该开始通过扬声器或耳机听到“左前”和“右前”之类的声音。

播放声音pygame.mixer

对于我的Raspberry Pi Bell Slapper项目,我有一个简单的“ding.wav”文件,它是铃声的声音。我想设置它,这样树莓派不仅会发出带有连接到树莓派 GPIO 的螺线管的物理铃铛,而且还会通过扬声器发出叮当声,因此有人可以在另一个房间听到叮当声。

这是播放文件所需的最少 Python 代码pygame:

import pygame

pygame.mixer.init()
sound = pygame.mixer.Sound('/home/pi/ding.wav')
playing = sound.play()
while playing.get_busy():
    pygame.time.delay(100)

这需要pygame,它可以与pip3 install pygame. 如果没有所需的混音器库,Pygame 也会失败,因此您还需要运行apt-get install libsdl2-mixer-2.0-0.

完成此操作后,您应该能够运行脚本 ( python3 play-sound.py),并且它应该会播放文件。

最后的while循环很重要——没有它,脚本将在声音有机会播放之前退出!



扫描二维码推送至手机访问。

版权声明:本文由点度点度金讯时代-BLOG发布,如需转载请注明出处。

本文链接:https://www.lmwmm.com/post/283.html

分享给朋友:

“在 Raspberry Pi 上使用 Python 播放声音” 的相关文章

抖音宣布全量开放帐号IP属地功能

抖音宣布全量开放帐号IP属地功能

       4月29日消息,稍早前,有用户发现,抖音也支持了IP属地功能,即作者、评论显示地理位置。今日晚间,“抖音安全中心”微信公众号宣布,抖音一直致力于维护真实有序的社区讨论氛围,确保平台传播内…

【树莓派基础系列教程】2、远程连接树莓派

【树莓派基础系列教程】2、远程连接树莓派

远程连接树莓派核心思想 在联网的状态下,我们可以通过一个叫做SSH的东西,从本地登陆到任何一台我们已知用户名和密码,并且开放了22端口的Linux主机上。SSH本质是建立在应用层基础上的一种安全协议,有兴趣的可以自行Google一下。所以,…

科大讯飞再燃大模型“战火”,赶超ChatGPT并非目的,应用端才是关键

科大讯飞再燃大模型“战火”,赶超ChatGPT并非目的,应用端才是关键

日前,科大讯飞发布星火认知大模型,让火热的“大模型”战场再燃战火。对自家产品,科大讯飞董事长刘庆峰称,“三项能力超过ChatGPT”。如今,国内大模型战场,已经汇聚百度、阿里、华为、腾讯等重磅玩家。这些大模型,与ChatGPT有多远的距离?…

进入PG新时代:CES电竞屏幕一举突破2K和480Hz刷新率的颠覆性创新

进入PG新时代:CES电竞屏幕一举突破2K和480Hz刷新率的颠覆性创新

即将开幕的美国CES消费PG电子展掀起一波电竞屏幕技术的风潮,LG和三星两大屏幕巨头预告了引人注目的最新一代产品。三星推出了新款Odyssey OLED系列电竞屏幕,其中27寸的G6以360Hz的刷新率和0.03ms的反应速度带来顺滑的画面…

手机回归BBIN实体按键:专为iPhone设计的电子按键保护壳

手机回归BBIN实体按键:专为iPhone设计的电子按键保护壳

英国新兴企业Clicks即将在2024年CES展会上展示一款专为iPhone用户设计的保护套,满足那些寻求实体按键感需求的BB Games电子游戏玩家。这款配件允许用户在下方的实体按键来输入文内容或玩BB热门游戏。类似的设计在过去曾有过,B…

《Archaelund》:Steam独家提供CQ9玩家抢先体验战斗的新篇章

《Archaelund》:Steam独家提供CQ9玩家抢先体验战斗的新篇章

4 Dimension Games工作室带来了一场震撼的游戏体验,《Archaelund》正式登陆Steam平台,为CQ9玩家开启了一场开放世界探索和战斗的新冒险。这款游戏采用第一人称视角,让玩家深入探索一个神秘而危险的世界。游戏中的战斗系…