c - 用C/C++在Raspberry Pi上播放WAV,必须使用dsp吗?

标签 c audio raspberry-pi signal-processing wav

我目前正在尝试使用C或C++播放WAV文件,(我想知道如何详细播放WAV文件)。但是,我发现的所有示例代码都试图首先检测/dev/dsp(例如 github example )。我正在开发 Raspberry Pi,但找不到 dsp 在哪里。

我的问题是我必须使用 dsp 才能播放 wav 吗?不然还有其他解决办法吗?而且我以前从未使用过 dsp。

(ps:我已经知道wav文件的格式,并且知道如何阅读它,我只是好奇播放它)。

最佳答案

简而言之,您的问题:

Do I have to use DSP in order to make wav playing work?

答案是否定的。

DSP(数字信号处理)这个术语用于描述获取原始数字信号,查看波形,然后应用某种处理(即滤波、延迟、调制......这样的例子不胜枚举)。如果您有兴趣,我相信您会轻松找到有关 DSP 的更多信息,但这里有 short article开始吧。

由于您只想播放 .wav 文件,因此该过程只需读取 .wav 文件 header information (找出元数据 -> 采样率、采样数...),然后使用 header 信息中描述的正确参数播放 .wav 数据。

1。播放.wav原始数据

既然您说您已经知道如何读取 .wav 文件,我假设您只想播放音频数据数组?

在 C/C++(在操作系统上)中执行此操作的最常见技术是使用 portaudio 。这是一个用 C 编写的跨平台(支持 Mac、Win 和 Linux)音频 IO 库,可以从 C/C++ 调用。他们提供examples in their documentation用于读取/写入 .wav 文件,以及非阻塞和阻塞播放。我认为这就是您正在寻找的东西,如果您遇到困难,有很多 SO 帖子或人员可以帮助您。

它还支持实时录制和回放(如果这对您的项目有任何用处的话)(即,如果您愿意,可以让您进行实时 DSP)。

portaudio 还有许多其他绑定(bind)其他语言如 PyAudio (Python),PlayRec (Matlab/Octave),rust-portaudio (Rust)...以及许多其他内容(如果您需要不同语言的版本)。

否则,有较低级别的库可以为您提供更多访问权限,但这有时不是您所需要的,但这里有一个 link to the ALSA project examplesPortaudio使用ALSA如果在 Linux 上使用它构建。

2。尝试一些 DSP!

由于您已经拥有音频数据,因此您可以用它做您想做的事情。如果这是一个学习项目,我肯定会建议尝试一些 DSP 编程,因为它有助于所有类型的信号处理( singular imagesvideos 以及更困难的领域 -> 本质上与音频的理论相同)。

我建议尝试使用高级语言进行简单的 DSP 任务(特别是 PythonMatlab/Octave,因为这些通常是音频 DSP 原型(prototype)设计的首选)。如果您想进入音频编程,我认为这是一个很好的开始方式,如果您已经具备 C/C++ 知识,那么将高级语言理论转移到 C/C++ 会很容易:)

关于c - 用C/C++在Raspberry Pi上播放WAV,必须使用dsp吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51197426/

相关文章:

c - 使用特定分隔符 c 对文本文件中的行进行排序

c - Visual C 接受错误数量的参数?

代码中的更改不会反射(reflect)在输出上(代码块)

c# - 录制编码播放并保存一个 wav 文件

ios - 如何在 iOS 项目中使用 LibXtract?

c - 我需要帮助弄清楚为什么这不起作用。 (C)

java - 通过 Java 连接到远程数据库

c# - 如何在Raspberry PI上运行.net core 3.1应用程序?

raspberry-pi - Raspberry PI 版本 1 未检测到未对齐的访问

Android,在soundpool中播放声音