我想学习音频编程

时间:2011-01-26 05:40:20

标签: audio signal-processing synthesis

在我的高中,我们可以参加一个课程,在那里我们基本上可以自学一个学期。我当时想要学习“声音编程”,但我意识到我不知道那会带来什么。我有兴趣了解一下合成器的工作原理以及声音在计算机科学中的作用。我真的想专注于低级代码部分,而不是组成部分。这是一个可行的主题吗?有什么好的教程可供那些全新的人使用吗? 我知道C ++并且正在使用Windows。 this中的第一个答案是让我感兴趣的东西(虽然它超出了我的想法)。

3 个答案:

答案 0 :(得分:22)

“声音编程”是一个非常广泛的领域。首先,它绝对是一个可行的主题,但由于你需要把东西塞进一个学期,你需要限制你的范围。我可以看到你正在寻找一个可以开始的地方,所以这里有一些让你思考的想法。

既然你已经提到“声音如何在计算机科学中起作用”和“合成器”,那么值得指出模拟声音采样声音之间的区别>合成声音,因为它们是不同的概念。我将在这里简要解释一下。

模拟声音是我们人类通常所解释的声音 - 人耳感受到的空气振动。您可以将声音视为一维信号,其中自变量是时间,因变量是振动幅度。模拟声音在时域和幅度域都是连续的。较旧的录音方法(例如磁带)使用模拟声音表示。模拟声音不常用于计算机(计算机不适合存储连续域数据),但理解模拟信号仍然很重要。如果沿着这条路走下去,期待看到大量的数学运算(例如复数,傅里叶变换)。

采样声音是声音表示,非常适合用计算机处理。人们最熟悉通过CD和其他音乐录音采样的声音。以某个频率(例如,44.1KHz用于CD记录)对模拟信号进行采样。因此,采样的声音信号在时域中是离散的。如果信号量化,那么它在幅度域中也将是离散的。像MP3这样的格式是采样格式。如果你有兴趣,可以在这个领域学习很多东西,例如恢复(去除静电等)和压缩(再次,编解码器MP3,Ogg Vorbis)。这很有趣,因为有很多可以试验和编写代码。

模拟声音和采样声音都深入到了一个叫做数字信号处理的领域。谷歌就是为了感受它的感受。它通常被教授为大学的课程,所以如果你真的很热衷,你可以看看一些讲座幻灯片,或者甚至尝试一些较早,较简单的项目。

合成声音是一种适合再现音乐曲目的表示,其中播放曲目的乐器事先已知。可以将其视为计算机的乐谱。有人必须乐谱 - 你不能只是像模拟或采样声音一样录制它。这使得合成声音模拟声音采样声音完全不同此外,计算机需要知道乐器是什么(例如钢琴)这样它就可以播放(合成)音轨。如果它不知道乐器,则放弃或选择近似匹配(例如用电子键盘替换钢琴)。我以前从未使用过合成器,所以我不能评论它们的学习曲线。

所以,根据我写的内容 - 选择一个你感兴趣的方向,谷歌,然后改进你的问题。

修改

一本好读的书是this。您可以查看亚马逊相关的标题并找到更新的东西,但自从我进行音频处理购物以来已经有一段时间了。

如果你还有半小时的时间,请看看video tutorial。它涵盖声音,图像和视频处理 - 它们实际上是密切相关的领域。

答案 1 :(得分:3)

考虑完成本书"Who Is Fourier?: A Mathematical Adventure"。您可以调整示例以进行演示基本概念的小编程任务。完成后,您应该能够使用fft在您发音元音a,e,i,o,u时制作语音的频谱图 - 识别每个元音的基频和共振峰。

我建议学习Python和模块NumPy, SciPy, and matplotlib(那里有很多,所以除了基础教程之外,你可以随时学习)。 iPython shell具有选项“-pylab -p scipy”,可以自动将最常用的工具导入到命名空间中。您可以使用PyAudio录制和播放音频。还有Pygame,它扩展了SDL(简单DirectMedia层),pyglet,它使用OpenAL(音频的OpenGL;它做3D音频和效果)。

对于C / C ++,有用于信号处理的IT ++,SPUC和FFTW,以及用于连接硬件和音频文件的SDL / SDL_mixer和OpenAL / ALmixer。

答案 2 :(得分:2)