在C / C ++中的Raspberry Pi中播放WAV,必须使用dsp吗?

时间:2018-07-05 17:59:58

标签: c audio raspberry-pi signal-processing wav

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

我的问题是我必须使用dsp才能使wav播放正常工作吗?否则,还有其他解决方法吗?而且我以前从未使用过dsp。

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

1 个答案:

答案 0 :(得分:1)

简而言之,您的问题:

  

我必须使用DSP才能播放wav吗?

答案是否定的。

DSP(数字信号处理)是用于描述获取原始数字信号并查看波形然后进行某种处理(即滤波,延迟,调制...等等)的术语。如果您有兴趣,我相信您可以在DSP上轻松找到更多信息,但这是一个short article入门。

由于您要做的只是回放.wav文件,因此该过程只是读取.wav文件header information(查找元数据->采样率,样本数量...),然后然后使用标题信息中描述的正确参数播放.wav数据。

1。播放.wav原始数据

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

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

如果对您的项目有用,它还支持实时记录和回放(即,如果您愿意,可以让您执行实时DSP)。

还有portaudio的许多其他绑定,如PyAudio(Python),PlayRec(Matlab / Octave),rust-portaudio(Rust)等其他语言...还有很多其他的如果您需要使用其他语言的话。

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

2。尝试一些DSP!

由于您已经有了音频数据,因此您可以使用它进行所需的操作。如果这是一个学习项目,我绝对建议尝试一些DSP编程,因为它可以帮助处理所有类型的信号(singular imagesvideos和更困难的领域->本质上与音频相同的理论)。

我建议尝试使用高级语言(尤其是PythonMatlab / Octave中的简单DSP任务,因为这些通常是音频DSP原型开发所必需的)。如果您想开始音频编程,我认为这是一个很好的起点,如果您已经掌握了C / C ++知识,那么将高级语言理论转换为C / C ++就会很容易了:)