学习使用C++编写音频

Ski*_*ick 32 c++ audio

我的学位是音频工程,但我对编程很新.我想学习如何在编程环境中使用音频,部分原因是我可以通过有趣的项目更好地学习C++.

首先,C++是否适合这种语言?有什么理由我不应该使用它吗?我听说过Soundfile和其他一些图书馆 - 你会推荐什么?

最后,有没有人知道这个主题的任何好的教程?我已经学习了DSP的基础知识 - 我只想编程它!

编辑:我使用Windows.我想玩实时的东西,有点像Max/MSP,但有更多的控制.

小智 14

这实际上取决于你想要做什么样的音频工作.如果你想为游戏实现音频,C++肯定是正确的语言.周围有很多图书馆,OpenAL很棒,免费和多平台.我也使用了DirectSound和Fmod.检查出来,这一切都取决于您的需求.

  • 不幸的是,与 OpenGL 不同,OpenAL 并不是真正的开放标准,因为它是由 Creative 维护的专有软件。它也适用于 3d 电脑游戏,它的 Listener、Sources 和 Buffers 模型(以及距离、速度)。我想说如果你真的想深入了解核心,你应该使用你正在使用的操作系统的 API(例如 Windows 的 win32 API,OSX 的 CoreAudio API,不太确定 Linux)。 (2认同)

Emi*_*ags 12

如果你决定使用C++,那么The Synthesis Toolkit值得注意.我将它用于一个学校项目,它非常实用,在斯坦福大学开发,跨平台(win,mac和linux),免费和开源.来自维基百科页面的摘录:

STK仪器类的版本已集成到ChucK,Csound,Real-Time Cmix,Max/MSP(作为PeRColate的一部分)和SuperCollider

他们有很多测试代码+网站上有一些教程来开始他们的库.(但你当然必须知道一些C++)

STK有一些用于读/写音频文件(和matlab文件),实时音频/ midi io,一些基本算法(基于matlab的类似功能的用法),...


另一个明显的选择,也许是最常用的学习/测试dsp东西的环境是Matlab(或自由八度,但我以前没用过).在用C++实现它之前,我有时会在Matlab中测试一些东西.


编辑:在过去的一年里,我一直在使用JUCE,这是一个以C++音频编程为中心的非常酷的C++库,尽管它更倾向于像QT这样的东西.他们的一位开发人员(Timur Doumler)在CppCon 2015上与C++和JUCE进行了很好的实时音频讨论,非常值得一试,即使你最终没有使用JUCE:https://youtu.be/boPEO2auJj4

  • Matlab是我第一次编码经验!如果我没有在Uni的Matlab教授DSP,我现在可能不会在这里(在Stack Overflow上!).我还有一个旧版本 - 也许我应该先玩一下......好主意. (2认同)

jal*_*alf 10

C++是正确的语言吗?这完全取决于背景.如果您需要将代码插入另一个应用程序,框架或其他任何内容,您可能必须使用该框架所用的任何语言.

如果你正在制作自己独立的应用程序?可能不是.我建议你选择另一种语言有几个原因:

  • C++不适合初学者.如果您的目标是通过这些项目学习编程,请使用更适合"边做边学"的语言.C++充满了陷阱和"似乎有用"的东西,直到有一天它们没有.除此之外,还有一个非常复杂的语法和一些非常复杂的习惯用法和技巧,你必须掌握它们来解决几乎任何其他语言都没有问题的语言怪癖,并且你有很好的漏洞和挫折来源,没多大.
  • C++没有"音频"的概念.C++没有任何支持录制,处理或播放音频,加载或保存音频文件或其他任何东西.大多数现代语言都具有内置于标准语言中的某种形式的音频支持(至少能够加载和播放mp3文件以及其他此类基础知识).在C++中,所有这些都必须通过第三方库和特定于操作系统的代码来完成.

如果你有真正的语言选择,我会说像Python或C#这样的东西.它们更容易学习,开箱即用的功能更多,并且让你在脚下拍摄更加困难.我不会向那些不是经验丰富的程序员的人推荐C++.

  • 请记住,音频处理通常是一个实时的过程,您必须在几毫秒的时间内完成复杂的(FFT)计算,因为您需要排队音频.如果你太晚了,你会听到明显的文物. (6认同)

Chr*_*utz 5

查看Audacity。它是用C ++编写的跨平台(Linux,OS X和Windows)开源音频编辑器。我不知道您的GUI技能处于什么水平,但是处理音频工作的代码应该很容易与wxWidgets(GUI)代码区分开。


Iai*_*can 5

这里有很多好的建议。此外,我建议查看 Jack Audio Toolkit、JUCE 框架,并了解如何从 Csound 等综合库移植 C 代码。《音频编程书》对此也很有帮助。

关于 C 与 C++,我想你会发现在音频工作中,C++ 部分通常实际上只是用于代码管理的 chrome。DSP 位都是信号的低级程序数学,因此很可能是 C 调用,无论您使用 C 还是 C++,这方面都无关紧要。许多 C++ 音频项目本质上只是音频内核中的 C。

哈!