2011-01-26 91 views
16

在我的高中,我们可以参加一门课,我们基本上可以自己学习一个学科的课程。我想我想了解“声音编程”,但是我意识到我不知道这会带来什么。例如,我有兴趣了解合成器的工作原理以及声音如何在计算机科学中发挥作用。我真的想专注于低级代码部分,而不是组成部分。这是一个可行的主题?有没有对这个完全陌生的人有任何好的教程? 我知道C++并使用Windows。 this的第一个答案是我感兴趣的东西(虽然它超出了我的头)。我想学习音频编程

+1

糟糕,我不知道我必须这样做。感谢您的领导! – ahota 2011-01-26 06:07:19

回答

17

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

既然你提到的这两个“如何在计算机科学的声音作品”和“合成”,这是值得指出模拟之间的差别听起来采样声音合成的声音,因为它们是不同的概念。我会在这里简要解释一下。

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

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

模拟和采样声音都深深地挖掘出一个叫做的数字信号处理。谷歌周围,以了解它是什么感觉。它通常作为大学课程教授,所以如果你真的热衷于阅读一些幻灯片,甚至尝试一些较早,较简单的项目。

合成声音是适合于再现音乐曲目的表示,其中播放乐曲的乐器事先已知。把它看作电脑的乐谱。有人必须乐谱 - 你不能像模拟或采样声音一样记录它。这使得合成声音一个完全不同的表示模拟声音采样声音此外,计算机需要知道什么是乐器(如钢琴),以便它可以播放(合成)曲目。如果它不知道乐器,它会放弃或选择一个近似匹配(例如用电子琴替换钢琴)。我之前从未与合成器合作过,因此我无法评论他们的学习曲线。

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

编辑

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

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

+0

太棒了。你已经给我很多东西了。我一定会看看那本书! – ahota 2011-01-27 02:43:26

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。

1