适用于 Raspberry Pi 的轻量级音频播放和图像显示

Posted

技术标签:

【中文标题】适用于 Raspberry Pi 的轻量级音频播放和图像显示【英文标题】:Lightweight audio playback and image display for Raspberry Pi 【发布时间】:2014-01-25 08:51:19 【问题描述】:

我正在为 Raspberry Pi 创建一个服务器应用程序,任务是通过网络套接字接受传入的命令,然后显示一个图像和一个短音频文件 (300-500ms)。

最重要的是性能,因为会有客户等待对其操作的响应(这会触发传入的套接字命令)。

所以我正在寻找一些关于简单轻量级音频库的推荐,以及一个最好可以在 Python 中使用的图像查看器库。图像库应该能够将图像缓存在 RAM 中,这样脚本就不需要每次显示图像时都从内存卡中读取。

我还没有决定使用哪个 Linux 发行版,但我猜 Arch Linux(没有 Xorg)将为我的 Python 脚本提供更多可用资源。

【问题讨论】:

寻找 gstreamer,我认为它有 python 绑定 试试processing.org 框架。 也许有一个非常轻量级的窗口管理器,它只能全屏启动我的 Python 脚本...... @DimitryK 不幸的是,根据我的经验,Processing 并不是 Raspberry PI 上的最佳选择:它需要一些调整才能安装,然后编译和运行很慢。对于快速原型设计,Python 可以完成这项工作。对于“繁重”的 openFrameworks 表现出色,唯一的缺点是编译时间(或至少是主库的初始编译) @GeorgeProfenza 当您在 RP 上使用 Processing PDE 时,它确实编译得很慢。但是,您可以在自己的机器上开发草图,然后使用可执行文件的processing-java 命令行版本在 RP 上运行它。如果您使用 P3D 或 P2D 等原生渲染模式(使用 GPU 的渲染模式)(与不使用 GPU 功能的默认 JAVA2D 渲染器相反),您应该会看到良好的性能。 【参考方案1】:

我假设服务器/rpi 将拥有图像,并且音频文件已经在服务器上,并且您的 python 脚本将等待网络上的提示以显示某个图像并播放某个音频文件。

我想 Python 已经安装好了,你可能实际上也准备好了 pygame。 PyGame 很容易上手,它可以更轻松地加载图像和声音并进行渲染。由于您正在收听网络事件,您可能应该使用一个线程来保持 gui(图像/声音)线程独立和响应。

这是一个关于如何加载和播放音频文件的非常简单的示例:

import pygame
from pygame.locals import *
#init game engine with audio
pygame.init()           
pygame.mixer.init()
#load a sound
sound = pygame.mixer.Sound("/path/to/WAVS/sample.wav")
#playback
sound.play()

请注意,pygame 支持多种音频格式。用wav文件,好像是signed wav files。

【讨论】:

谢谢,我们目前正在使用 pygame 进行测试,只要图片缓存在 RAM 中,它可能就可以工作。感谢您的帮助。 我认为如果您在应用程序启动时加载图像,它们将被缓存在内存中。这听起来与我为JoyJacket project 所做的有点相似,只是我有一个单独的线程用于 GPIO/串行通信而不是网络消息,所以有一个处理 pygame 的主线程但也有另一个线程(使用组合有一个单独负责 GPIO 的类)进行串行操作,因此我不会阻塞屏幕或音频渲染

以上是关于适用于 Raspberry Pi 的轻量级音频播放和图像显示的主要内容,如果未能解决你的问题,请参考以下文章

从 ALSA Raspberry Pi 获取音频幅度

使用 CLI omxplayer 调整音频音量级别 - Raspberry Pi

样式表元素适用于 Windows,但不适用于 raspberry-pi

在 Raspberry Pi(Python 和 Socket)上播放 .wav 文件时遇到问题

用于在 Raspberry Pi 上读取和播放 WAV 文件的 ALSA 应用程序

使用单声道时的 Serial.IO.Ports 问题,适用于 dotnet core 3.1 / arm / raspberry pi 4