你想象SC有多牛逼,它就比你想象的牛逼一万倍。
-∞. 想到什么说什么,绝对没关联,铁定有遗漏。记住,一切貌似神乎其神的高级玩意当你真正用心去了解学习之后,都不过如此。
-8. 从版本3.6开始,载入一个音频文件得这么写:
~chooston = Buffer.read(s, Platform.resourceDir +/+ "sounds/a11wlk01.wav");
之前的代码在3.6中是无效的。
-7. 从版本3.6开始,把鼠标输入位置放在代码块的圆括号里按下 command + enter 会自动执行括号内的全部内容,无需选中全部代码再执行。
-6. 搞清楚各个Ugen输出的值是多少是很重要的。这样你才好将它们当作控制来使用。
-5. SC对应 OS X 10.6 和 10.5 有不同的两个版本,下载前看清楚。3.6 版本后已通杀。
-4. 不要以为SC只能合成声音,它也可以做很屌的视频,玩音视互动并非必需需要借助第三方(比如Processing)来实现。因此,软件自带的范例有些是不会响的,不要为此感到诧异。
-3. 目前看来,与其说SC是一门“编程语言”,不如说它是代码化填空游戏,每个部件(在SC中被称为Unit Generator)的引数都可以用其他部件代替。代码看起来像模像样,难以辨识,但是一课课学下来你会发觉它比什么Processing之流简单很多。SC玩的是嵌套的艺术。思路清晰即可,不需要你有多高的智商。解读一段长代码更像是做一个长句翻译(比如说有很多of的英文长句,你需要把每个“of”的部分分块翻译出来先)。但是,为创建一个有趣的声音或音序,你需要扎实的声音原理理论知识的支撑。
-2. 如果你从别处粘贴了一堆代码到你本地的SC中,运行后出现错误,试着cmd+’ 高亮你的代码(3.6版本后代码已实现自动高亮),很多时候你会发觉SC把很多注释后的代码部分当作了注释。。这是由于换行不当或粘贴时的格式错误引起的。SC的代码高亮有四种颜色:红色是注释;蓝色是UGen;绿色是合成器定义可变参数;灰色是合成器定义的名称。3.6版本后,代码会自动高亮。
-1. 请在英文Mac系统下使用SC,因为在中文系统下,如果你的代码有bug,post窗口不但不会报错,而且将从此以后不再列印任何信息,除非你重启SC。另外我还发现一些功能在中文系统下运行异常。3.6版本后没有此限制。
-0.9. 版本3.6开启server两种方式:1. Command + B;2. 菜单栏:Language -> Boot Server
0. 在Win下使用SC,你可能需要配置几个东西,否则会无法使用,具体看本组置顶贴(3.6版本未测试)。
1. 最好的一本学习教材是一个名为 David Michael Cottle 的同志写的,现在正在这个博客连载翻译。英文原版 PDF 下载。
2. 第一本SC书籍于2011年4月由MIT出版发行,可通过 Amazon 购买。但在阅读这本书之前,还是推荐先阅读完上一条推荐的教材,这样读起来会更好理解一些。
3. 加入SC的邮件列表(具体见官网),里边有很多牛人和热心人会回答我们的各色愚蠢或高深的提问。这是一个非常活跃的邮件列表,自从加入它以后,我每天的邮箱都是满满的。
4. 再次强调运行一段代码使用fn+return(Mac)/Ctrl+回车(Win)而不是return。停止一段代码用cmd+句号键(Mac)/Alt+句号键(Win)。
5. SC面向对象的表现非常明显,你可以把每个UGen的引数看作一个个音频输入接口,你可以将每个UGen的引数用其他任意的UGen进行任意的插入替换。当你慢慢对它感到舒服之后,你就可以随意的瞎插乱插,捣鼓奇怪的声音了。这说起来很方便,但写出来,越来越多的嵌套同时也会慢慢让你崩溃,所以初学者可以用注明引数关键字的方式增加代码的可辨识度,例如:
{SinOsc.ar(400, 0, 0.5, 0)}.play; //等同于 {SinOsc.ar(freq:400, phase:0, mul:0.5, add:0)}.play;
但后者相对前者更容易辨识,尤其是在加入很多层嵌套之后。
6. 用硬件或具备GUI的软件合成器比对学习,你可以更直观的掌握诸如sustain, attack, release, decay等等关键参数的作用,虽说没有GUI的环境会逼迫你去掌握更牢固的合成器知识,但我认为“看得见”也是很重要的。当然,学到一定程度,你可以用SC自带的一些GUI来做这个事。不要认为SC就只有一个煞白的文本编辑窗口,它也有一些基本的GUI对象可供使用。
7. SC默认音频录制采样率是44.1KHz,比特深度32bit,立体声。如果你在向其他DAW导入这个文件时出现问题,有两个解决方案:i. 用格式转换软件转换其格式(Win下推荐Foobar,Mac下推荐Max,挺好用);ii. 修改Server.sc源文件里的比特深度为常规值(比如16bit)。
8. 选中对象后cmd+d(Mac)/F1(Win)可以查看它的帮助文档(在日后的学习中,你会发现你按下这个组合键的频率会非常的高),cmd+j可以查看它的源码。
9. ar = audio rate 音频率;kr = control rate 控制率。在需要生成音频时使用ar,因为它具有44.1K的采样率;在进行控制的时候,尽量使用kr,因为它的分辨率仅为ar的1/64,所以它更高效(更节省系统资源)。
10. 无论如何,搞清楚声音的一些基本原理,比如频率、振幅、相位等,尽管枯燥,但却对你理解和塑造声音大有裨益。
11. mul改变频率的振幅范围(scale),add控制频率的偏移率(offset),为什么要偏移一个频率?因为它的输出值可以作为某些UGen的引数,比如说频率。但如果不进行频偏的话,可能会得到负值。
12. 上边第五条中说的瞎插乱插是可以,但请注意不要插入负值。一个简单的方式是保持让mul的值小于add的值,或者这么来一下,保证得到的都是正值:
max(0, LFNoise1.kr(12))
13. EnvGen创建的值在0~1之间。
14. 用scope查看波形,用plot查看包络线。
15. 控制指的是通过一个UGen控制另一个UGen。
16. a~z为全局变量,并在SC启动后便被自动申明(因此你无需再重新申明它们),但是在你的patch慢慢变得复杂之后,你一定会后悔使用了它们,因为你没有使用一些更具指向性的变量名。
17. 一个函数将返回最后一行的结果,不管函数其他部分写了什么:
( 1 + 25; 1000 * 13 / 4; 1 + 1; 7; // 只会返回这行的值。其他的并无意义。 )
18. { }:函数,( ):代码块,[ ]:数组
19. 滤波:x轴控制截止频率,y轴控制滤波的范围(共鸣 = 频宽 / 截止频率)。
20. 一个做立体声极佳的方式就是将两个通道的声音分别写到一个数组中。这个数组有两个元素,第一个元素是左声道的声音,第二个元素是右声道的声音。如果你的声卡和外放支持更多的声道,你当然可以把它们都写到这个数组中。这手法有个专业名词:多通道扩展。
21. .scope:在sethoscope窗口内显示所有声道的波形;.scope(1):显示一个声道的波形;.scope(2):显示两个声道的波形;.scope(n):显示n个声道的波形。这是我自己尝试出来的,SC邮件列表里那帮逼没有简洁地回答我这个问题- –
22. 控制scope是蓝色的,音频scope是黄色的。
23. 执行顺序:输入然后输出。节点顺序:输入在尾,输出在头。
24. 在if表达式中,* 相当于和(and)。
25. arg x; 可以简写为|x|;“fuck” 可简写为 \fuck;dup(10) 可以简写为 !10。
26. 引用二维数组中某数组的方式(以索引4,5为例):
nPitchProb.at(4).at(5)
27. midicps 消息 可以将MIDI数转换为对应频率;cpsmidi 消息 可以将频率转换为对应MIDI数。
28. round 消息可以产生非连续的值。比如 round(100) 产生的值将保持为100的倍数,round(0.01) 产生的值将均为小数点后有两位的分数。
29. Win版停止一个patch的热键(Alt+.)与飞信打开新信息的热键冲突。解决办法,关闭飞信热键或改变那个热键的组合方式。
30. SC做算术的顺序是从左至右,完全忽略数学规则。因此在SC中:5+10*4=60,5+(10*4)=45。
31. 用波浪号(~)开头的变量为环境变量,比如 ~kbus1,是由用户自定义的。它可以在一个patch的任何地方,甚至其他patch,其他窗口里被使用。
32. SC 的布尔表达式:if(条件, {如果为真做什么}, {如果为假做什么})
33. 用 .poll 可以查看任意 UGen 的输出值。例如:
FSinOsc.kr(2).poll
谢谢你的分享,请问声音原理理论知识有什么入门建议嘛
就看有关 SC 的相关东西即可