我目前正在尝试使用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 examples 。 Portaudio使用ALSA如果在 Linux 上使用它构建。
2。尝试一些 DSP!
由于您已经拥有音频数据,因此您可以用它做您想做的事情。如果这是一个学习项目,我肯定会建议尝试一些 DSP 编程,因为它有助于所有类型的信号处理( singular images 、 videos 以及更困难的领域 -> 本质上与音频的理论相同)。
我建议尝试使用高级语言进行简单的 DSP 任务(特别是 Python 或 Matlab/Octave,因为这些通常是音频 DSP 原型(prototype)设计的首选)。如果您想进入音频编程,我认为这是一个很好的开始方式,如果您已经具备 C/C++ 知识,那么将高级语言理论转移到 C/C++ 会很容易:)
关于c - 用C/C++在Raspberry Pi上播放WAV,必须使用dsp吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51197426/