<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>怪比软件学习笔记</title>
	<atom:link href="http://www.ccttours.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.ccttours.com/blog</link>
	<description>Processing, MaxMSP, AudioMulch, Field, SuperCollider</description>
	<lastBuildDate>Mon, 17 May 2010 08:24:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>SC：声音</title>
		<link>http://www.ccttours.com/blog/?p=1114</link>
		<comments>http://www.ccttours.com/blog/?p=1114#comments</comments>
		<pubDate>Mon, 17 May 2010 08:03:28 +0000</pubDate>
		<dc:creator>ww</dc:creator>
				<category><![CDATA[SuperCollider3二]]></category>
		<category><![CDATA[SC学习笔记]]></category>

		<guid isPermaLink="false">http://www.ccttours.com/blog/?p=1114</guid>
		<description><![CDATA[密度的峰谷 途经一个媒介密度的峰谷：这是声音的本性。声音或震动可以在任何材料上发生。震动是材料交互的压缩和解压缩：就像池塘表面的涟漪。峰意味着更高的密度，谷则是更低的密度。当声音被生成（假设从一个扬声器），前移的动作创造波峰，后退的动作创造波谷。前移压缩空气，后退解压之。 模式，噪音，周期 我们在自然环境中被各种模式包围。事实上，我想不出有什么不包含任何周期元素的自然进程（就算是那些不产生声音的）：鸟、海浪、闪电、月相，等等。具备重复模式的声音被说成是具周期性的。每次重复即一个周期或一个循环。具有我们很难辨识的复杂模式的波是非周期性的。声音范围从完美周期到极端非周期的是连续的，声音在那个连续的过程中的任何地方都有可能减弱。 我们同样可以用眼睛看到模式并将它们解释为脸、树、草等等。我们用基本一致的方式解释声音。我们找寻模式或结构，并用诸如小提琴、飞机、急流等真实的现象与那个模式匹配。下边是三种不同周期的波的图示。第一个有很清晰的模式，第二个较复杂，但仍透露着一定模式，第三个看起来则全无模式可言。 具备周期波模式的声音听起来或多或少都像乐音。模式越清晰，音的特点便越清晰。模式的缺乏，将接近噪音。我说“接近”因为纯粹的噪音是理论上的抽象概念，就像无穷。这我们稍后再说。在电子创作和合成领域，噪音即没有明显模式的波。（对于录音室师来说，噪音是任何不想要的声音） 一秒内波完成其周期的次数即波的频率，用赫兹表示，或循环。 频率 频率是声音的第一维。它是一个周期波每秒循环的次数。在音乐上，频率与音高等同。频率的物理范例是琴弦或乐器身体的震动。钢琴上的中央C的频率大概每秒261次循环。钢琴最低音大概50Hz（赫兹 = 每秒的循环），最高音大概4000Hz。人类能听到20kHz那么高的音。听觉能力的低档需要条件。我们可以听到频率低至每秒一次脉动，甚至每小时一次或一年一次的边缘锋利的波。我们同样可以感觉到频率低至每分钟1次的平滑波。但脉动开始混合为一个同质（homogenous）音的点，便是绝大多数课本认为的听觉低档。因此，就算理论上，并不存在可听频率的低限，音开始于大概20Hz。我们通过缩短一根弦，增加震动体的能量，或绷紧我们的声带以改变频率。 旋律由连贯的频率构成。和声是同时发生的频率。如果基于数学联系起来，那么频率听上去便像音乐一般。我们用音程形容这些联系，使用比如八度，五分之一，小三等等这些条款。音程不是绝对的，而是相对的。（绝对测量的例子是1英尺，1升，1盎司。相对测量是两倍远，一半多，五分之三）因此音程，并不是频率的特定区别，而是基于一个给定频率关系的计算：2倍高，1.5倍高。以Hz的实际距离随开启点改变。在440之上的一个八度（2:1比率）是880（2×440）：440Hz的一个不同。但1200之上的一个八度是2400，1200的一个不同。比率稍后详述。 相位 周期波同样可以依相位度数进行测量。相位描述在循环内波进行的远近：就像月相。波从0度开始，180度是循环的一半，360度是一个完整的循环。一个波的相位改变常常不会影响我们如何感知声音。但相位一定会影响两个波的相互作用。 振幅 声音的第二维度是振幅，即峰的高度和谷的深度。音乐上，振幅的等价物是音量。振幅的物理范例即扬声器椎体的前后移动。振幅的测量以db（分贝）表示。我们通过用更大的能量推动震动体来增加振幅。 我们以db测量声音。像音程，分贝测量相对振幅，而不是绝对的：没有刚好10db的东西，但可以比原来高10db，或者你可以降低振幅10分贝。说一架喷射机引擎120db是不准确的，但你可以说它比沙沙的树叶声高120db。 概括地说，你可以接受的最静的与最响的声音间的差值是120db。动态的一级（比如，中强到强）大概7db。 和声结构 和声结构，声音第三维，是上部和声（upper harmonic）的存在和力量。音乐上，和声结构的等价物是音色。音色的图形表述是波形。总体来说，亮的声音，峰谷将具有更锋利的边缘。暗的声音将具有更平滑的形状。明白我们听到的确定频率的声音常常是那个音及其倍数的混合物：一系列可以跨越2000Hz的频率。越亮的声音将具备更多这些更高的频率（更宽的范围），越暗的则越少。 没有用于音色的标准测量。我们用运唇法、吹奏的角度、我们的嘴形、更换乐器来改变音色。 下面的图释（竖线是频率）展示了钢琴、尼龙弦吉他、合唱（数码）和铃在同一振幅下演奏同一个音。它们的区别仅是音色，这是上层和声结构的一个例证。 声音属性：速度和波长 声音的速度依靠温度、海拔和大气密度，但在这个类里边，你可以使用每秒1000尺，每.1秒100尺，每.01秒10尺。一个波的长度由速率或速度除以频率计算，因此它同样依靠气候状况。但如果我们使用每秒1000尺，一个100Hz的波（大概是G3，适于男声演唱的调）大概是10尺（1000/100）。1000Hz的波（大概是C6，女高音及许多乐器的上层范围）大概1尺（1000/1000）。音A 440大概2.2尺（1000/440）。波长和速度对弄懂回声、混响、相位取消、适当的麦克风和扬声器放置都很重要。 乐器表现力 绝大多数乐器都可以控制这三个维度。改变它们也便使得乐器更富表现力。越多的控制和潜在改变，乐器表现力越强。比如说，钢琴长时间以来被认为是主要的乐器，因为它允许演奏者控制和改变振幅，因此增加了它的表现力。键盘合成器当它们包括了加权和压感按键时进行了一次跃进。 人声具备对于振幅和调的精确控制。但它在音色上的控制比任何乐器都强。它是如此精确和多变，它不仅能交流音乐方面的想法（音符，和弦，旋律），而且还能交流复杂和准确的哲学、宗教、情感和爱国的观点：音色的改变构成演讲。 语言是音色修正的典型。所有演说来自我们对嘴、舌、鼻腔的塑形以改变上层和声的动作。除了演说，不同的人声也由上层和声的存在和力度决定。 上图是一个女人说&#8221;four score and seven years.&#8221;时的频谱。X轴是时间，Y轴是频率。图的开始随发音在12800 Hz, 6400, 3200, 1600, 800, 400, 200, 和 100闪动。“s”在6400～12800的范围。元音是200～1600间的肥厚肋状物。注意元音实际上是由互相联系的频段构成的。seven和years中的“e”有更高的频段。注意发“r”音时，当麦克靠近她的嘴时，上层和音的改变。 增加、移除，或改变上层和声的振幅将改变波形进而改变音色。更多的和声将造就一个更锋利的波，并将得到更亮的声音。 下边的图释展示了上述三种不同属性的波形。第一个比第二个响。第二个比第一、第三个的音更高。第三个在其相位中的180度。第四个将比其他的更亮。最后一个是复杂的周期波的例子。 Related posts:SC：数字音乐语言 我现在正在想一段旋律。为交流这段旋律我能怎么做呢？如果你坐我旁边我可以唱给你听。不仅因为你认识音，而且你还很可能立马回忆起1960情节喜剧中的角色。但因为你不在这里，我将不得不选择其他的语言。如下： 00111100, 00111110, 00111111, 00111100 01000010 不明白? [...]


Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1108' rel='bookmark' title='Permanent Link: SC：数字音乐'>SC：数字音乐</a><small>语言 我现在正在想一段旋律。为交流这段旋律我能怎么做呢？如果你坐我旁边我可以唱给你听。不仅因为你认识音，而且你还很可能立马回忆起1960情节喜剧中的角色。但因为你不在这里，我将不得不选择其他的语言。如下： 00111100, 00111110, 00111111, 00111100 01000010 不明白? 那这个呢: 0000003C,...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1101' rel='bookmark' title='Permanent Link: SC：Macintosh OS X (&#8220;Ten&#8221;), Tiger'>SC：Macintosh OS X (&#8220;Ten&#8221;), Tiger</a><small>为什么用Mac？ 不同操作系统的区别并非拼读那么简单。使用Linux, Windows, Unix, 或 OS X存在着有根据的讨论。我们的实验室是基于Mac建立的。我所工作过的所有大学的实验室以及专业的工作室都使用Mac。这并不意味着你应该拥有一台，但你应该知道我们为什么使用它们。 一个原因是惯例与忠诚。在个人电脑时代早期，Apple是艺术类和大学程序的领军者。他们继续着这个传统。 另一原因是兼容性。Mac倾向于支持更多的文件格式，包括IBM。对我以及我观察到的学生来说，让我去解释一个学生的Windows文档比让他们使用我这里的东西要简单得多。如果你的家用电脑也是Mac，当你在实验室与你的私人电脑间来或折腾时，你将会碰到更少的问题。 设置更简单。连接到一个第二显示器或录像放映机，读取U盘，建立摄像头，管理网络连接（你仅需要放着他们开启，然后它会找到信号最强的那个），一切都是自动完成。屡次三番，在我能简单的插上然后播放的时候，看到三个PC技术员面对一个连接搔着他们后脑勺。IBM的安装介绍通常是4页纸，但对Mac来说是：1）连接USB线到你的Mac计算机。2）你现在即可使用你的USB设备。...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1094' rel='bookmark' title='Permanent Link: SC：介绍，音乐技术'>SC：介绍，音乐技术</a><small>译者序 OK，这是SC系列的第二部教程，非常全面深入，适用于SC重度（中毒）患者。来自David Michael Cottle写的Computer Music with examples in SuperCollider 3。它在SC官网以及其他（我所能找到的）地方的链接已经无法打开，要取得这本教材，你可以给他发信（d.cottle@utah.edu），说明你是干嘛的，为什么想学SC就可以了。因为这是他的一个希望，出于尊重他的想法，我就不上传这份教程了。起初我翻译了这本书部分我认为重要的段落，但后边越来越觉得这是一本不可多得的好书，于是决定做全书的翻译。绝大部分内容（尤其是后半部分）现已翻译完毕，等我慢慢更新。希望各位学习愉快。...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h3>密度的峰谷</h3>
<p>途经一个媒介密度的峰谷：这是声音的本性。声音或震动可以在任何材料上发生。震动是材料交互的压缩和解压缩：就像池塘表面的涟漪。峰意味着更高的密度，谷则是更低的密度。当声音被生成（假设从一个扬声器），前移的动作创造波峰，后退的动作创造波谷。前移压缩空气，后退解压之。</p>
<p><span id="more-1114"></span></p>
<h3>模式，噪音，周期</h3>
<p>我们在自然环境中被各种模式包围。事实上，我想不出有什么不包含任何周期元素的自然进程（就算是那些不产生声音的）：鸟、海浪、闪电、月相，等等。具备重复模式的声音被说成是具周期性的。每次重复即一个周期或一个循环。具有我们很难辨识的复杂模式的波是非周期性的。声音范围从完美周期到极端非周期的是连续的，声音在那个连续的过程中的任何地方都有可能减弱。</p>
<p>我们同样可以用眼睛看到模式并将它们解释为脸、树、草等等。我们用基本一致的方式解释声音。我们找寻模式或结构，并用诸如小提琴、飞机、急流等真实的现象与那个模式匹配。下边是三种不同周期的波的图示。第一个有很清晰的模式，第二个较复杂，但仍透露着一定模式，第三个看起来则全无模式可言。</p>
<div id="attachment_1115" class="wp-caption aligncenter" style="width: 488px"><a href="http://www.ccttours.com/blog/wp-content/uploads/2010/05/1.gif" rel="lightbox[1114]"><img class="size-full wp-image-1115  " title="波形：周期波，复杂模式，无模式" src="http://www.ccttours.com/blog/wp-content/uploads/2010/05/1.gif" alt="波形" width="478" height="264" /></a><p class="wp-caption-text">波形：周期波，复杂模式，无模式</p></div>
<p>具备周期波模式的声音听起来或多或少都像乐音。模式越清晰，音的特点便越清晰。模式的缺乏，将接近噪音。我说“接近”因为纯粹的噪音是理论上的抽象概念，就像无穷。这我们稍后再说。在电子创作和合成领域，噪音即没有明显模式的波。（对于录音室师来说，噪音是任何不想要的声音）</p>
<p>一秒内波完成其周期的次数即波的频率，用赫兹表示，或循环。</p>
<h3>频率</h3>
<p>频率是声音的第一维。它是一个周期波每秒循环的次数。在音乐上，频率与音高等同。频率的物理范例是琴弦或乐器身体的震动。钢琴上的中央C的频率大概每秒261次循环。钢琴最低音大概50Hz（赫兹 = 每秒的循环），最高音大概4000Hz。人类能听到20kHz那么高的音。听觉能力的低档需要条件。我们可以听到频率低至每秒一次脉动，甚至每小时一次或一年一次的边缘锋利的波。我们同样可以感觉到频率低至每分钟1次的平滑波。但脉动开始混合为一个同质（homogenous）音的点，便是绝大多数课本认为的听觉低档。因此，就算理论上，并不存在可听频率的低限，音开始于大概20Hz。我们通过缩短一根弦，增加震动体的能量，或绷紧我们的声带以改变频率。</p>
<p>旋律由连贯的频率构成。和声是同时发生的频率。如果基于数学联系起来，那么频率听上去便像音乐一般。我们用音程形容这些联系，使用比如八度，五分之一，小三等等这些条款。音程不是绝对的，而是相对的。（绝对测量的例子是1英尺，1升，1盎司。相对测量是两倍远，一半多，五分之三）因此音程，并不是频率的特定区别，而是基于一个给定频率关系的计算：2倍高，1.5倍高。以Hz的实际距离随开启点改变。在440之上的一个八度（2:1比率）是880（2×440）：440Hz的一个不同。但1200之上的一个八度是2400，1200的一个不同。比率稍后详述。</p>
<h3>相位</h3>
<p>周期波同样可以依相位度数进行测量。相位描述在循环内波进行的远近：就像月相。波从0度开始，180度是循环的一半，360度是一个完整的循环。一个波的相位改变常常不会影响我们如何感知声音。但相位一定会影响两个波的相互作用。</p>
<h3>振幅</h3>
<p>声音的第二维度是振幅，即峰的高度和谷的深度。音乐上，振幅的等价物是音量。振幅的物理范例即扬声器椎体的前后移动。振幅的测量以db（分贝）表示。我们通过用更大的能量推动震动体来增加振幅。</p>
<p>我们以db测量声音。像音程，分贝测量相对振幅，而不是绝对的：没有刚好10db的东西，但可以比原来高10db，或者你可以降低振幅10分贝。说一架喷射机引擎120db是不准确的，但你可以说它比沙沙的树叶声高120db。</p>
<p>概括地说，你可以接受的最静的与最响的声音间的差值是120db。动态的一级（比如，中强到强）大概7db。</p>
<h3>和声结构</h3>
<p>和声结构，声音第三维，是上部和声（upper harmonic）的存在和力量。音乐上，和声结构的等价物是音色。音色的图形表述是波形。总体来说，亮的声音，峰谷将具有更锋利的边缘。暗的声音将具有更平滑的形状。明白我们听到的确定频率的声音常常是那个音及其倍数的混合物：一系列可以跨越2000Hz的频率。越亮的声音将具备更多这些更高的频率（更宽的范围），越暗的则越少。</p>
<p>没有用于音色的标准测量。我们用运唇法、吹奏的角度、我们的嘴形、更换乐器来改变音色。</p>
<p>下面的图释（竖线是频率）展示了钢琴、尼龙弦吉他、合唱（数码）和铃在同一振幅下演奏同一个音。它们的区别仅是音色，这是上层和声结构的一个例证。</p>
<div id="attachment_1116" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.ccttours.com/blog/wp-content/uploads/2010/05/2.gif" rel="lightbox[1114]"><img class="size-full wp-image-1116" title="频率图表" src="http://www.ccttours.com/blog/wp-content/uploads/2010/05/2.gif" alt="频率图表" width="500" height="239" /></a><p class="wp-caption-text">频率图表</p></div>
<h3>声音属性：速度和波长</h3>
<p>声音的速度依靠温度、海拔和大气密度，但在这个类里边，你可以使用每秒1000尺，每.1秒100尺，每.01秒10尺。一个波的长度由速率或速度除以频率计算，因此它同样依靠气候状况。但如果我们使用每秒1000尺，一个100Hz的波（大概是G3，适于男声演唱的调）大概是10尺（1000/100）。1000Hz的波（大概是C6，女高音及许多乐器的上层范围）大概1尺（1000/1000）。音A 440大概2.2尺（1000/440）。波长和速度对弄懂回声、混响、相位取消、适当的麦克风和扬声器放置都很重要。</p>
<h3>乐器表现力</h3>
<p>绝大多数乐器都可以控制这三个维度。改变它们也便使得乐器更富表现力。越多的控制和潜在改变，乐器表现力越强。比如说，钢琴长时间以来被认为是主要的乐器，因为它允许演奏者控制和改变振幅，因此增加了它的表现力。键盘合成器当它们包括了加权和压感按键时进行了一次跃进。</p>
<p>人声具备对于振幅和调的精确控制。但它在音色上的控制比任何乐器都强。它是如此精确和多变，它不仅能交流音乐方面的想法（音符，和弦，旋律），而且还能交流复杂和准确的哲学、宗教、情感和爱国的观点：音色的改变构成演讲。</p>
<p>语言是音色修正的典型。所有演说来自我们对嘴、舌、鼻腔的塑形以改变上层和声的动作。除了演说，不同的人声也由上层和声的存在和力度决定。</p>
<div id="attachment_1117" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.ccttours.com/blog/wp-content/uploads/2010/05/3.gif" rel="lightbox[1114]"><img class="size-full wp-image-1117" title="演讲频谱" src="http://www.ccttours.com/blog/wp-content/uploads/2010/05/3.gif" alt="演讲频谱" width="500" height="231" /></a><p class="wp-caption-text">演讲频谱</p></div>
<p>上图是一个女人说&#8221;four score and seven years.&#8221;时的频谱。X轴是时间，Y轴是频率。图的开始随发音在12800 Hz, 6400, 3200, 1600, 800, 400, 200, 和 100闪动。“s”在6400～12800的范围。元音是200～1600间的肥厚肋状物。注意元音实际上是由互相联系的频段构成的。seven和years中的“e”有更高的频段。注意发“r”音时，当麦克靠近她的嘴时，上层和音的改变。</p>
<p>增加、移除，或改变上层和声的振幅将改变波形进而改变音色。更多的和声将造就一个更锋利的波，并将得到更亮的声音。</p>
<p>下边的图释展示了上述三种不同属性的波形。第一个比第二个响。第二个比第一、第三个的音更高。第三个在其相位中的180度。第四个将比其他的更亮。最后一个是复杂的周期波的例子。</p>
<div id="attachment_1118" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.ccttours.com/blog/wp-content/uploads/2010/05/4.gif" rel="lightbox[1114]"><img class="size-full wp-image-1118" title="振幅、频率、音色、相位图形化表述" src="http://www.ccttours.com/blog/wp-content/uploads/2010/05/4.gif" alt="振幅、频率、音色、相位图形化表述" width="500" height="354" /></a><p class="wp-caption-text">振幅、频率、音色、相位图形化表述</p></div>


<p>Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1108' rel='bookmark' title='Permanent Link: SC：数字音乐'>SC：数字音乐</a><small>语言 我现在正在想一段旋律。为交流这段旋律我能怎么做呢？如果你坐我旁边我可以唱给你听。不仅因为你认识音，而且你还很可能立马回忆起1960情节喜剧中的角色。但因为你不在这里，我将不得不选择其他的语言。如下： 00111100, 00111110, 00111111, 00111100 01000010 不明白? 那这个呢: 0000003C,...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1101' rel='bookmark' title='Permanent Link: SC：Macintosh OS X (&#8220;Ten&#8221;), Tiger'>SC：Macintosh OS X (&#8220;Ten&#8221;), Tiger</a><small>为什么用Mac？ 不同操作系统的区别并非拼读那么简单。使用Linux, Windows, Unix, 或 OS X存在着有根据的讨论。我们的实验室是基于Mac建立的。我所工作过的所有大学的实验室以及专业的工作室都使用Mac。这并不意味着你应该拥有一台，但你应该知道我们为什么使用它们。 一个原因是惯例与忠诚。在个人电脑时代早期，Apple是艺术类和大学程序的领军者。他们继续着这个传统。 另一原因是兼容性。Mac倾向于支持更多的文件格式，包括IBM。对我以及我观察到的学生来说，让我去解释一个学生的Windows文档比让他们使用我这里的东西要简单得多。如果你的家用电脑也是Mac，当你在实验室与你的私人电脑间来或折腾时，你将会碰到更少的问题。 设置更简单。连接到一个第二显示器或录像放映机，读取U盘，建立摄像头，管理网络连接（你仅需要放着他们开启，然后它会找到信号最强的那个），一切都是自动完成。屡次三番，在我能简单的插上然后播放的时候，看到三个PC技术员面对一个连接搔着他们后脑勺。IBM的安装介绍通常是4页纸，但对Mac来说是：1）连接USB线到你的Mac计算机。2）你现在即可使用你的USB设备。...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1094' rel='bookmark' title='Permanent Link: SC：介绍，音乐技术'>SC：介绍，音乐技术</a><small>译者序 OK，这是SC系列的第二部教程，非常全面深入，适用于SC重度（中毒）患者。来自David Michael Cottle写的Computer Music with examples in SuperCollider 3。它在SC官网以及其他（我所能找到的）地方的链接已经无法打开，要取得这本教材，你可以给他发信（d.cottle@utah.edu），说明你是干嘛的，为什么想学SC就可以了。因为这是他的一个希望，出于尊重他的想法，我就不上传这份教程了。起初我翻译了这本书部分我认为重要的段落，但后边越来越觉得这是一本不可多得的好书，于是决定做全书的翻译。绝大部分内容（尤其是后半部分）现已翻译完毕，等我慢慢更新。希望各位学习愉快。...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ccttours.com/blog/?feed=rss2&amp;p=1114</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SC：数字音乐</title>
		<link>http://www.ccttours.com/blog/?p=1108</link>
		<comments>http://www.ccttours.com/blog/?p=1108#comments</comments>
		<pubDate>Fri, 07 May 2010 09:47:31 +0000</pubDate>
		<dc:creator>ww</dc:creator>
				<category><![CDATA[SuperCollider3二]]></category>
		<category><![CDATA[SC学习笔记]]></category>

		<guid isPermaLink="false">http://www.ccttours.com/blog/?p=1108</guid>
		<description><![CDATA[语言 我现在正在想一段旋律。为交流这段旋律我能怎么做呢？如果你坐我旁边我可以唱给你听。不仅因为你认识音，而且你还很可能立马回忆起1960情节喜剧中的角色。但因为你不在这里，我将不得不选择其他的语言。如下： 00111100, 00111110, 00111111, 00111100 01000010 不明白? 那这个呢: 0000003C, 0000003E, 0000003F, 0000003C, 00000042 或者 60, 62, 63, 60, 66 或者这个: 261.62, 293.66, 311.13, 261.62, 370; 或 C4, D4, Eb4, C4, F#4 仍然不太确定? 那这个怎么样: 几乎没人认识第一种（二进制）。仅有少量的有过音乐培训背景的程序员懂得接下来的两个（十六进制，和MIDI），钢琴调音师知道261.6，绝大多数受过教育的音乐家知道音高类方法（C4）或中音谱号，绝大多数业余音乐人知道高音谱号，然后所有人，可能甚至在房间里漫游的其他物种，懂得唱歌的音。 一种高阶的语言具备更大的广泛性，低阶的广泛性更小。在电脑语言中，低阶意味着计算机懂、但人类很难懂的语言。即二进制数字的情况。高阶语言更易于被人类使用。即目前和十进数一样的编程语言。音乐科技依赖语言。如果你懂得更多低阶语言，你的作品将变得更好。同时你并不需要依二进制交流音乐，或者来回地进行转换，你会偶尔看到十六进制，常使用MIDI和频率，因此你应当懂得那些。 十六进制，MIDI数字 基于10，我们使用10个符号表明数量；0到9。在用光所有符号后，我们具备这个开启一个新列并循环第一列的更聪明的系统。车轮滚动带动里程表是一个对此很好的例证。当最右边的轮子滚到9，然后又再次归0。它左边的轮子向前滚动一格，从0到1，表明第一个轮子已经完全的转了一周一次。每列代表总数。在十进制系统内，每个轮子有十个符号，因此第二个轮子上的5意味着第一个轮子转了5次，因此是5个十的集合。数字562代表5个100，6个10，和2个1。（我们均直观的得到这个，但反复细致的重申这个方法将引导我们到十六进制数字。） 二进制数字使用同样的系统，但仅有两个符号：0和1。从右边数第三列的1代表右起第一、二列已经走了一次。由于我们仅使用两个符号，第一列代表1们，第二列2们，第三列8们，等等。因此数字1101意味着8们的一个，4们的一个，0个2们，和一个1（十进制为：13）。 十六进制基于16，因此需要使用16个符号。可视化一个相似的里程表但替代每个轮子上的0到9的是0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, 和 [...]


Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1114' rel='bookmark' title='Permanent Link: SC：声音'>SC：声音</a><small>密度的峰谷 途经一个媒介密度的峰谷：这是声音的本性。声音或震动可以在任何材料上发生。震动是材料交互的压缩和解压缩：就像池塘表面的涟漪。峰意味着更高的密度，谷则是更低的密度。当声音被生成（假设从一个扬声器），前移的动作创造波峰，后退的动作创造波谷。前移压缩空气，后退解压之。 模式，噪音，周期 我们在自然环境中被各种模式包围。事实上，我想不出有什么不包含任何周期元素的自然进程（就算是那些不产生声音的）：鸟、海浪、闪电、月相，等等。具备重复模式的声音被说成是具周期性的。每次重复即一个周期或一个循环。具有我们很难辨识的复杂模式的波是非周期性的。声音范围从完美周期到极端非周期的是连续的，声音在那个连续的过程中的任何地方都有可能减弱。 我们同样可以用眼睛看到模式并将它们解释为脸、树、草等等。我们用基本一致的方式解释声音。我们找寻模式或结构，并用诸如小提琴、飞机、急流等真实的现象与那个模式匹配。下边是三种不同周期的波的图示。第一个有很清晰的模式，第二个较复杂，但仍透露着一定模式，第三个看起来则全无模式可言。 具备周期波模式的声音听起来或多或少都像乐音。模式越清晰，音的特点便越清晰。模式的缺乏，将接近噪音。我说“接近”因为纯粹的噪音是理论上的抽象概念，就像无穷。这我们稍后再说。在电子创作和合成领域，噪音即没有明显模式的波。（对于录音室师来说，噪音是任何不想要的声音） 一秒内波完成其周期的次数即波的频率，用赫兹表示，或循环。 频率 频率是声音的第一维。它是一个周期波每秒循环的次数。在音乐上，频率与音高等同。频率的物理范例是琴弦或乐器身体的震动。钢琴上的中央C的频率大概每秒261次循环。钢琴最低音大概50Hz（赫兹 =...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1101' rel='bookmark' title='Permanent Link: SC：Macintosh OS X (&#8220;Ten&#8221;), Tiger'>SC：Macintosh OS X (&#8220;Ten&#8221;), Tiger</a><small>为什么用Mac？ 不同操作系统的区别并非拼读那么简单。使用Linux, Windows, Unix, 或 OS X存在着有根据的讨论。我们的实验室是基于Mac建立的。我所工作过的所有大学的实验室以及专业的工作室都使用Mac。这并不意味着你应该拥有一台，但你应该知道我们为什么使用它们。 一个原因是惯例与忠诚。在个人电脑时代早期，Apple是艺术类和大学程序的领军者。他们继续着这个传统。 另一原因是兼容性。Mac倾向于支持更多的文件格式，包括IBM。对我以及我观察到的学生来说，让我去解释一个学生的Windows文档比让他们使用我这里的东西要简单得多。如果你的家用电脑也是Mac，当你在实验室与你的私人电脑间来或折腾时，你将会碰到更少的问题。 设置更简单。连接到一个第二显示器或录像放映机，读取U盘，建立摄像头，管理网络连接（你仅需要放着他们开启，然后它会找到信号最强的那个），一切都是自动完成。屡次三番，在我能简单的插上然后播放的时候，看到三个PC技术员面对一个连接搔着他们后脑勺。IBM的安装介绍通常是4页纸，但对Mac来说是：1）连接USB线到你的Mac计算机。2）你现在即可使用你的USB设备。...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1094' rel='bookmark' title='Permanent Link: SC：介绍，音乐技术'>SC：介绍，音乐技术</a><small>译者序 OK，这是SC系列的第二部教程，非常全面深入，适用于SC重度（中毒）患者。来自David Michael Cottle写的Computer Music with examples in SuperCollider 3。它在SC官网以及其他（我所能找到的）地方的链接已经无法打开，要取得这本教材，你可以给他发信（d.cottle@utah.edu），说明你是干嘛的，为什么想学SC就可以了。因为这是他的一个希望，出于尊重他的想法，我就不上传这份教程了。起初我翻译了这本书部分我认为重要的段落，但后边越来越觉得这是一本不可多得的好书，于是决定做全书的翻译。绝大部分内容（尤其是后半部分）现已翻译完毕，等我慢慢更新。希望各位学习愉快。...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h3>语言</h3>
<p>我现在正在想一段旋律。为交流这段旋律我能怎么做呢？如果你坐我旁边我可以唱给你听。不仅因为你认识音，而且你还很可能立马回忆起1960情节喜剧中的角色。但因为你不在这里，我将不得不选择其他的语言。如下：</p>
<p><span id="more-1108"></span></p>
<p>00111100, 00111110, 00111111, 00111100 01000010</p>
<p>不明白? 那这个呢:</p>
<p>0000003C, 0000003E, 0000003F, 0000003C, 00000042</p>
<p>或者</p>
<p>60, 62, 63, 60, 66</p>
<p>或者这个: 261.62, 293.66, 311.13, 261.62, 370; 或 C4, D4, Eb4, C4, F#4</p>
<p>仍然不太确定? 那这个怎么样:</p>
<div id="attachment_1109" class="wp-caption aligncenter" style="width: 544px"><a href="http://www.ccttours.com/blog/wp-content/uploads/2010/05/note.gif" rel="lightbox[1108]"><img class="size-full wp-image-1109" title="五线谱" src="http://www.ccttours.com/blog/wp-content/uploads/2010/05/note.gif" alt="note" width="534" height="70" /></a><p class="wp-caption-text">五线谱</p></div>
<p>几乎没人认识第一种（二进制）。仅有少量的有过音乐培训背景的程序员懂得接下来的两个（十六进制，和MIDI），钢琴调音师知道261.6，绝大多数受过教育的音乐家知道音高类方法（C4）或中音谱号，绝大多数业余音乐人知道高音谱号，然后所有人，可能甚至在房间里漫游的其他物种，懂得唱歌的音。</p>
<p>一种高阶的语言具备更大的广泛性，低阶的广泛性更小。在电脑语言中，低阶意味着计算机懂、但人类很难懂的语言。即二进制数字的情况。高阶语言更易于被人类使用。即目前和十进数一样的编程语言。音乐科技依赖语言。如果你懂得更多低阶语言，你的作品将变得更好。同时你并不需要依二进制交流音乐，或者来回地进行转换，你会偶尔看到十六进制，常使用MIDI和频率，因此你应当懂得那些。</p>
<h3>十六进制，MIDI数字</h3>
<p>基于10，我们使用10个符号表明数量；0到9。在用光所有符号后，我们具备这个开启一个新列并循环第一列的更聪明的系统。车轮滚动带动里程表是一个对此很好的例证。当最右边的轮子滚到9，然后又再次归0。它左边的轮子向前滚动一格，从0到1，表明第一个轮子已经完全的转了一周一次。每列代表总数。在十进制系统内，每个轮子有十个符号，因此第二个轮子上的5意味着第一个轮子转了5次，因此是5个十的集合。数字562代表5个100，6个10，和2个1。（我们均直观的得到这个，但反复细致的重申这个方法将引导我们到十六进制数字。）</p>
<p>二进制数字使用同样的系统，但仅有两个符号：0和1。从右边数第三列的1代表右起第一、二列已经走了一次。由于我们仅使用两个符号，第一列代表1们，第二列2们，第三列8们，等等。因此数字1101意味着8们的一个，4们的一个，0个2们，和一个1（十进制为：13）。</p>
<p>十六进制基于16，因此需要使用16个符号。可视化一个相似的里程表但替代每个轮子上的0到9的是0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, 和 F。进程和动作是一致的。因此里程表会旋转每个轮子但超过9，一直到F。在这种情况下，如果右边第二个轮子是5，即第一个轮子完全滚动了5次。但第一个轮子不包含10个项目，而是16，因此5意味着5个16。第三列代表256的组，第四列，4096，等等。为什么存在十六进制？你可以用更少的符号表示更高的数字。与十六进制E63F1等同的十进制是943089。另外的原因是，计算机在本质上每只手有8个手指，因此它们学着基于16计算而不是10（不是开玩笑）。你可能永远不需要将十六进制转换到十进制，但你应该知道如何计数。跟随8A6EF的应是8A6F0，然后是8A6F1，8A6F2，等等。一直到8A6F9，8A6FA, 8A6FB, 8A6FC, 8A6FD, 8A6FE, 8A6FF, 然后是 8A700。</p>
<p>MIDI是我在上例中使用的另一系统。你将很经常的与MIDI数遭遇，但它们更容易懂：每半步（half step）是一个数字，因此每个八度有12个数字。音乐家使用的最低音是C-1，它的MIDI数为0。数字12 = C0, 24 = C1, 36 = C2, 48 = C3, 60 = C4（钢琴上的中央C，记住它），等等。A 440高于中央C，因此它是69。</p>
<p>音程是同样的：每个数字半步。0是同度，2是一整步，4是一个三分之一，7是一个五分之一，等等。如果你没有接受过音乐训练，那么这个系统实际上比大、小调，增、减和弦系统要简单。</p>
<p>我们稍后会讲频率。</p>
<h3>文件格式</h3>
<p>欲在数字领域交流，要求你懂得音频文件格式，这也是语言的一类，同样分高、低阶。每种都适用于不同的情况。以下是我常用的文件格式：MIDI, NIFF, XML, JPG, PDF, AIFF, WAV, SDII, 和 MP3。</p>
<h4>MIDI：80年代流行标准</h4>
<p>首先是MIDI，这是乐器数字接口（Musical Instrument Digital Interface）的英文缩写。这是80年代合成器厂商一致同意的标准。它允许两个音乐组件或程序彼此沟通。</p>
<p>MIDI有四个不足：1）MIDI不是声音。它仅是演奏声音的向导：开始，结束时间，音量，乐器和通道，等等。真正的声音，是由接收到命令的合成器生成的。MIDI类似于钢琴卷帘窗：如果没有钢琴的话，它就是废物。2）MIDI文件不包含文件信息。没有音调符号、拍子记号、权衡分切（measure division），或者五线谱。3）MIDI文档以一个非常低阶、模糊的语言写就。你无法在任何文本程序内打开它和搞清数据的意思。读写MIDI文件仅仅是资深程序员的任务。4）它将很快被替代掉。</p>
<p>当然，MIDI也有很多优点。1）它的编辑简单。因为它并非实际的声音，而是创造声音的向导，单独音符的长度、音头时间、释放，或音高可被调整。2）它允许灵活的配器。一轨单独的MIDI可以在一次录音内用大号演绎，下一次用低音提琴演绎。3）它被广泛接受。4）文件大小。因为几乎所有后90年代的电子设备懂得MIDI并且实际的声音是在本地机器上生成，这个网络无需传输实际的音频，因此这是网站、邮件附件和游戏的一个绝佳选择。</p>
<h4>NIFF</h4>
<p>NIFF代表乐谱文件交换格式（Notation Interchange File Format），它被作为一个标准的乐谱程序交换而开发。</p>
<p>和MIDI一样，NIFF不包含声音。因此它仅对于记谱有用。它可以被导入和编辑，并常可以被转化为MIDI。</p>
<h4>XML</h4>
<p>XML是一个音乐扩展标记语言（Music Extensible Markup Language），与HTML类似。这是继NIFF后的第二次尝试，用以使音乐乐谱标准化并接受更广泛的支持。它具备NIFF的所有优缺点：它没声音，它没任何回放向导，但它包含调、谱号、节拍记号等信息。比NIFF好的一点是，它基于文本。他是目前比NIFF更普遍的一个标准。</p>
<h4>文本转换器</h4>
<p>有少量的文本到NIFF、文本到MIDI、文本到XML的转换器。</p>
<h4>JPG和PDF</h4>
<p>JPG和PDF是可靠的、被普遍接受的的图片和便携式打印文档的标准。它们没有声音，没有回放信息，并无法被编辑（按音乐的方式）。但它们是与其他音乐家交流非常好的方式。</p>
<h4>截屏</h4>
<p>（ww注：常识，略过）</p>
<h4>AIFF，SDII，WAV</h4>
<p>这三种均为数字音频格式。它们包含真实的声音，但这也是它们包含的全部。它们没有音符值、持续时间、和弦、理论、乐谱或乐器分配的任何信息。</p>
<p>数字音频对于程序来说，非常容易编码和解码。它仅是一串数字流。wave文档（.wav）是IBM的标准。绝大多数Macintosh程序可操作wave文档。SDII代表音乐设计者II（Sound Designer II），这是由<a href="http://www.digidesign.com/" target="_blank">DigiDesign</a>公司，即ProTools的生产商，开发的先驱数字音频编辑器。数字音频最可靠和可交换的标准是AIFF，或者说音频交换文件格式（Audio Interchange File Format）。</p>
<p>这些格式的缺点是你无法改变编排，你无法编辑和弦中的单音，你无法摘取一轨或变调。无论如何，它们是CD的标准格式。以上任何格式都可以刻录为CD并在CD播放器上播放。</p>
<p>其他压缩格式将会很快替代CD，但CD也有可能存活下来，因为它基于我们听觉的能力。就算MP3很棒，但所有的录音棚都将以AIFF创建母带。</p>
<h4>MP3和其他压缩格式</h4>
<p>MP3与AIFF、WAV，或SDII一样（只有声音，无法改变配器，没有乐谱信息），仅有一个关键不同：它们不是CD的标准。MP3文件，刻到CD上，无法在CD播放机上回放。它们只能在MP3播放器里播放。</p>
<h3>文件大小</h3>
<p>（ww注：省略。这个没必要再教你了吧？）</p>
<h3>MIDI，音乐记谱，光学字符识别（Optical Character Recognition）软件</h3>
<p>MIDI编辑器很普遍，各种主流的DAW里边都有。我们在后边讨论它们。</p>
<p>在我提供记谱程序前的一个注解：它们都很复杂很难学，因为音乐记谱是复杂的。一个好的文字处理软件也复杂，然而它仅需代表线性组件。一个好的记谱程序有若干维度：垂直部分，水平标记&#8230;&#8230;基于各种复杂之上，我们期望一个可以为我们回放音乐的记谱程序（这比让一个文本编辑器发音更复杂）。</p>
<p>我常被问到，是否有当你在钢琴上演奏时能准确记谱的程序。目前为止没有。一个原因是变数很多。如果，比如说，你围绕中央C演奏了一系列四分音符，大概每秒一个，程序如何知道它们应该是高音，低音，中音，移动G或F（它们的确存在），节奏谱号？它是什么调？什么节奏型？因此没有，没有魔弹（magic bullet）。</p>
<p><a href="http://www.finalemusic.com/" target="_blank">Finale</a>一直作为绝大多数大学的标准。用户常被认为是忠诚的但他们常鄙视它深奥复杂的界面。我印象中，它是工程师，而不是音乐家设计的。当我第一次研究它的可能性时，我迅速离开了Finale，因为我找到了更好的替代。其他的阻碍是价格，贫乏的用户支持，专有文件格式（以及对NIFF或XML的勉强支持）。</p>
<p>Finale生产了免费缩水版的<a href="http://www.finalemusic.com/notepad/" target="_blank">NotePad</a>。这是对于分配、文本范例和快速音符（quick note）很好的选择。</p>
<p><a href="http://www.sibelius.com/" target="_blank">Sebelius</a>更易使用，然仍有一个学习曲线，也很贵，专有。它将是我的第二选择。</p>
<p><a href="http://www.apple.com/logicstudio/" target="_blank">Logic</a>伴随它的音序器和DAW包含一个记谱组件。我承认他们试图将之作为一个“完整的”音乐包，常有的事，他们会显得有点单薄。每个月，我们都会对它的深奥he1，好吧，“逻辑”，留下深刻印象，但记谱功能（我做了四个项目）却是古怪的，不一致的，以及出乎预料的。</p>
<p>我的首选是<a href="http://www.cerlsoundgroup.org/" target="_blank">Lime</a>：一个在个人电脑或MIDI存在前开发的程序。它廉价，有很长的试用期，更易学习和使用（由音乐家设计），具备微分音支持、钢琴记谱法，并支持NIFF和XML等不寻常的特色。我曾用它做极复杂的工作。</p>
<p>另一个我提及Lime的原因是，它属于一个正在增长的业余爱好软件类别：包裹被几个个人在他们的业余时间开发。他们也许缺乏专业的程度，但他们用用户支持、价格、特色以及真人邮件支持弥补了这点。另外类似的软件有：<a href="http://www.hairersoft.com/Amadeus.html" target="_blank">Amadeus ii</a>, <a href="http://www.ronimusic.com/audiocom.htm" target="_blank">Audio Companion</a>, <a href="http://funkatron.com/apps/lamebrain/docs/" target="_blank">LameBrain</a>, <a href="http://www.seventhstring.com/" target="_blank">Transcribe!</a>, <a href="http://www.ronimusic.com/" target="_blank">Amazing Slow Downer</a>等等。</p>
<h3>光学字符辨识（OCR）</h3>
<p>OCR是将一个音乐打印件的扫描件翻译成NIFF、XML，或一个专有格式（比如Finale的情况）的过程。那个文件之后可以被编辑，就像数据是手写输入的一样。文本OCR达到了可用的标准，但依我看，音乐OCR就不同了。复杂的音乐，尤其是多声部手稿，很难被准确辨识。足够多的错误足够你重新手心输入一遍。但我仍充满希望。</p>
<p>我使用过的最精确和可用的包裹是由<a href="http://www.music-scanning.com/" target="_blank">SharpEye</a>所开发的。</p>


<p>Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1114' rel='bookmark' title='Permanent Link: SC：声音'>SC：声音</a><small>密度的峰谷 途经一个媒介密度的峰谷：这是声音的本性。声音或震动可以在任何材料上发生。震动是材料交互的压缩和解压缩：就像池塘表面的涟漪。峰意味着更高的密度，谷则是更低的密度。当声音被生成（假设从一个扬声器），前移的动作创造波峰，后退的动作创造波谷。前移压缩空气，后退解压之。 模式，噪音，周期 我们在自然环境中被各种模式包围。事实上，我想不出有什么不包含任何周期元素的自然进程（就算是那些不产生声音的）：鸟、海浪、闪电、月相，等等。具备重复模式的声音被说成是具周期性的。每次重复即一个周期或一个循环。具有我们很难辨识的复杂模式的波是非周期性的。声音范围从完美周期到极端非周期的是连续的，声音在那个连续的过程中的任何地方都有可能减弱。 我们同样可以用眼睛看到模式并将它们解释为脸、树、草等等。我们用基本一致的方式解释声音。我们找寻模式或结构，并用诸如小提琴、飞机、急流等真实的现象与那个模式匹配。下边是三种不同周期的波的图示。第一个有很清晰的模式，第二个较复杂，但仍透露着一定模式，第三个看起来则全无模式可言。 具备周期波模式的声音听起来或多或少都像乐音。模式越清晰，音的特点便越清晰。模式的缺乏，将接近噪音。我说“接近”因为纯粹的噪音是理论上的抽象概念，就像无穷。这我们稍后再说。在电子创作和合成领域，噪音即没有明显模式的波。（对于录音室师来说，噪音是任何不想要的声音） 一秒内波完成其周期的次数即波的频率，用赫兹表示，或循环。 频率 频率是声音的第一维。它是一个周期波每秒循环的次数。在音乐上，频率与音高等同。频率的物理范例是琴弦或乐器身体的震动。钢琴上的中央C的频率大概每秒261次循环。钢琴最低音大概50Hz（赫兹 =...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1101' rel='bookmark' title='Permanent Link: SC：Macintosh OS X (&#8220;Ten&#8221;), Tiger'>SC：Macintosh OS X (&#8220;Ten&#8221;), Tiger</a><small>为什么用Mac？ 不同操作系统的区别并非拼读那么简单。使用Linux, Windows, Unix, 或 OS X存在着有根据的讨论。我们的实验室是基于Mac建立的。我所工作过的所有大学的实验室以及专业的工作室都使用Mac。这并不意味着你应该拥有一台，但你应该知道我们为什么使用它们。 一个原因是惯例与忠诚。在个人电脑时代早期，Apple是艺术类和大学程序的领军者。他们继续着这个传统。 另一原因是兼容性。Mac倾向于支持更多的文件格式，包括IBM。对我以及我观察到的学生来说，让我去解释一个学生的Windows文档比让他们使用我这里的东西要简单得多。如果你的家用电脑也是Mac，当你在实验室与你的私人电脑间来或折腾时，你将会碰到更少的问题。 设置更简单。连接到一个第二显示器或录像放映机，读取U盘，建立摄像头，管理网络连接（你仅需要放着他们开启，然后它会找到信号最强的那个），一切都是自动完成。屡次三番，在我能简单的插上然后播放的时候，看到三个PC技术员面对一个连接搔着他们后脑勺。IBM的安装介绍通常是4页纸，但对Mac来说是：1）连接USB线到你的Mac计算机。2）你现在即可使用你的USB设备。...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1094' rel='bookmark' title='Permanent Link: SC：介绍，音乐技术'>SC：介绍，音乐技术</a><small>译者序 OK，这是SC系列的第二部教程，非常全面深入，适用于SC重度（中毒）患者。来自David Michael Cottle写的Computer Music with examples in SuperCollider 3。它在SC官网以及其他（我所能找到的）地方的链接已经无法打开，要取得这本教材，你可以给他发信（d.cottle@utah.edu），说明你是干嘛的，为什么想学SC就可以了。因为这是他的一个希望，出于尊重他的想法，我就不上传这份教程了。起初我翻译了这本书部分我认为重要的段落，但后边越来越觉得这是一本不可多得的好书，于是决定做全书的翻译。绝大部分内容（尤其是后半部分）现已翻译完毕，等我慢慢更新。希望各位学习愉快。...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ccttours.com/blog/?feed=rss2&amp;p=1108</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SC：Macintosh OS X (&#8220;Ten&#8221;), Tiger</title>
		<link>http://www.ccttours.com/blog/?p=1101</link>
		<comments>http://www.ccttours.com/blog/?p=1101#comments</comments>
		<pubDate>Thu, 06 May 2010 08:13:05 +0000</pubDate>
		<dc:creator>ww</dc:creator>
				<category><![CDATA[SuperCollider3二]]></category>
		<category><![CDATA[SC学习笔记]]></category>

		<guid isPermaLink="false">http://www.ccttours.com/blog/?p=1101</guid>
		<description><![CDATA[为什么用Mac？ 不同操作系统的区别并非拼读那么简单。使用Linux, Windows, Unix, 或 OS X存在着有根据的讨论。我们的实验室是基于Mac建立的。我所工作过的所有大学的实验室以及专业的工作室都使用Mac。这并不意味着你应该拥有一台，但你应该知道我们为什么使用它们。 一个原因是惯例与忠诚。在个人电脑时代早期，Apple是艺术类和大学程序的领军者。他们继续着这个传统。 另一原因是兼容性。Mac倾向于支持更多的文件格式，包括IBM。对我以及我观察到的学生来说，让我去解释一个学生的Windows文档比让他们使用我这里的东西要简单得多。如果你的家用电脑也是Mac，当你在实验室与你的私人电脑间来或折腾时，你将会碰到更少的问题。 设置更简单。连接到一个第二显示器或录像放映机，读取U盘，建立摄像头，管理网络连接（你仅需要放着他们开启，然后它会找到信号最强的那个），一切都是自动完成。屡次三番，在我能简单的插上然后播放的时候，看到三个PC技术员面对一个连接搔着他们后脑勺。IBM的安装介绍通常是4页纸，但对Mac来说是：1）连接USB线到你的Mac计算机。2）你现在即可使用你的USB设备。 另一个原因是硬件质量和连续性。Mac就是Mac。它另安装和编码更简单。 性能（速度，i/o 转移，延迟）是，恕我直言，a wash（不知如何翻译才好。。）。我听过双边的狂热讨论。实际的数字接近无关乎我们要做的事情的地步。 我不情愿的承认，但我们的热爱是少许的学识和骄傲。也许是未被证明正确的，但音乐家非常忠诚，even insulted if you so much as imply they use anything else（不知如何翻译才好。。）。 0病毒。是的，0病毒。（各种各种，，，ww注：这位教授凹凸了） 也有反对的声音：它们更昂贵，支持的软件更少，第三方支持更少，但在绝大多数实验室和工作室里，这些问题是不相干的。 最后，如果你习惯于使用Windows，就像我的很多同学那样，你为什么应该学OS X？好吧，为什么不呢？在本学期我上课的第一天，我发起了选择OS的讨论，这很快蜕变为一个学生引领的Mac vs. IBM的辩论。这名捍卫IBM的学生在几天后放弃了这门课，我设想它是一个“IBM”人而不想成为一个“Mac”人。这常令我感到困惑。这不是宗教信仰。因此，让我提供一个留在我的班上并学着用Mac做事的更实际和合理的理由。当你和你希望的下一个老板坐下来并接受其面试时，她对你说他们的实验室里都是Mac，或者他们的工作室是基于Mac建立的，下述哪种反应会让你得到这份工作？ A) “Mac？你在开玩笑吗？那是一个傻逼的操作系统。” B) “感谢上帝。我对Windows一无所知。” C) “我对两者都很熟悉，但对Unix不熟。如果需要，我同样会去学Linux。在这个专业内，你知道什么，远非你能多快吸收下一个操作系统那么重要。” D) “你要用它做炸薯条吗？” D永远是愚昧的答案，而C永远是正确的。回答C给了我若干个着陆点。像我之前提到的，以我在各种工作室和实验室的经验，95%的音乐制作基于Mac。即使仅有30%，又是什么优势在限制你选择这一个或另一个？ Finder Finder是一个类似MS Word或Flash的程序。它在计算机运行时自动载入并始终保持运行。Finder允许你浏览计算机内的内容。它同样具备可改变表面设置的菜单与工具，诸如外观，键盘功能，荧幕背景，但也有重要的设置，比如音频录制输入输出的设备。 在Finder中导航可以用鼠标和菜单实现。但下边我要列出一些我常用的command（苹果键）组合快捷键。 在一些对话框和窗口，你可以输入名字选择一个项目。同样的，Tab或箭头键将在一个项目的列表间滚动。 单击（选中项目），双击（打开项目），Control-单击（关联菜单）。 Com-N (新finder窗口), Shift-Com-N (在当前窗口内建立新文件夹) Shift-Com-A (去applications), Com-K (有远程存储连接), [...]


Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1114' rel='bookmark' title='Permanent Link: SC：声音'>SC：声音</a><small>密度的峰谷 途经一个媒介密度的峰谷：这是声音的本性。声音或震动可以在任何材料上发生。震动是材料交互的压缩和解压缩：就像池塘表面的涟漪。峰意味着更高的密度，谷则是更低的密度。当声音被生成（假设从一个扬声器），前移的动作创造波峰，后退的动作创造波谷。前移压缩空气，后退解压之。 模式，噪音，周期 我们在自然环境中被各种模式包围。事实上，我想不出有什么不包含任何周期元素的自然进程（就算是那些不产生声音的）：鸟、海浪、闪电、月相，等等。具备重复模式的声音被说成是具周期性的。每次重复即一个周期或一个循环。具有我们很难辨识的复杂模式的波是非周期性的。声音范围从完美周期到极端非周期的是连续的，声音在那个连续的过程中的任何地方都有可能减弱。 我们同样可以用眼睛看到模式并将它们解释为脸、树、草等等。我们用基本一致的方式解释声音。我们找寻模式或结构，并用诸如小提琴、飞机、急流等真实的现象与那个模式匹配。下边是三种不同周期的波的图示。第一个有很清晰的模式，第二个较复杂，但仍透露着一定模式，第三个看起来则全无模式可言。 具备周期波模式的声音听起来或多或少都像乐音。模式越清晰，音的特点便越清晰。模式的缺乏，将接近噪音。我说“接近”因为纯粹的噪音是理论上的抽象概念，就像无穷。这我们稍后再说。在电子创作和合成领域，噪音即没有明显模式的波。（对于录音室师来说，噪音是任何不想要的声音） 一秒内波完成其周期的次数即波的频率，用赫兹表示，或循环。 频率 频率是声音的第一维。它是一个周期波每秒循环的次数。在音乐上，频率与音高等同。频率的物理范例是琴弦或乐器身体的震动。钢琴上的中央C的频率大概每秒261次循环。钢琴最低音大概50Hz（赫兹 =...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1108' rel='bookmark' title='Permanent Link: SC：数字音乐'>SC：数字音乐</a><small>语言 我现在正在想一段旋律。为交流这段旋律我能怎么做呢？如果你坐我旁边我可以唱给你听。不仅因为你认识音，而且你还很可能立马回忆起1960情节喜剧中的角色。但因为你不在这里，我将不得不选择其他的语言。如下： 00111100, 00111110, 00111111, 00111100 01000010 不明白? 那这个呢: 0000003C,...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1094' rel='bookmark' title='Permanent Link: SC：介绍，音乐技术'>SC：介绍，音乐技术</a><small>译者序 OK，这是SC系列的第二部教程，非常全面深入，适用于SC重度（中毒）患者。来自David Michael Cottle写的Computer Music with examples in SuperCollider 3。它在SC官网以及其他（我所能找到的）地方的链接已经无法打开，要取得这本教材，你可以给他发信（d.cottle@utah.edu），说明你是干嘛的，为什么想学SC就可以了。因为这是他的一个希望，出于尊重他的想法，我就不上传这份教程了。起初我翻译了这本书部分我认为重要的段落，但后边越来越觉得这是一本不可多得的好书，于是决定做全书的翻译。绝大部分内容（尤其是后半部分）现已翻译完毕，等我慢慢更新。希望各位学习愉快。...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h2>为什么用Mac？</h2>
<p>不同操作系统的区别并非拼读那么简单。使用Linux, Windows, Unix, 或 OS X存在着有根据的讨论。我们的实验室是基于Mac建立的。我所工作过的所有大学的实验室以及专业的工作室都使用Mac。这并不意味着你应该拥有一台，但你应该知道我们为什么使用它们。</p>
<p><span id="more-1101"></span></p>
<p>一个原因是惯例与忠诚。在个人电脑时代早期，Apple是艺术类和大学程序的领军者。他们继续着这个传统。</p>
<p>另一原因是兼容性。Mac倾向于支持更多的文件格式，包括IBM。对我以及我观察到的学生来说，让我去解释一个学生的Windows文档比让他们使用我这里的东西要简单得多。如果你的家用电脑也是Mac，当你在实验室与你的私人电脑间来或折腾时，你将会碰到更少的问题。</p>
<p>设置更简单。连接到一个第二显示器或录像放映机，读取U盘，建立摄像头，管理网络连接（你仅需要放着他们开启，然后它会找到信号最强的那个），一切都是自动完成。屡次三番，在我能简单的插上然后播放的时候，看到三个PC技术员面对一个连接搔着他们后脑勺。IBM的安装介绍通常是4页纸，但对Mac来说是：1）连接USB线到你的Mac计算机。2）你现在即可使用你的USB设备。</p>
<p>另一个原因是硬件质量和连续性。Mac就是Mac。它另安装和编码更简单。</p>
<p>性能（速度，i/o 转移，延迟）是，恕我直言，a wash（不知如何翻译才好。。）。我听过双边的狂热讨论。实际的数字接近无关乎我们要做的事情的地步。</p>
<p>我不情愿的承认，但我们的热爱是少许的学识和骄傲。也许是未被证明正确的，但音乐家非常忠诚，even insulted if you so much as imply they use anything else（不知如何翻译才好。。）。</p>
<p>0病毒。是的，0病毒。（各种各种，，，ww注：这位教授凹凸了）</p>
<p>也有反对的声音：它们更昂贵，支持的软件更少，第三方支持更少，但在绝大多数实验室和工作室里，这些问题是不相干的。</p>
<p>最后，如果你习惯于使用Windows，就像我的很多同学那样，你为什么应该学OS X？好吧，为什么不呢？在本学期我上课的第一天，我发起了选择OS的讨论，这很快蜕变为一个学生引领的Mac vs. IBM的辩论。这名捍卫IBM的学生在几天后放弃了这门课，我设想它是一个“IBM”人而不想成为一个“Mac”人。这常令我感到困惑。这不是宗教信仰。因此，让我提供一个留在我的班上并学着用Mac做事的更实际和合理的理由。当你和你希望的下一个老板坐下来并接受其面试时，她对你说他们的实验室里都是Mac，或者他们的工作室是基于Mac建立的，下述哪种反应会让你得到这份工作？</p>
<p>A) “Mac？你在开玩笑吗？那是一个傻逼的操作系统。”</p>
<p>B) “感谢上帝。我对Windows一无所知。”</p>
<p>C) “我对两者都很熟悉，但对Unix不熟。如果需要，我同样会去学Linux。在这个专业内，你知道什么，远非你能多快吸收下一个操作系统那么重要。”</p>
<p>D) “你要用它做炸薯条吗？”</p>
<p>D永远是愚昧的答案，而C永远是正确的。回答C给了我若干个着陆点。像我之前提到的，以我在各种工作室和实验室的经验，95%的音乐制作基于Mac。即使仅有30%，又是什么优势在限制你选择这一个或另一个？</p>
<h2>Finder</h2>
<p>Finder是一个类似MS Word或Flash的程序。它在计算机运行时自动载入并始终保持运行。Finder允许你浏览计算机内的内容。它同样具备可改变表面设置的菜单与工具，诸如外观，键盘功能，荧幕背景，但也有重要的设置，比如音频录制输入输出的设备。</p>
<p>在Finder中导航可以用鼠标和菜单实现。但下边我要列出一些我常用的command（苹果键）组合快捷键。</p>
<p>在一些对话框和窗口，你可以输入名字选择一个项目。同样的，Tab或箭头键将在一个项目的列表间滚动。</p>
<p>单击（选中项目），双击（打开项目），Control-单击（关联菜单）。</p>
<p>Com-N (新finder窗口), Shift-Com-N (在当前窗口内建立新文件夹) Shift-Com-A (去applications), Com-K (有远程存储连接), Shift-Com-H (home)， Com-del (放入废纸篓), Com-O (打开), Com-W (关闭), Com-Opt-F 或 Com-F (搜索), Comspace (spotlight), Com-` (在窗口键循环), Com-1, 2, 3 (改变视角到按钮, 列表, 栏), Com-Shift-4 (截屏), Com-Shift-Con-4 (截屏到剪贴板), Con-F2 (激活菜单), Con-F3 (激活Dock), Esc (关闭对话窗)</p>
<hr />
<p><em>（ww注：下边是各种冗长的Mac系统介绍，我将不再逐字翻译。欲了解本部分详细内容，请参看原文）</em></p>


<p>Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1114' rel='bookmark' title='Permanent Link: SC：声音'>SC：声音</a><small>密度的峰谷 途经一个媒介密度的峰谷：这是声音的本性。声音或震动可以在任何材料上发生。震动是材料交互的压缩和解压缩：就像池塘表面的涟漪。峰意味着更高的密度，谷则是更低的密度。当声音被生成（假设从一个扬声器），前移的动作创造波峰，后退的动作创造波谷。前移压缩空气，后退解压之。 模式，噪音，周期 我们在自然环境中被各种模式包围。事实上，我想不出有什么不包含任何周期元素的自然进程（就算是那些不产生声音的）：鸟、海浪、闪电、月相，等等。具备重复模式的声音被说成是具周期性的。每次重复即一个周期或一个循环。具有我们很难辨识的复杂模式的波是非周期性的。声音范围从完美周期到极端非周期的是连续的，声音在那个连续的过程中的任何地方都有可能减弱。 我们同样可以用眼睛看到模式并将它们解释为脸、树、草等等。我们用基本一致的方式解释声音。我们找寻模式或结构，并用诸如小提琴、飞机、急流等真实的现象与那个模式匹配。下边是三种不同周期的波的图示。第一个有很清晰的模式，第二个较复杂，但仍透露着一定模式，第三个看起来则全无模式可言。 具备周期波模式的声音听起来或多或少都像乐音。模式越清晰，音的特点便越清晰。模式的缺乏，将接近噪音。我说“接近”因为纯粹的噪音是理论上的抽象概念，就像无穷。这我们稍后再说。在电子创作和合成领域，噪音即没有明显模式的波。（对于录音室师来说，噪音是任何不想要的声音） 一秒内波完成其周期的次数即波的频率，用赫兹表示，或循环。 频率 频率是声音的第一维。它是一个周期波每秒循环的次数。在音乐上，频率与音高等同。频率的物理范例是琴弦或乐器身体的震动。钢琴上的中央C的频率大概每秒261次循环。钢琴最低音大概50Hz（赫兹 =...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1108' rel='bookmark' title='Permanent Link: SC：数字音乐'>SC：数字音乐</a><small>语言 我现在正在想一段旋律。为交流这段旋律我能怎么做呢？如果你坐我旁边我可以唱给你听。不仅因为你认识音，而且你还很可能立马回忆起1960情节喜剧中的角色。但因为你不在这里，我将不得不选择其他的语言。如下： 00111100, 00111110, 00111111, 00111100 01000010 不明白? 那这个呢: 0000003C,...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1094' rel='bookmark' title='Permanent Link: SC：介绍，音乐技术'>SC：介绍，音乐技术</a><small>译者序 OK，这是SC系列的第二部教程，非常全面深入，适用于SC重度（中毒）患者。来自David Michael Cottle写的Computer Music with examples in SuperCollider 3。它在SC官网以及其他（我所能找到的）地方的链接已经无法打开，要取得这本教材，你可以给他发信（d.cottle@utah.edu），说明你是干嘛的，为什么想学SC就可以了。因为这是他的一个希望，出于尊重他的想法，我就不上传这份教程了。起初我翻译了这本书部分我认为重要的段落，但后边越来越觉得这是一本不可多得的好书，于是决定做全书的翻译。绝大部分内容（尤其是后半部分）现已翻译完毕，等我慢慢更新。希望各位学习愉快。...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ccttours.com/blog/?feed=rss2&amp;p=1101</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SC：介绍，音乐技术</title>
		<link>http://www.ccttours.com/blog/?p=1094</link>
		<comments>http://www.ccttours.com/blog/?p=1094#comments</comments>
		<pubDate>Wed, 05 May 2010 08:22:52 +0000</pubDate>
		<dc:creator>ww</dc:creator>
				<category><![CDATA[SuperCollider3二]]></category>
		<category><![CDATA[SC学习笔记]]></category>

		<guid isPermaLink="false">http://www.ccttours.com/blog/?p=1094</guid>
		<description><![CDATA[译者序 OK，这是SC系列的第二部教程，非常全面深入，适用于SC重度（中毒）患者。来自David Michael Cottle写的Computer Music with examples in SuperCollider 3。它在SC官网以及其他（我所能找到的）地方的链接已经无法打开，要取得这本教材，你可以给他发信（d.cottle@utah.edu），说明你是干嘛的，为什么想学SC就可以了。因为这是他的一个希望，出于尊重他的想法，我就不上传这份教程了。起初我翻译了这本书部分我认为重要的段落，但后边越来越觉得这是一本不可多得的好书，于是决定做全书的翻译。绝大部分内容（尤其是后半部分）现已翻译完毕，等我慢慢更新。希望各位学习愉快。 这份文本中有什么？ 这些文字是我在犹他大学教授的音乐技术、数码合成和计算机辅助创作课程材料的汇总。它将电子原声创作练习与SC和OOP相混合。目标是尽快得到实际的声音，了解足够多的SC语言，以避免那些在阅读随软件附带的帮助文档时呆滞的眼睛。这份教程做了其他绝大多数教程并没有做的一个假设，即：假设你仅有一点点甚至完全没有代码及合成基础的经验和知识。目标读者是音乐创作专业大二的学生。 能在SC中运行的代码用Monaco字体（SC默认字体）写出。与这份教程伴随的，还有仅包含示范代码的文本文档们。你可以在SC中直接打开这些文档（无需格式转换）并运行其中的例子。 这份教程分为三大部分。第一部分包含综合音乐技术课件。在这些章节中，并没有SC的影子。第二部分是数码合成，将教会你如何利用SC生成有趣的声音。第三部分将描述使用那些声音或MIDI设备进行结构创作的方法。 我深深的感谢sc-users组之于终端初级用户各种问题所表现出来的耐心。这是一个牛逼的资源。 关于SC3更多的信息，请访问http://supercollider.sourceforge.net 使用条款 这份文本可用于任何非教授或学习84602 zip code（ww注：没事，看不懂也无大碍，我也不懂）的人使用。你可以随意将之与你的学生或同学分享，但每个独立个体应通过d.cottle@utah.edu联系我获取最新版本的下载链接。 为什么使用SuperCollider 3？ 它廉价。（ww注：实际上是免费的） 它具备稳固的体系。它基于Music N语言和csound建立，并一直被来自世界各地的天才们开发和使用着。 它深奥。我曾玩过一个“绘制一个声音”的程序，在大约两天的时间里，始终有趣。你不会在SC发出的声音以及提供的工具迷宫中感到疲惫。 它也有更简单的合成程序包，但相对于SC3的能量来说，它是相对易于使用的。 图形化用户界面(GUI)是可选的。GUI会限制你的创造力。SC，没有一个界面（ww注：如果你想，SC也提供你一些简单的GUI对象使用），迫使学生去处理基本原理。那些具备一个滑杆/转盘/旋钮/按钮等图形化界面的软、硬件合成器，通过加载预设可能会让你更快地得到有趣的声音，但是为了在SC中建立一个patch，你不得不去了解诸如电压控制、界定、频偏、音头强度和衰减等等基础知识。 它能做一切事情。经典的模拟合成、AM、FM、PM、物理建模、加、减合成、波表查询、波形塑造、Markov链、AI、MIDI、古典具象、实时交互具象、总控、分析、元音变化等等等等。 它，或类似它的东西，是未来。 最后，说说而已。十年前我打开SC并键入command+r后便被迅速俘虏了。它允许我们在任何笔记本电脑中实时挖掘其深度和复杂性。 练习 1.1. 你因何使用SuperCollider？ 1.2. 你暑假干嘛？ Related posts:SC：声音密度的峰谷 途经一个媒介密度的峰谷：这是声音的本性。声音或震动可以在任何材料上发生。震动是材料交互的压缩和解压缩：就像池塘表面的涟漪。峰意味着更高的密度，谷则是更低的密度。当声音被生成（假设从一个扬声器），前移的动作创造波峰，后退的动作创造波谷。前移压缩空气，后退解压之。 模式，噪音，周期 我们在自然环境中被各种模式包围。事实上，我想不出有什么不包含任何周期元素的自然进程（就算是那些不产生声音的）：鸟、海浪、闪电、月相，等等。具备重复模式的声音被说成是具周期性的。每次重复即一个周期或一个循环。具有我们很难辨识的复杂模式的波是非周期性的。声音范围从完美周期到极端非周期的是连续的，声音在那个连续的过程中的任何地方都有可能减弱。 我们同样可以用眼睛看到模式并将它们解释为脸、树、草等等。我们用基本一致的方式解释声音。我们找寻模式或结构，并用诸如小提琴、飞机、急流等真实的现象与那个模式匹配。下边是三种不同周期的波的图示。第一个有很清晰的模式，第二个较复杂，但仍透露着一定模式，第三个看起来则全无模式可言。 具备周期波模式的声音听起来或多或少都像乐音。模式越清晰，音的特点便越清晰。模式的缺乏，将接近噪音。我说“接近”因为纯粹的噪音是理论上的抽象概念，就像无穷。这我们稍后再说。在电子创作和合成领域，噪音即没有明显模式的波。（对于录音室师来说，噪音是任何不想要的声音） 一秒内波完成其周期的次数即波的频率，用赫兹表示，或循环。 频率 频率是声音的第一维。它是一个周期波每秒循环的次数。在音乐上，频率与音高等同。频率的物理范例是琴弦或乐器身体的震动。钢琴上的中央C的频率大概每秒261次循环。钢琴最低音大概50Hz（赫兹 =... SC：数字音乐语言 我现在正在想一段旋律。为交流这段旋律我能怎么做呢？如果你坐我旁边我可以唱给你听。不仅因为你认识音，而且你还很可能立马回忆起1960情节喜剧中的角色。但因为你不在这里，我将不得不选择其他的语言。如下： 00111100, 00111110, 00111111, 00111100 01000010 不明白? [...]


Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1114' rel='bookmark' title='Permanent Link: SC：声音'>SC：声音</a><small>密度的峰谷 途经一个媒介密度的峰谷：这是声音的本性。声音或震动可以在任何材料上发生。震动是材料交互的压缩和解压缩：就像池塘表面的涟漪。峰意味着更高的密度，谷则是更低的密度。当声音被生成（假设从一个扬声器），前移的动作创造波峰，后退的动作创造波谷。前移压缩空气，后退解压之。 模式，噪音，周期 我们在自然环境中被各种模式包围。事实上，我想不出有什么不包含任何周期元素的自然进程（就算是那些不产生声音的）：鸟、海浪、闪电、月相，等等。具备重复模式的声音被说成是具周期性的。每次重复即一个周期或一个循环。具有我们很难辨识的复杂模式的波是非周期性的。声音范围从完美周期到极端非周期的是连续的，声音在那个连续的过程中的任何地方都有可能减弱。 我们同样可以用眼睛看到模式并将它们解释为脸、树、草等等。我们用基本一致的方式解释声音。我们找寻模式或结构，并用诸如小提琴、飞机、急流等真实的现象与那个模式匹配。下边是三种不同周期的波的图示。第一个有很清晰的模式，第二个较复杂，但仍透露着一定模式，第三个看起来则全无模式可言。 具备周期波模式的声音听起来或多或少都像乐音。模式越清晰，音的特点便越清晰。模式的缺乏，将接近噪音。我说“接近”因为纯粹的噪音是理论上的抽象概念，就像无穷。这我们稍后再说。在电子创作和合成领域，噪音即没有明显模式的波。（对于录音室师来说，噪音是任何不想要的声音） 一秒内波完成其周期的次数即波的频率，用赫兹表示，或循环。 频率 频率是声音的第一维。它是一个周期波每秒循环的次数。在音乐上，频率与音高等同。频率的物理范例是琴弦或乐器身体的震动。钢琴上的中央C的频率大概每秒261次循环。钢琴最低音大概50Hz（赫兹 =...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1108' rel='bookmark' title='Permanent Link: SC：数字音乐'>SC：数字音乐</a><small>语言 我现在正在想一段旋律。为交流这段旋律我能怎么做呢？如果你坐我旁边我可以唱给你听。不仅因为你认识音，而且你还很可能立马回忆起1960情节喜剧中的角色。但因为你不在这里，我将不得不选择其他的语言。如下： 00111100, 00111110, 00111111, 00111100 01000010 不明白? 那这个呢: 0000003C,...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1101' rel='bookmark' title='Permanent Link: SC：Macintosh OS X (&#8220;Ten&#8221;), Tiger'>SC：Macintosh OS X (&#8220;Ten&#8221;), Tiger</a><small>为什么用Mac？ 不同操作系统的区别并非拼读那么简单。使用Linux, Windows, Unix, 或 OS X存在着有根据的讨论。我们的实验室是基于Mac建立的。我所工作过的所有大学的实验室以及专业的工作室都使用Mac。这并不意味着你应该拥有一台，但你应该知道我们为什么使用它们。 一个原因是惯例与忠诚。在个人电脑时代早期，Apple是艺术类和大学程序的领军者。他们继续着这个传统。 另一原因是兼容性。Mac倾向于支持更多的文件格式，包括IBM。对我以及我观察到的学生来说，让我去解释一个学生的Windows文档比让他们使用我这里的东西要简单得多。如果你的家用电脑也是Mac，当你在实验室与你的私人电脑间来或折腾时，你将会碰到更少的问题。 设置更简单。连接到一个第二显示器或录像放映机，读取U盘，建立摄像头，管理网络连接（你仅需要放着他们开启，然后它会找到信号最强的那个），一切都是自动完成。屡次三番，在我能简单的插上然后播放的时候，看到三个PC技术员面对一个连接搔着他们后脑勺。IBM的安装介绍通常是4页纸，但对Mac来说是：1）连接USB线到你的Mac计算机。2）你现在即可使用你的USB设备。...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<h2>译者序</h2>
<p>OK，这是SC系列的第二部教程，非常全面深入，适用于SC重度（中毒）患者。来自David Michael Cottle写的<em>Computer Music with examples in SuperCollider 3</em>。它在SC官网以及其他（我所能找到的）地方的链接已经无法打开，要取得这本教材，你可以给他发信（<a href="mailto:d.cottle@utah.edu">d.cottle@utah.edu</a>），说明你是干嘛的，为什么想学SC就可以了。因为这是他的一个希望，出于尊重他的想法，我就不上传这份教程了。起初我翻译了这本书部分我认为重要的段落，但后边越来越觉得这是一本不可多得的好书，于是决定做全书的翻译。绝大部分内容（尤其是后半部分）现已翻译完毕，等我慢慢更新。希望各位学习愉快。<br />
<span id="more-1094"></span></p>
<hr />
<h2>这份文本中有什么？</h2>
<p>这些文字是我在犹他大学教授的音乐技术、数码合成和计算机辅助创作课程材料的汇总。它将电子原声创作练习与SC和OOP相混合。目标是尽快得到实际的声音，了解足够多的SC语言，以避免那些在阅读随软件附带的帮助文档时呆滞的眼睛。这份教程做了其他绝大多数教程并没有做的一个假设，即：假设你仅有一点点甚至完全没有代码及合成基础的经验和知识。目标读者是音乐创作专业大二的学生。</p>
<p>能在SC中运行的代码用Monaco字体（SC默认字体）写出。与这份教程伴随的，还有仅包含示范代码的文本文档们。你可以在SC中直接打开这些文档（无需格式转换）并运行其中的例子。</p>
<p>这份教程分为三大部分。第一部分包含综合音乐技术课件。在这些章节中，并没有SC的影子。第二部分是数码合成，将教会你如何利用SC生成有趣的声音。第三部分将描述使用那些声音或MIDI设备进行结构创作的方法。</p>
<p>我深深的感谢sc-users组之于终端初级用户各种问题所表现出来的耐心。这是一个牛逼的资源。</p>
<p>关于SC3更多的信息，请访问<a href="http://supercollider.sourceforge.net" target="_blank">http://supercollider.sourceforge.net</a></p>
<h2>使用条款</h2>
<p>这份文本可用于任何非教授或学习84602 zip code（ww注：没事，看不懂也无大碍，我也不懂）的人使用。你可以随意将之与你的学生或同学分享，但每个独立个体应通过<a href="mailto:d.cottle@utah.edu">d.cottle@utah.edu</a>联系我获取最新版本的下载链接。</p>
<h2>为什么使用SuperCollider 3？</h2>
<p>它廉价。（ww注：实际上是免费的）</p>
<p>它具备稳固的体系。它基于Music N语言和csound建立，并一直被来自世界各地的天才们开发和使用着。</p>
<p>它深奥。我曾玩过一个“绘制一个声音”的程序，在大约两天的时间里，始终有趣。你不会在SC发出的声音以及提供的工具迷宫中感到疲惫。</p>
<p>它也有更简单的合成程序包，但相对于SC3的能量来说，它是相对易于使用的。</p>
<p>图形化用户界面(GUI)是可选的。GUI会限制你的创造力。SC，没有一个界面（ww注：如果你想，SC也提供你一些简单的GUI对象使用），迫使学生去处理基本原理。那些具备一个滑杆/转盘/旋钮/按钮等图形化界面的软、硬件合成器，通过加载预设可能会让你更快地得到有趣的声音，但是为了在SC中建立一个patch，你不得不去了解诸如电压控制、界定、频偏、音头强度和衰减等等基础知识。</p>
<p>它能做一切事情。经典的模拟合成、AM、FM、PM、物理建模、加、减合成、波表查询、波形塑造、Markov链、AI、MIDI、古典具象、实时交互具象、总控、分析、元音变化等等等等。</p>
<p>它，或类似它的东西，是未来。</p>
<p>最后，说说而已。十年前我打开SC并键入command+r后便被迅速俘虏了。它允许我们在任何笔记本电脑中实时挖掘其深度和复杂性。</p>
<hr /><strong>练习</strong><br />
1.1. 你因何使用SuperCollider？<br />
1.2. 你暑假干嘛？</p>


<p>Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1114' rel='bookmark' title='Permanent Link: SC：声音'>SC：声音</a><small>密度的峰谷 途经一个媒介密度的峰谷：这是声音的本性。声音或震动可以在任何材料上发生。震动是材料交互的压缩和解压缩：就像池塘表面的涟漪。峰意味着更高的密度，谷则是更低的密度。当声音被生成（假设从一个扬声器），前移的动作创造波峰，后退的动作创造波谷。前移压缩空气，后退解压之。 模式，噪音，周期 我们在自然环境中被各种模式包围。事实上，我想不出有什么不包含任何周期元素的自然进程（就算是那些不产生声音的）：鸟、海浪、闪电、月相，等等。具备重复模式的声音被说成是具周期性的。每次重复即一个周期或一个循环。具有我们很难辨识的复杂模式的波是非周期性的。声音范围从完美周期到极端非周期的是连续的，声音在那个连续的过程中的任何地方都有可能减弱。 我们同样可以用眼睛看到模式并将它们解释为脸、树、草等等。我们用基本一致的方式解释声音。我们找寻模式或结构，并用诸如小提琴、飞机、急流等真实的现象与那个模式匹配。下边是三种不同周期的波的图示。第一个有很清晰的模式，第二个较复杂，但仍透露着一定模式，第三个看起来则全无模式可言。 具备周期波模式的声音听起来或多或少都像乐音。模式越清晰，音的特点便越清晰。模式的缺乏，将接近噪音。我说“接近”因为纯粹的噪音是理论上的抽象概念，就像无穷。这我们稍后再说。在电子创作和合成领域，噪音即没有明显模式的波。（对于录音室师来说，噪音是任何不想要的声音） 一秒内波完成其周期的次数即波的频率，用赫兹表示，或循环。 频率 频率是声音的第一维。它是一个周期波每秒循环的次数。在音乐上，频率与音高等同。频率的物理范例是琴弦或乐器身体的震动。钢琴上的中央C的频率大概每秒261次循环。钢琴最低音大概50Hz（赫兹 =...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1108' rel='bookmark' title='Permanent Link: SC：数字音乐'>SC：数字音乐</a><small>语言 我现在正在想一段旋律。为交流这段旋律我能怎么做呢？如果你坐我旁边我可以唱给你听。不仅因为你认识音，而且你还很可能立马回忆起1960情节喜剧中的角色。但因为你不在这里，我将不得不选择其他的语言。如下： 00111100, 00111110, 00111111, 00111100 01000010 不明白? 那这个呢: 0000003C,...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1101' rel='bookmark' title='Permanent Link: SC：Macintosh OS X (&#8220;Ten&#8221;), Tiger'>SC：Macintosh OS X (&#8220;Ten&#8221;), Tiger</a><small>为什么用Mac？ 不同操作系统的区别并非拼读那么简单。使用Linux, Windows, Unix, 或 OS X存在着有根据的讨论。我们的实验室是基于Mac建立的。我所工作过的所有大学的实验室以及专业的工作室都使用Mac。这并不意味着你应该拥有一台，但你应该知道我们为什么使用它们。 一个原因是惯例与忠诚。在个人电脑时代早期，Apple是艺术类和大学程序的领军者。他们继续着这个传统。 另一原因是兼容性。Mac倾向于支持更多的文件格式，包括IBM。对我以及我观察到的学生来说，让我去解释一个学生的Windows文档比让他们使用我这里的东西要简单得多。如果你的家用电脑也是Mac，当你在实验室与你的私人电脑间来或折腾时，你将会碰到更少的问题。 设置更简单。连接到一个第二显示器或录像放映机，读取U盘，建立摄像头，管理网络连接（你仅需要放着他们开启，然后它会找到信号最强的那个），一切都是自动完成。屡次三番，在我能简单的插上然后播放的时候，看到三个PC技术员面对一个连接搔着他们后脑勺。IBM的安装介绍通常是4页纸，但对Mac来说是：1）连接USB线到你的Mac计算机。2）你现在即可使用你的USB设备。...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ccttours.com/blog/?feed=rss2&amp;p=1094</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SuperCollider：例程和任务</title>
		<link>http://www.ccttours.com/blog/?p=1091</link>
		<comments>http://www.ccttours.com/blog/?p=1091#comments</comments>
		<pubDate>Sat, 27 Mar 2010 05:07:54 +0000</pubDate>
		<dc:creator>ww</dc:creator>
				<category><![CDATA[SuperCollider3]]></category>
		<category><![CDATA[SuperCollider学习笔记]]></category>

		<guid isPermaLink="false">http://www.ccttours.com/blog/?p=1091</guid>
		<description><![CDATA[在开始本课之前，请确保你已载入了上一课的\bleep SynthDef。 目前为止，调度一直由为一个特定的时间调度一个函数来达到。为了遍历一个程序不同的阶段，一个具备一定量执行阶段的函数是很有帮助的。通过.value，它并非一次性被全部评估，但能够在每个多阶段中“产出（yield）”它的当前值。 这是一个例程（routine）： ( r=Routine({ 1.yield; 2.yield; 3.yield; }) ) r.value; //运行此行四次 //另一个更多东西一起走的例子 ( var r; r = Routine({ var x; x = 1.0.rand; 2.yield; x.yield; 1000.yield; x.yield; x = 1.0.rand; x.yield; }); 10.do({ r.value.postln }); ) // a routine can also have side effects ( r = Routine({ 1.yield; Synth(\bleep); 2.yield; 1.yield; Synth(\bleep); [...]


Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1064' rel='bookmark' title='Permanent Link: SuperCollider：图形化用户界面'>SuperCollider：图形化用户界面</a><small>SC3的图形化用户界面类 Server.default=s=Server.local; SC3的GUI类包括量程（Range）和2D滑杆，拖放工具，下拉列表，多滑杆和其它很多很多，， 同时按下shift+cmd+N (Mac机)看看可选的GUI小工具。 GD_ToolboxWindow() // 展示GUI建设的第三方类 在这份教程中，SwingOSC用户（这包括了使用PsyCollider的任何人）将需要在以下所有GUI代码前加上J，或使用另一个可替代文件(5.2b GUI与SwingOSC)...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1057' rel='bookmark' title='Permanent Link: SuperCollider：互动'>SuperCollider：互动</a><small>通过鼠标、键盘、MIDI、音频输入等进行互动 让我们现在先打开localhost服务器： ( Server.default=s=Server.local; s.boot; ) MouseX/Y 运用鼠标作为一个控制器是一个与patch互动的快速简单的方式 // 基于参数的变化方式...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1053' rel='bookmark' title='Permanent Link: SuperCollider：合成器定义'>SuperCollider：合成器定义</a><small>SynthDef {}.play 标志法并非SuperCollider 3的首选标记法，但他却允许我们对合成快速上手。从现在起，你常看到的都将是使用SynthDef结构定义的UGen网络。然后很多合成都是由一个单独的SynthDef来创建，这对于制造一堆类似的声音和其它颗粒以及整体进程是尤其重要的。 SynthDef = Synthesizer Definition（合成器定义） 为了在SC中合成声音，你必须为UGen网络用编程语言写一个秘诀（recipe）。这个秘诀由一个特殊的语言结构写就而成，SynthDef。 SynthDef(\sine,...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1047' rel='bookmark' title='Permanent Link: SuperCollider：数组'>SuperCollider：数组</a><small>SuperCollider有很多收集(collection)类，但对于一些简单的任务来说，你往往可以通过在方括号内定义数据的数组（Array）来实现： a= [5,6,7,8,9,10]; 有时我们需要更清晰的建构数据列，并且我们可以书写我们自己的函数来生成数据： a= Array.fill(6, {arg i; i+5}); 你将会在今后渐渐熟悉收集类比如数组的用法，但现在我将首先展示一些小窍门给你尝尝鲜(逐行运行一下逐行，在post窗口内观察结果)。...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1019' rel='bookmark' title='Permanent Link: SuperCollider：调制合成'>SuperCollider：调制合成</a><small>Server.default=s=Server.internal; s.boot; // 这个使用了Lance Putnam的频率范围。我将始终在后台运行它 // 以为我们描绘我们探索声音的图释 FreqScope.new 在调制合成（modulation synthesis）中，一个波，载体，被调制器所影响。...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>在开始本课之前，请确保你已载入了上一课的<strong><em>\bleep SynthDef</em></strong>。</p>
<p>目前为止，调度一直由为一个特定的时间调度一个函数来达到。为了遍历一个程序不同的阶段，一个具备一定量执行阶段的函数是很有帮助的。通过<strong><em>.value</em></strong>，它并非一次性被全部评估，但能够在每个多阶段中“产出（<strong><em>yield</em></strong>）”它的当前值。</p>
<p><span id="more-1091"></span></p>
<p>这是一个例程（routine）：</p>
<pre class="brush:jfx">(
r=Routine({

1.yield; 

2.yield;

3.yield;

})
)

r.value; //运行此行四次</pre>
<hr />
<pre class="brush:jfx">//另一个更多东西一起走的例子
(
var r;
r = Routine({
		var x;
		x = 1.0.rand;
		2.yield;
		x.yield;
		1000.yield;
		x.yield;
		x = 1.0.rand;
		x.yield;
	});

10.do({ r.value.postln });
)</pre>
<hr />
<pre class="brush:jfx">// a routine can also have side effects

(
r = Routine({
		1.yield;
		Synth(\bleep);
		2.yield;
		1.yield;
		Synth(\bleep);
		1.yield;
	});
)

r.next; //顺便. r.next是一个同义词. r.value或r.next都返回"yield值".
r.next;
r.next;
r.next;</pre>
<hr />
<pre class="brush:jfx">// 现在，我们可以通过在一个确定的<em><span style="color: #0000ff;">Clock</span></em>上演奏例程来使用它
(
r = Routine({
		0.5.yield;
		Synth(\bleep);
		1.yield;
		0.5.yield;
		Synth(\bleep, [\note, 43]);
		0.5.yield;
	});

SystemClock.sched(0, r);
)</pre>
<hr />
但是，最好的做法常常是仅仅“演奏”例程，同时将它传递入<span style="color: #0000ff;"><em>Clock</em></span>。</p>
<pre class="brush:jfx">r.reset;	// 将例程重置为其初始状态
r.play(SystemClock); 

r.reset;
r.play(TempoClock(3));</pre>
<hr />
<strong><em> Yield</em></strong>可以返回任何类型的对象。<br />
然而，一个有意义的时期值需要是一个浮点数或一个整数。<br />
为了清楚的表明我们使用的是一个相对时间，我们用<strong><em>wait</em></strong>替代<strong><em>yield</em></strong>（二者意味是一样的）</p>
<pre class="brush:jfx">TempoClock.default.tempo_(1); //1 bps

(
var r;
r = Routine.new({
	"I just began!".postln;
	1.0.wait;
	"1 second later".postln;
	2.0.wait;
	"finished".postln;
});

r.play; //默认到TempoClock.default;
)</pre>
<hr />
<pre class="brush:jfx">(
var r;
r = Routine.new({
	16.do({ arg i; 

		Synth(\bleep, [ \note, 36+(3*i) ]);
		0.25.yield;  //  yield和wait意味着同样的东西 

	});
});

r.play;
)</pre>
<hr />
<strong><em> inf.do</em></strong>可以用来无限进行；但你你必须细心一些，以不会遗漏掉一些正时间的<strong><em>.wait</em></strong>命令。因为否则的话，循环将变得无限快并且SC将崩溃。</p>
<pre class="brush:jfx">(
var r;
r = Routine.new({
	inf.do({ arg i; 

		Synth(\bleep, [ \note, 36+(3*(i%10)) ]); //added %10 to stop it going up forever
		0.25.wait;   //do not miss me out!

	});
});

r.play;
)</pre>
<hr />
一个任务即一个可以暂停和重新开始的例程。</p>
<pre class="brush:jfx">(
t = Task.new({
		inf.do({ arg i; // 无限循环 (除非从外部停止)
			Synth(\bleep, [\note, 36+(2.3*(i%17))]);
			0.25.wait;
		});
});
)

t.play(TempoClock(1.4)); //开启任务

t.pause;  //暂停

t.resume;  //继续走</pre>
<hr />
有一个特殊的例程捷径也许会有帮助：</p>
<pre class="brush:jfx">{}.fork</pre>
<p>这将自动将你的函数转换为一个例程并演奏它；你将<span style="color: #0000ff;"><em>Clock</em></span>作为<strong><em>fork</em></strong>的引数传递给<em><strong>fork</strong></em>。</p>
<pre class="brush:jfx">{5.do{"hello".postln; 1.0.wait} }.fork(TempoClock(1))</pre>
<hr />
<pre class="brush:jfx">(
{16.do{arg i; Synth(\bleep, [\note,rrand(48,84) ,\amp, rrand(0.0,0.125)]); 0.125.wait} }.fork(TempoClock(2))
)</pre>


<p>Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1064' rel='bookmark' title='Permanent Link: SuperCollider：图形化用户界面'>SuperCollider：图形化用户界面</a><small>SC3的图形化用户界面类 Server.default=s=Server.local; SC3的GUI类包括量程（Range）和2D滑杆，拖放工具，下拉列表，多滑杆和其它很多很多，， 同时按下shift+cmd+N (Mac机)看看可选的GUI小工具。 GD_ToolboxWindow() // 展示GUI建设的第三方类 在这份教程中，SwingOSC用户（这包括了使用PsyCollider的任何人）将需要在以下所有GUI代码前加上J，或使用另一个可替代文件(5.2b GUI与SwingOSC)...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1057' rel='bookmark' title='Permanent Link: SuperCollider：互动'>SuperCollider：互动</a><small>通过鼠标、键盘、MIDI、音频输入等进行互动 让我们现在先打开localhost服务器： ( Server.default=s=Server.local; s.boot; ) MouseX/Y 运用鼠标作为一个控制器是一个与patch互动的快速简单的方式 // 基于参数的变化方式...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1053' rel='bookmark' title='Permanent Link: SuperCollider：合成器定义'>SuperCollider：合成器定义</a><small>SynthDef {}.play 标志法并非SuperCollider 3的首选标记法，但他却允许我们对合成快速上手。从现在起，你常看到的都将是使用SynthDef结构定义的UGen网络。然后很多合成都是由一个单独的SynthDef来创建，这对于制造一堆类似的声音和其它颗粒以及整体进程是尤其重要的。 SynthDef = Synthesizer Definition（合成器定义） 为了在SC中合成声音，你必须为UGen网络用编程语言写一个秘诀（recipe）。这个秘诀由一个特殊的语言结构写就而成，SynthDef。 SynthDef(\sine,...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1047' rel='bookmark' title='Permanent Link: SuperCollider：数组'>SuperCollider：数组</a><small>SuperCollider有很多收集(collection)类，但对于一些简单的任务来说，你往往可以通过在方括号内定义数据的数组（Array）来实现： a= [5,6,7,8,9,10]; 有时我们需要更清晰的建构数据列，并且我们可以书写我们自己的函数来生成数据： a= Array.fill(6, {arg i; i+5}); 你将会在今后渐渐熟悉收集类比如数组的用法，但现在我将首先展示一些小窍门给你尝尝鲜(逐行运行一下逐行，在post窗口内观察结果)。...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1019' rel='bookmark' title='Permanent Link: SuperCollider：调制合成'>SuperCollider：调制合成</a><small>Server.default=s=Server.internal; s.boot; // 这个使用了Lance Putnam的频率范围。我将始终在后台运行它 // 以为我们描绘我们探索声音的图释 FreqScope.new 在调制合成（modulation synthesis）中，一个波，载体，被调制器所影响。...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ccttours.com/blog/?feed=rss2&amp;p=1091</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>加入论坛</title>
		<link>http://www.ccttours.com/blog/?p=1087</link>
		<comments>http://www.ccttours.com/blog/?p=1087#comments</comments>
		<pubDate>Wed, 24 Mar 2010 10:23:20 +0000</pubDate>
		<dc:creator>ww</dc:creator>
				<category><![CDATA[Asides]]></category>
		<category><![CDATA[Changelog]]></category>

		<guid isPermaLink="false">http://www.ccttours.com/blog/?p=1087</guid>
		<description><![CDATA[点击进入。 其实主要目的主要是我做一些日常学习中的零碎笔记，方便以后查找，没有特定成系列的主题。当然也欢迎你一同参与讨论。 No related posts.


No related posts.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ccttours.com/blog/?page_id=1086" target="_self">点击进入</a>。</p>
<p>其实主要目的主要是我做一些日常学习中的零碎笔记，方便以后查找，没有特定成系列的主题。当然也欢迎你一同参与讨论。</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.ccttours.com/blog/?feed=rss2&amp;p=1087</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>SuperCollider：调度</title>
		<link>http://www.ccttours.com/blog/?p=1071</link>
		<comments>http://www.ccttours.com/blog/?p=1071#comments</comments>
		<pubDate>Sun, 14 Mar 2010 07:03:24 +0000</pubDate>
		<dc:creator>ww</dc:creator>
				<category><![CDATA[SuperCollider3]]></category>
		<category><![CDATA[SuperCollider学习笔记]]></category>

		<guid isPermaLink="false">http://www.ccttours.com/blog/?p=1071</guid>
		<description><![CDATA[Scheduling 一些相关的帮助文档 [SystemClock] [TempoClock] [AppClock] // 载入我先——这个声音将被用于记下来的调度小样 // 我们现在运用SynthDef和Synth，这很重要 // 注意doneAction！ ( SynthDef(\bleep,{ arg out=0, note=60, amp=0.5, pan=0.0; var freq, env; freq = note.midicps; env = EnvGen.ar( Env([0,1,1,0],[0.01, 0.1, 0.2]), levelScale:amp, doneAction:2 ); Out.ar(out, Pan2.ar(Blip.ar(freq) * env, pan) ) }).load(s); ) 这个SynthDef使用了一个doneAction为2的包络，这使得一个合成器由定义制造，并且在包络结束后释放（deallocate）自身。这至关重要，否则在我们载入它后它会永远挂在那！ 你可以非常方便的建立一个重复机制。全局的SystemClock以秒进行调度。SystemClock是最值得信赖的时钟。 // 从距现在0秒开始一个进程，之后每1秒重复一次 ( SystemClock.sched(0.0,//从距现在0秒开始一个进程，即，立马 {//一个表明你希望调度什么的函数 Synth(\bleep); 1 //每10秒重复一次 } ) ) （最后从函数返回的东西是函数被调用的间隔时间；你可以返回一个数字，或nil；nil将停止调度） [...]


Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1091' rel='bookmark' title='Permanent Link: SuperCollider：例程和任务'>SuperCollider：例程和任务</a><small>在开始本课之前，请确保你已载入了上一课的\bleep SynthDef。 目前为止，调度一直由为一个特定的时间调度一个函数来达到。为了遍历一个程序不同的阶段，一个具备一定量执行阶段的函数是很有帮助的。通过.value，它并非一次性被全部评估，但能够在每个多阶段中“产出（yield）”它的当前值。 这是一个例程（routine）： ( r=Routine({ 1.yield; 2.yield; 3.yield; })...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1053' rel='bookmark' title='Permanent Link: SuperCollider：合成器定义'>SuperCollider：合成器定义</a><small>SynthDef {}.play 标志法并非SuperCollider 3的首选标记法，但他却允许我们对合成快速上手。从现在起，你常看到的都将是使用SynthDef结构定义的UGen网络。然后很多合成都是由一个单独的SynthDef来创建，这对于制造一堆类似的声音和其它颗粒以及整体进程是尤其重要的。 SynthDef = Synthesizer Definition（合成器定义） 为了在SC中合成声音，你必须为UGen网络用编程语言写一个秘诀（recipe）。这个秘诀由一个特殊的语言结构写就而成，SynthDef。 SynthDef(\sine,...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1047' rel='bookmark' title='Permanent Link: SuperCollider：数组'>SuperCollider：数组</a><small>SuperCollider有很多收集(collection)类，但对于一些简单的任务来说，你往往可以通过在方括号内定义数据的数组（Array）来实现： a= [5,6,7,8,9,10]; 有时我们需要更清晰的建构数据列，并且我们可以书写我们自己的函数来生成数据： a= Array.fill(6, {arg i; i+5}); 你将会在今后渐渐熟悉收集类比如数组的用法，但现在我将首先展示一些小窍门给你尝尝鲜(逐行运行一下逐行，在post窗口内观察结果)。...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1035' rel='bookmark' title='Permanent Link: SuperCollider：编程'>SuperCollider：编程</a><small>SC编程提示 SuperCollider是一门完整的编程语言，学习如何写一些标准的编程操作代码是大有裨益的。 SuperCollider语法 SuperCollider是一门基于Smalltalk的面向对象的编程语言。他具备一门计算机语言标准的工具，我将在此为你概述。 注释 // 这是一条注释 /* 这同样是一条注释 */...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1031' rel='bookmark' title='Permanent Link: SuperCollider：更多合成案例'>SuperCollider：更多合成案例</a><small>丰满合唱 (Fat Chorus) 我们制作一个彼此间轻微去谐(detune)的振荡器数组，并将它们混入单声道。 {Mix(Saw.ar([440,443,437],0.1))}.scope // 合唱 结合了AM、FM、合唱以及包络的更复杂的声音 ( {...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><span style="color: #00ff00;"><strong>Scheduling</strong></span></p>
<p>一些相关的帮助文档<br />
[<span style="color: #0000ff;">SystemClock</span>]<br />
[<span style="color: #0000ff;">TempoClock</span>]<br />
[<span style="color: #0000ff;">AppClock</span>]</p>
<pre class="brush:jfx">// 载入我先——这个声音将被用于记下来的调度小样
// 我们现在运用SynthDef和Synth，这很重要
// 注意doneAction！
(
SynthDef(\bleep,{ arg out=0, note=60, amp=0.5, pan=0.0;
	var freq, env;
	freq = note.midicps;
	env = EnvGen.ar(
					Env([0,1,1,0],[0.01, 0.1, 0.2]),
					levelScale:amp,
					doneAction:2
				);
	Out.ar(out,
		Pan2.ar(Blip.ar(freq) * env, pan)
	)
}).load(s);
)</pre>
<p>这个<span style="color: #0000ff;"><em>SynthDef</em></span>使用了一个<em>doneAction</em>为2的包络，这使得一个合成器由定义制造，并且在包络结束后释放（deallocate）自身。这至关重要，否则在我们载入它后它会永远挂在那！</p>
<hr />你可以非常方便的建立一个重复机制。全局的<span style="color: #0000ff;"><em>SystemClock</em></span>以秒进行调度。<span style="color: #0000ff;"><em>SystemClock</em></span>是最值得信赖的时钟。</p>
<pre class="brush:jfx">// 从距现在0秒开始一个进程，之后每1秒重复一次
(
SystemClock.sched(0.0,//从距现在0秒开始一个进程，即，立马
	{//一个表明你希望调度什么的函数
		Synth(\bleep);
		1		//每10秒重复一次
	}
)
)</pre>
<p>（最后从函数返回的东西是函数被调用的间隔时间；你可以返回一个数字，或<em>nil</em>；<em>nil</em>将停止调度）</p>
<p><span id="more-1071"></span></p>
<p>在你按下cmd+句号键的同时，所有调度也都将停止。</p>
<hr />下边是一个类似的例子，将引数传递入每个新的<span style="color: #0000ff;"><em>Synth</em></span>：</p>
<pre class="brush:jfx">(
SystemClock.sched(1.0,//1秒后开始
	{
		Synth(\bleep,
			[ //为Synth传递引数
				\note, (#[0,2,4,5,7,9] + 48).choose,
				\pan, 1.0.rand2
			]
		);
	// 随机选择重复时间
	[0.25,0.3,0.7,0.1].choose
})
)</pre>
<p>#[0,2,4,5,7,9]造了一个固定的（非动态）数组，因此稍微便宜些（cheaper）。</p>
<p>如果你乐意以秒来调度一切，并自己搞出任何节奏表述，那么你已经准备好了。</p>
<hr />欲获取当前<span style="color: #0000ff;"><em>SystemClock</em></span>时间，你可以使用这段代码：</p>
<pre class="brush:jfx">Main.elapsedTime; //给一个从程序开启到现在的时间</pre>
<p><em>schedAbs</em>遵守一个绝对时间</p>
<pre class="brush:jfx">(
SystemClock.schedAbs(Main.elapsedTime+1.0,// 开始于绝对系统时钟时间+1秒
	{
		Synth(\bleep,
			[ //为Synth传递引数
				\note, (#[0,2,4,5,7,9] + 48).choose,
				\pan, 1.0.rand2
			]
		);
	// 随机选择重复时间
	[0.25,0.3,0.7,0.1].choose		

})
)</pre>
<hr />在很多情况下，你喜欢在一定的tempo下工作，（例如，你希望根据拍子调度事件）</p>
<p><a href="http://www.ccttours.com/blog/wp-content/uploads/2010/03/tempo_slider.gif" rel="lightbox[1071]"><img class="alignright size-full wp-image-1075" title="tempo_slider" src="http://www.ccttours.com/blog/wp-content/uploads/2010/03/tempo_slider.gif" alt="" width="183" height="59" /></a>SuperCollider以每秒的拍数（bps）而不是每分钟几拍（bpm）来恒量tempo，例如：<br />
1 bps = 60 bpm<br />
1.6666667 bps = 100 bpm<br />
2 bps = 120 bpm<br />
2.4 bps = 144 bpm<br />
3 bps = 180 bpm<br />
（二者的相互转换是乘60除60的关系，很简单）</p>
<hr />基于拍子的调度，我们使用<span style="color: #0000ff;"><em>TempoClock</em></span>：</p>
<pre class="brush:jfx">(
var t;

t = TempoClock(2); // 以120bpm（2bps）的tempo构造一个速度钟

t.schedAbs(0, { arg ... args;	// 立马开始
				args.postln;	//  向我们的事件函数post输入引数
							//  (will post logical time in beats, elapsed time
							//  in seconds of enclosing thread and this clock)

				Synth(\bleep);// 制造哔哔声
				1.0	// 重新调度每一拍
})
)</pre>
<p><span style="color: #0000ff;"><em>TempoClock</em></span>的作用是对速度和节奏型的改变做出适当的反应。</p>
<hr />还有一个自动可用的<span style="color: #0000ff;"><em>TempoClock</em></span></p>
<pre class="brush:jfx">t= TempoClock.default;</pre>
<p>你可以问一个速度时钟它在哪；这个默认的时钟可能到目前为止已经运行了很长一段时间。</p>
<pre class="brush:jfx">t.elapsedBeats;  // 我们确切位于什么逻辑拍时间（logical beat time）

t.bar;  // 我们在第几小节 (默认节奏型为4/4)

t.elapsedBeats.ceil; // 找到下一拍

t.elapsedBeats.floor; // 找到最后一拍</pre>
<hr />
<pre class="brush:jfx">(
var t;

t = TempoClock.default;
// 默认的TempoClock可能已经运行了很久
// 所以你应当从下一拍开始

t.schedAbs(t.elapsedBeats.ceil, // 从下一个重拍开始
	{
		Synth(\bleep, [\note, [36,40,43].choose, \pan, 1.0.rand2]);
		[0.25,0.5,1.0, nil].wchoose([0.5,0.4,0.05,0.05]); // 加权选择
                // 从数组选择数字重复- nil意味着停止
	})
)</pre>
<p><em>wchoose</em>允许我们做一个加权选择，偏重第二个数组（所有数字相加不能超过1，并且加权数的数量必须与待选取数数量相同），从第一个数组中选取数组。</p>
<pre class="brush:jfx">[1,2,3,4].wchoose([0.8,0.1,0.07,0.03]);</pre>
<hr />如果你请求一个已经发生的拍子，调度器将尽快抓取事件队列：</p>
<pre class="brush:jfx">(
var u;

u = TempoClock(1.2);	// 以1.2bps的速度构造我们的TempoClock

// 在5拍前开始!
u.schedAbs(-5.0, { Synth(\bleep);  0.5 });
// 因为抓取的缘故，你会听到事件的爆音
SystemClock.sched(5.0, {u.clear}); // 从现在起5秒后调度一个停止.
)</pre>
<hr />如果你在某个点改变速度，过度将是平滑的：</p>
<pre class="brush:jfx">(
var u;

u = TempoClock(3.5);

u.schedAbs(0.0, { arg beat, sec;
		[beat,sec].postln;
		Synth(\bleep, [\note, rrand(60.0,67.0)]);
		0.5
});

u.schedAbs(8.0, { u.tempo_(2); nil }); // 调度速度改变

u.schedAbs(12.0, { u.tempo_(7); nil }); // 调度速度改变

u.schedAbs(17.2, { u.tempo_(1); nil }); // 调度速度改变

SystemClock.sched(7.0, { u.clear; }); // 从现在起7秒后调度一个停止.
)</pre>
<hr />逐行运行下列代码：</p>
<pre class="brush:jfx">t=TempoClock(2);

t.tempo; // 获取当前速度

t.tempo_(4); //设立当前速度(唯一的不同是下划线)

t.tempo;

t.tempo= 2.3; //同样赋值新的速度

t.tempo;</pre>
<hr />通过UI控制改变速率</p>
<pre class="brush:jfx">// 滑杆的范围始终是0.0～1.0，如此映射到代码
(
	var w,u,slid, button;

	w = SCWindow("tempo control test", Rect(100,100,200,40));
	slid = SCSlider(w, Rect(0,0,200,20));

	button = SCButton(w, Rect(60,20,40,20));
	button.states_([["kill"]]);

	w.front;

	slid.action_({u.tempo_(2*(slid.value)+1)});
	button.action_({u.clear; w.close;});

	u = TempoClock(1);

	u.schedAbs(0.0, { arg beat,sec;
		[beat,sec].postln;
		Synth(\bleep, [\note, rrand(60, 100)]);
		1.0
	});
)</pre>
<hr />你可以通过一次性建立两个时钟做多速度</p>
<pre class="brush:jfx">// 速度率为12:13
(
var u,v;

u = TempoClock(1.2);
v = TempoClock(1.3);

u.schedAbs(0, { Synth(\bleep, [\note, rrand(41.8,47.5), \pan, -0.5]);  1.0 });
v.schedAbs(0, { Synth(\bleep,[\pan, 0.5]);  1.0 });

SystemClock.sched(10.9, { u.clear; v.clear; }); // 从现在起10.9秒后调度一个停止.
)</pre>
<hr /><span style="color: #00ff00;"><strong>GUI和时钟的笔记</strong></span></p>
<p>UI们不能通过从<span style="color: #0000ff;"><em>SystemClock</em></span>的直接调用而更薪——操作系统的<span style="color: #0000ff;"><em>AppClock</em></span>必须被使用。下边是一个移动窗口的示范：</p>
<pre class="brush:jfx">// 在试图关闭窗口前，记得先按下cmd+句号键
(
var w, i;

	i = 0;

	w = SCWindow("My Window", Rect(100, 0, 200, 50));
	// 一个200*200的窗口出现在萤幕坐标(100, 0)的位置
	w.front;

	// 调度移动并改变窗口的尺寸
	AppClock.sched(0.0, {
		w.bounds_(Rect(100, (10 * i) % 500, rrand(200,400), 50));
		i=i+1;
		0.125
	});
)</pre>
<p>这将失败:</p>
<pre class="brush:jfx">// SystemClock.sched(0.0,{w.bounds_(Rect(100, (10*i)%500, 200,200)); i=i+1; 0.125});</pre>
<hr />这是一个很有用把戏；如果你在一个<span style="color: #0000ff;"><em>SystemClock</em></span>中，你可以像这样在尖括号内约束任何GUI调用：</p>
<pre class="brush:jfx">{
//GUI代码
}.defer</pre>
<p>在后台，这重新分配了到AppClock的命令。</p>
<hr />这样没问题，通过使用defer将命令传递到一个<span style="color: #0000ff;"><em>AppClock</em></span>：</p>
<pre class="brush:jfx">(
var w, i;

	i = 0;

	w = SCWindow("My Window", Rect(100, 0, 200, 200));
	// 一个200*200的窗口出现在萤幕坐标(100, 500)的位置
	w.front;

	SystemClock.sched(0.0, {

		{ w.bounds_(Rect(100, (10*i)%500, 200, 200)) }.defer; // defer扮演了SystemClock和AppClock之间的桥梁
		i=i+1;
		0.125
	});
)</pre>


<p>Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1091' rel='bookmark' title='Permanent Link: SuperCollider：例程和任务'>SuperCollider：例程和任务</a><small>在开始本课之前，请确保你已载入了上一课的\bleep SynthDef。 目前为止，调度一直由为一个特定的时间调度一个函数来达到。为了遍历一个程序不同的阶段，一个具备一定量执行阶段的函数是很有帮助的。通过.value，它并非一次性被全部评估，但能够在每个多阶段中“产出（yield）”它的当前值。 这是一个例程（routine）： ( r=Routine({ 1.yield; 2.yield; 3.yield; })...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1053' rel='bookmark' title='Permanent Link: SuperCollider：合成器定义'>SuperCollider：合成器定义</a><small>SynthDef {}.play 标志法并非SuperCollider 3的首选标记法，但他却允许我们对合成快速上手。从现在起，你常看到的都将是使用SynthDef结构定义的UGen网络。然后很多合成都是由一个单独的SynthDef来创建，这对于制造一堆类似的声音和其它颗粒以及整体进程是尤其重要的。 SynthDef = Synthesizer Definition（合成器定义） 为了在SC中合成声音，你必须为UGen网络用编程语言写一个秘诀（recipe）。这个秘诀由一个特殊的语言结构写就而成，SynthDef。 SynthDef(\sine,...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1047' rel='bookmark' title='Permanent Link: SuperCollider：数组'>SuperCollider：数组</a><small>SuperCollider有很多收集(collection)类，但对于一些简单的任务来说，你往往可以通过在方括号内定义数据的数组（Array）来实现： a= [5,6,7,8,9,10]; 有时我们需要更清晰的建构数据列，并且我们可以书写我们自己的函数来生成数据： a= Array.fill(6, {arg i; i+5}); 你将会在今后渐渐熟悉收集类比如数组的用法，但现在我将首先展示一些小窍门给你尝尝鲜(逐行运行一下逐行，在post窗口内观察结果)。...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1035' rel='bookmark' title='Permanent Link: SuperCollider：编程'>SuperCollider：编程</a><small>SC编程提示 SuperCollider是一门完整的编程语言，学习如何写一些标准的编程操作代码是大有裨益的。 SuperCollider语法 SuperCollider是一门基于Smalltalk的面向对象的编程语言。他具备一门计算机语言标准的工具，我将在此为你概述。 注释 // 这是一条注释 /* 这同样是一条注释 */...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1031' rel='bookmark' title='Permanent Link: SuperCollider：更多合成案例'>SuperCollider：更多合成案例</a><small>丰满合唱 (Fat Chorus) 我们制作一个彼此间轻微去谐(detune)的振荡器数组，并将它们混入单声道。 {Mix(Saw.ar([440,443,437],0.1))}.scope // 合唱 结合了AM、FM、合唱以及包络的更复杂的声音 ( {...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ccttours.com/blog/?feed=rss2&amp;p=1071</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SuperCollider：图形化用户界面</title>
		<link>http://www.ccttours.com/blog/?p=1064</link>
		<comments>http://www.ccttours.com/blog/?p=1064#comments</comments>
		<pubDate>Wed, 10 Mar 2010 14:11:12 +0000</pubDate>
		<dc:creator>ww</dc:creator>
				<category><![CDATA[SuperCollider3]]></category>
		<category><![CDATA[SuperCollider学习笔记]]></category>

		<guid isPermaLink="false">http://www.ccttours.com/blog/?p=1064</guid>
		<description><![CDATA[SC3的图形化用户界面类 Server.default=s=Server.local; SC3的GUI类包括量程（Range）和2D滑杆，拖放工具，下拉列表，多滑杆和其它很多很多，， 同时按下shift+cmd+N (Mac机)看看可选的GUI小工具。 GD_ToolboxWindow() // 展示GUI建设的第三方类 在这份教程中，SwingOSC用户（这包括了使用PsyCollider的任何人）将需要在以下所有GUI代码前加上J，或使用另一个可替代文件(5.2b GUI与SwingOSC) SwingOSC.default.boot; 做一个窗口 // Rect定义初始的萤幕位置和窗口大小 // screenx,screeny, windowwidth, windowheight是其引数 // 原点(0,0)为萤幕左下角 ( var w; w=SCWindow("My Window", Rect(100,500,200,200)); // 一个200*200的窗口出现在萤幕坐标点(100, 500) w.front; // 这行代码显示窗口 ) 注意，萤幕的原点坐标(0,0)在萤幕左下角，相对的，窗口坐标点(100,500)也在窗口左下角。 我们为我们的窗口加入控制，定义它们使用的参数。我们在窗口内再次使用一个Rect新建一个控制器，并决定它在窗口内的位置和大小。 ( var w, slid; w=SCWindow("My Window", Rect(100,500,200,200)); //一个200*200的窗口出现在萤幕坐标点(100, 500) slid=SCSlider(w,Rect(10,10,150,40)); //一个基础的滑杆对象 // 这是收回(callback)——任何时候当你移动滑杆，这个函数都将被调用 slid.action_({slid.value.postln;}); w.front; ) 注意滑杆默认的范围是0.0～1.0。 对此来说，ControlSpec是一个很有帮助的UGen，它可以将默认的范围转变到任何想要的范围。 ( var [...]


Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1091' rel='bookmark' title='Permanent Link: SuperCollider：例程和任务'>SuperCollider：例程和任务</a><small>在开始本课之前，请确保你已载入了上一课的\bleep SynthDef。 目前为止，调度一直由为一个特定的时间调度一个函数来达到。为了遍历一个程序不同的阶段，一个具备一定量执行阶段的函数是很有帮助的。通过.value，它并非一次性被全部评估，但能够在每个多阶段中“产出（yield）”它的当前值。 这是一个例程（routine）： ( r=Routine({ 1.yield; 2.yield; 3.yield; })...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1057' rel='bookmark' title='Permanent Link: SuperCollider：互动'>SuperCollider：互动</a><small>通过鼠标、键盘、MIDI、音频输入等进行互动 让我们现在先打开localhost服务器： ( Server.default=s=Server.local; s.boot; ) MouseX/Y 运用鼠标作为一个控制器是一个与patch互动的快速简单的方式 // 基于参数的变化方式...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1053' rel='bookmark' title='Permanent Link: SuperCollider：合成器定义'>SuperCollider：合成器定义</a><small>SynthDef {}.play 标志法并非SuperCollider 3的首选标记法，但他却允许我们对合成快速上手。从现在起，你常看到的都将是使用SynthDef结构定义的UGen网络。然后很多合成都是由一个单独的SynthDef来创建，这对于制造一堆类似的声音和其它颗粒以及整体进程是尤其重要的。 SynthDef = Synthesizer Definition（合成器定义） 为了在SC中合成声音，你必须为UGen网络用编程语言写一个秘诀（recipe）。这个秘诀由一个特殊的语言结构写就而成，SynthDef。 SynthDef(\sine,...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1047' rel='bookmark' title='Permanent Link: SuperCollider：数组'>SuperCollider：数组</a><small>SuperCollider有很多收集(collection)类，但对于一些简单的任务来说，你往往可以通过在方括号内定义数据的数组（Array）来实现： a= [5,6,7,8,9,10]; 有时我们需要更清晰的建构数据列，并且我们可以书写我们自己的函数来生成数据： a= Array.fill(6, {arg i; i+5}); 你将会在今后渐渐熟悉收集类比如数组的用法，但现在我将首先展示一些小窍门给你尝尝鲜(逐行运行一下逐行，在post窗口内观察结果)。...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1019' rel='bookmark' title='Permanent Link: SuperCollider：调制合成'>SuperCollider：调制合成</a><small>Server.default=s=Server.internal; s.boot; // 这个使用了Lance Putnam的频率范围。我将始终在后台运行它 // 以为我们描绘我们探索声音的图释 FreqScope.new 在调制合成（modulation synthesis）中，一个波，载体，被调制器所影响。...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><strong>SC3的图形化用户界面类</strong></p>
<pre class="brush:jfx">Server.default=s=Server.local;</pre>
<p>SC3的GUI类包括量程（Range）和2D滑杆，拖放工具，下拉列表，多滑杆和其它很多很多，，<br />
<span id="more-1064"></span></p>
<p>同时按下shift+cmd+N (Mac机)看看可选的GUI小工具。</p>
<pre class="brush:jfx">GD_ToolboxWindow()	// 展示GUI建设的第三方类</pre>
<p>在这份教程中，SwingOSC用户（这包括了使用PsyCollider的任何人）将需要在以下所有GUI代码前加上J，或使用另一个可替代文件(5.2b GUI与SwingOSC)</p>
<pre class="brush:jfx">SwingOSC.default.boot;</pre>
<hr />
<p>做一个窗口</p>
<pre class="brush:jfx">// Rect定义初始的萤幕位置和窗口大小
// screenx,screeny, windowwidth, windowheight是其引数
// 原点(0,0)为萤幕左下角
(
var w;

w=SCWindow("My Window", Rect(100,500,200,200));
// 一个200*200的窗口出现在萤幕坐标点(100, 500)

w.front; // 这行代码显示窗口
)</pre>
<p>注意，萤幕的原点坐标(0,0)在萤幕左下角，相对的，窗口坐标点(100,500)也在窗口左下角。</p>
<hr />
<p>我们为我们的窗口加入控制，定义它们使用的参数。我们在窗口内再次使用一个<span style="color: #0000ff;"><em>Rect</em></span>新建一个控制器，并决定它在窗口内的位置和大小。</p>
<pre class="brush:jfx">(
var w, slid;

w=SCWindow("My Window", Rect(100,500,200,200));
//一个200*200的窗口出现在萤幕坐标点(100, 500)

slid=SCSlider(w,Rect(10,10,150,40)); //一个基础的滑杆对象 

// 这是收回(callback)——任何时候当你移动滑杆，这个函数都将被调用
slid.action_({slid.value.postln;});

w.front;
)</pre>
<p>注意滑杆默认的范围是0.0～1.0。</p>
<hr />
<p>对此来说，<span style="color: #0000ff;"><em>ControlSpec</em></span>是一个很有帮助的UGen，它可以将默认的范围转变到任何想要的范围。</p>
<pre class="brush:jfx">(
var w, slid, cs;

w=SCWindow("My Window", Rect(100,500,200,200));
//一个200*200的窗口出现在萤幕坐标点(100, 500)

slid=SCSlider(w,Rect(10,10,150,40));

//引数为最小值、最大值、warp(映射函数)、递增量和起始值
cs= ControlSpec(20, 20000, 'exp', 10, 1000); 

slid.action_({cs.map(slid.value).postln;}); //map to the desired range

w.front;
)</pre>
<hr />
<div id="attachment_1065" class="wp-caption alignnone" style="width: 152px"><a href="http://www.ccttours.com/blog/wp-content/uploads/2010/03/2d-slide.gif" rel="lightbox[1064]"><img src="http://www.ccttours.com/blog/wp-content/uploads/2010/03/2d-slide.gif" alt="2d slide" title="2d slide" width="142" height="162" class="size-full wp-image-1065" /></a><p class="wp-caption-text">2d slide</p></div>
<p>运用2D滑杆进行声音合成的的小样</p>
<pre class="brush:jfx">(
SynthDef(\filterme,
{arg freq=1000, rq=0.5;
Out.ar(0,
Pan2.ar(
BPF.ar(Impulse.ar(LFNoise0.kr(15,500,1000),0.1, WhiteNoise.ar(2)),freq,rq)
))
}).load(s)
)

(
var w, slid2d, syn;

w=SCWindow("My Window", Rect(100,300,200,200));
slid2d= SC2DSlider(w,Rect(5,5,175,175));

syn=Synth(\filterme);

slid2d.action_({
[slid2d.x, slid2d.y].postln;
// 我在这做自己的映射，而不是使用ControlSpec
syn.set(\freq,100+(10000*slid2d.y),\rq,0.01+(0.09*slid2d.x));
});

w.front;

w.onClose={syn.free;};
)</pre>
<hr />
<p>更进一步的探索：<br />
要尝试拖放和其它UI工具，可以打开SC范例文件夹内的GUI examples文件夹查阅。</p>
<hr />
<pre class="brush:jfx">(
// 创建一个含一些数字盒的GUI窗口
// 你可以在按下cmd键的同时鼠标左键
// 拖动一个数字到另一个数字上以替换后者的值
var w, n, f, s;
w = SCWindow("number box test", Rect(128, 64, 260, 80));
w.view.decorator = f = FlowLayout(w.view.bounds);

n = SCNumberBox(w, Rect(0,0,80,24));
n.value = 123;

n = SCNumberBox(w, Rect(0,0,80,24));
n.value = 456;

n = SCDragBoth(w, Rect(0,0,80,24));
n.object = 789;

f.nextLine;

s = SCSlider(w, Rect(0,0,240,24));

w.front;
)</pre>
<hr />
<p>同样的，还有其它一些有趣的GUI对象的帮助文档：</p>
<p>赞许一下——很多更有趣的GUI对象是由Jan Trutzschler引入SuperCollider的。<br />
[<span style="color: #0000ff;">SCMultiSliderView</span>]<br />
[<span style="color: #0000ff;">SCEnvelopeView</span>]</p>
<p>还有一些媒体预览对象<br />
[<span style="color: #0000ff;">SCSoundFileView</span>]</p>
<pre class="brush:jfx">(
w = SCWindow.new("soundfile test", Rect(200, 200, 800, 400));
a = SCSoundFileView.new(w, Rect(20,20, 700, 60));

f = SoundFile.new;
f.openRead("sounds/a11wlk01.wav");

a.soundfile_(f);
a.read(0, f.numFrames);

a.gridOn_(false);

w.front;
)</pre>
<hr />
<p>[<span style="color: #0000ff;">SCMovieView</span>]</p>
<pre class="brush:jfx">(
z = SCWindow.new.front;
z.view.decorator = FlowLayout(z.view.bounds);

a=SCMovieView(z,Rect(0,0, 300,300));

//you need to put a path to a video file on your hard drive
a.path_("/Volumes/data/video/icmc/klippav-duck_cutup.mov")
)

a.stepForward</pre>
<hr />
<p><span style="color: #0000ff;">Pen</span>类可作为一个萤幕绘制工具</p>
<pre class="brush:jfx">(
var w, h = 400, v = 400, seed = Date.seed, run = true;
w = SCWindow("subdiv", Rect(400, 200, h, v));
w.view.background = Color.rand;
w.onClose = { run = false };
w.front;
w.drawHook = { var done, nextx, nexty, yellowness, penwidth;

nextx=0;
nexty=0;
yellowness=rrand(0.0,1.0);

penwidth=rrand(0.5,1.5);

//done=0;
	Pen.use {

		200.do({arg i;
		var lastx,lasty;
		lastx=nextx;
		lasty=nexty;

		nextx=nextx+rrand(1,20);
		nexty=nexty+rrand(1,40);

		if(nextx&gt;=h, {nextx=nextx%h});
		if(nexty&gt;=v, {nexty=nexty%v});

		penwidth=(penwidth+(0.2.rand2))%8.0;

		Pen.width= penwidth;

		yellowness= (yellowness+(0.1.rand2))%2.0;

		Color.yellow(yellowness).set;

		Pen.beginPath;
		Pen.line(Point(lastx,lasty),Point(nextx,nexty));
		Pen.rotate(rand(i%40));
		Pen.line(Point(lastx,lasty),Point(nextx,nexty));
		Pen.rotate(rand(i%40));
		Pen.line(Point(lastx,lasty),Point(nextx,nexty));
		Pen.rotate(rand(i%40));
		Pen.line(Point(lastx,lasty),Point(nextx,nexty));
			Pen.stroke;

		//Pen.fillRect(Rect(h.rand,v.rand,rrand(1,50),rrand(1,50)))

		});
	};

};

//{ while { run } { w.refresh; 3.wait; } }.fork(AppClock)

)</pre>
<p>你同样可以用它来进行文字处理&#8230;.</p>
<pre class="brush:jfx">(
var linetext, drawletter;
var w, h = 800, v = 60, seed = Date.seed, run = true;
var time, name, sourcestring;
var yellowness, penwidth;

//name=[\s,\u,\p,\e,\r,\c,\o,\l,\l,\i,\d,\e,\r];

//sourcestring= "any lower case text";

sourcestring= "welcome to supercollider";

name=Array.fill(sourcestring.size,{arg i; sourcestring[i].asSymbol});

time=0;

linetext= (
'a':[[[0,1],[0.5,0]],[[0.5,0],[1,1]],[[0.25,0.5],[0.75,0.5]]],
'b':[[[0,1],[0,0]],[[0,1],[1,1]],[[0,0],[1,0]],[[0,0.5],[0.75,0.5]],[[0.75,0.5],[1,0.75]],[[0.75,0.5],[1,0.25]],[[1,0.75],[1,1]],[[1,0.25],[1,0]]],
'c':[[[0,1],[0,0]],[[0,0],[1,0]],[[0,1],[1,1]]],
'd':[[[0,1],[0,0]],[[0,0],[0.75,0]],[[0,1],[0.75,1]],[[0.75,1],[1,0.75]],[[0.75,0],[1,0.25]],[[1,0.25],[1,0.75]]],
'e':[[[0,0],[0,1]],[[0,0],[1,0]],[[0,1],[1,1]],[[0,0.5],[1,0.5]]],
'f':[[[0,0],[0,1]],[[0,0],[1,0]],[[0,0.5],[1,0.5]]],
'g':[[[0,1],[0,0]],[[0,0],[1,0]],[[0,1],[1,1]],[[1,1],[1,0.5]],[[0.5,0.5],[1,0.5]]],
'h':[[[0,1],[0,0]],[[0,0.5],[1,0.5]],[[1,1],[1,0]]],
'i':[[[0,0],[1,0]],[[0.5,0],[0.5,1]],[[0,1],[1,1]]],
'j':[[[0,0],[1,0]],[[0.5,0],[0.5,1]],[[0,1],[0.5,1]]],
'k':[[[0,1],[0,0]],[[0,0.5],[1,1]],[[0,0.5],[1,0]]],
'l':[[[0,1],[0,0]],[[0,1],[1,1]]],
'm':[[[0,1],[0,0]],[[0,0],[0.5,0.5]],[[0.5,0.5],[1,0]],[[1,0],[1,1]]],
'n':[[[0,1],[0,0]],[[0,0],[1,1]],[[1,1],[1,0]]],
'o':[[[0,1],[0,0]],[[0,0],[1,0]],[[0,1],[1,1]],[[1,0],[1,1]]],
'p':[[[0,0],[0,1]],[[0,0],[1,0]],[[0,0.5],[1,0.5]],[[1,0],[1,0.5]]],
'q':[[[0,0],[0,0.75]],[[0,0],[0.75,0]],[[0,0.75],[0.75,0.75]],[[0.75,0],[0.75,0.75]],[[0.5,0.5],[1,1]]],
'r':[[[0,0],[0,1]],[[0,0],[1,0]],[[0,0.5],[1,0.5]],[[1,0],[1,0.5]],[[0,0.5],[1,1]]],
's':[[[0,0],[0,0.5]],[[0,0],[1,0]],[[0,1],[1,1]],[[0,0.5],[1,0.5]],[[1,0.5],[1,1]]],
't':[[[0,0],[1,0]],[[0.5,0],[0.5,1]]],
'u':[[[0,1],[0,0]],[[0,1],[1,1]],[[1,0],[1,1]]],
'v':[[[0,0],[0.5,1]],[[0.5,1],[1,0]]],
'w':[[[0,0],[0.25,1]],[[0.25,1],[0.5,0.5]],[[0.5,0.5],[0.75,1]],[[0.75,1],[1,0]]],
'x':[[[0,0],[1,1]],[[0,1],[1,0]]],
'y':[[[0,0],[0.5,0.5]],[[0.5,0.5],[1,0]],[[0.5,0.5],[0.5,1]]],
'z':[[[0,1],[1,0]],[[0,0],[1,0]],[[0,1],[1,1]]],
(" ".asSymbol):[[[0,1],[1,1]],[[0,0.8],[0,1]],[[1,0.8],[1,1]]]
);

w = SCWindow("welcome", Rect(40, 500, h, v));
w.view.background = Color.blue(0.5);
w.onClose = { run = false };
w.front;

drawletter={arg which, startx, starty, xscale=100, yscale,prop=1.0;
var data;

yscale= yscale ? xscale;

data= linetext[which];

prop=(round((data.size)*prop).asInteger).max(1);

prop.do({arg i;
var val=data[i];

Pen.beginPath;
Pen.line(Point(startx+(xscale*val[0][0]),starty+(yscale*val[0][1])),Point(startx+(xscale*val[1][0]),starty+(yscale*val[1][1])));
Pen.stroke;

});

};

yellowness=rrand(0.7,0.9);

penwidth=rrand(2,3);

w.drawHook = {

	Pen.use {var xoscil, xsizoscil,yoscil, todraw, usedtime;

		Pen.width= penwidth;
		Color.yellow(yellowness).set;

		usedtime=time.min(1.0);

		todraw=(round((name.size)*usedtime).asInteger).max(1);

		todraw.do({arg j;

		xoscil= sin(2*pi*time+(j*pi*0.13))*140/(1+(10*time));

		yoscil= sin(2*pi*time+(j*pi*0.03))*200/(1+(200*time));

		xsizoscil= time*5+5;
				drawletter.value(name[j],50+(25*j)+(xoscil),10+yoscil,xsizoscil,xsizoscil,usedtime);

		});
	};
};

{ while { time&lt;2.0 } { 

w.refresh;
time=(time+0.025); // %2.0;
0.05.wait; } }.fork(AppClock)
)</pre>


<p>Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1091' rel='bookmark' title='Permanent Link: SuperCollider：例程和任务'>SuperCollider：例程和任务</a><small>在开始本课之前，请确保你已载入了上一课的\bleep SynthDef。 目前为止，调度一直由为一个特定的时间调度一个函数来达到。为了遍历一个程序不同的阶段，一个具备一定量执行阶段的函数是很有帮助的。通过.value，它并非一次性被全部评估，但能够在每个多阶段中“产出（yield）”它的当前值。 这是一个例程（routine）： ( r=Routine({ 1.yield; 2.yield; 3.yield; })...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1057' rel='bookmark' title='Permanent Link: SuperCollider：互动'>SuperCollider：互动</a><small>通过鼠标、键盘、MIDI、音频输入等进行互动 让我们现在先打开localhost服务器： ( Server.default=s=Server.local; s.boot; ) MouseX/Y 运用鼠标作为一个控制器是一个与patch互动的快速简单的方式 // 基于参数的变化方式...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1053' rel='bookmark' title='Permanent Link: SuperCollider：合成器定义'>SuperCollider：合成器定义</a><small>SynthDef {}.play 标志法并非SuperCollider 3的首选标记法，但他却允许我们对合成快速上手。从现在起，你常看到的都将是使用SynthDef结构定义的UGen网络。然后很多合成都是由一个单独的SynthDef来创建，这对于制造一堆类似的声音和其它颗粒以及整体进程是尤其重要的。 SynthDef = Synthesizer Definition（合成器定义） 为了在SC中合成声音，你必须为UGen网络用编程语言写一个秘诀（recipe）。这个秘诀由一个特殊的语言结构写就而成，SynthDef。 SynthDef(\sine,...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1047' rel='bookmark' title='Permanent Link: SuperCollider：数组'>SuperCollider：数组</a><small>SuperCollider有很多收集(collection)类，但对于一些简单的任务来说，你往往可以通过在方括号内定义数据的数组（Array）来实现： a= [5,6,7,8,9,10]; 有时我们需要更清晰的建构数据列，并且我们可以书写我们自己的函数来生成数据： a= Array.fill(6, {arg i; i+5}); 你将会在今后渐渐熟悉收集类比如数组的用法，但现在我将首先展示一些小窍门给你尝尝鲜(逐行运行一下逐行，在post窗口内观察结果)。...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1019' rel='bookmark' title='Permanent Link: SuperCollider：调制合成'>SuperCollider：调制合成</a><small>Server.default=s=Server.internal; s.boot; // 这个使用了Lance Putnam的频率范围。我将始终在后台运行它 // 以为我们描绘我们探索声音的图释 FreqScope.new 在调制合成（modulation synthesis）中，一个波，载体，被调制器所影响。...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ccttours.com/blog/?feed=rss2&amp;p=1064</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SuperCollider：互动</title>
		<link>http://www.ccttours.com/blog/?p=1057</link>
		<comments>http://www.ccttours.com/blog/?p=1057#comments</comments>
		<pubDate>Mon, 08 Mar 2010 14:04:46 +0000</pubDate>
		<dc:creator>ww</dc:creator>
				<category><![CDATA[SuperCollider3]]></category>
		<category><![CDATA[SuperCollider学习笔记]]></category>

		<guid isPermaLink="false">http://www.ccttours.com/blog/?p=1057</guid>
		<description><![CDATA[通过鼠标、键盘、MIDI、音频输入等进行互动 让我们现在先打开localhost服务器： ( Server.default=s=Server.local; s.boot; ) MouseX/Y 运用鼠标作为一个控制器是一个与patch互动的快速简单的方式 // 基于参数的变化方式 // warp可以是'linear'或'exponential' MouseX.kr(leftval, rightval, warp) MouseY.kr(topscreenval, bottomscreenval, warp) 比较以下听力测试（小心，它们有点刺耳） {SinOsc.ar(MouseX.kr(20,20000, 'linear'),0,0.1)}.play 和 {SinOsc.ar(MouseY.kr(20,20000, 'exponential'),0,0.1)}.play 指数映射（exponential mapping）运用整个萤幕的空间面积，比线性那种强太多！ 如果你想将一个控制器限制在一个离散的（discrete）范围内，那么你可以使用Index UGen // indexing signal将之保持在一个范围内 // 数组必须是FloatArray，因此你才能将之建成[0,1,2].asSignal Index.kr(array, indexing signal) //有三种不同的状态 ( var vals, buf, s; s=Server.local; vals= [100,200,300]; buf=Buffer(s, vals.size, 1); //Buffers将在本文后半部分说明 // 分配并设置值 s.listSendMsg( buf.allocMsg( buf.setnMsg(0, vals) [...]


Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1091' rel='bookmark' title='Permanent Link: SuperCollider：例程和任务'>SuperCollider：例程和任务</a><small>在开始本课之前，请确保你已载入了上一课的\bleep SynthDef。 目前为止，调度一直由为一个特定的时间调度一个函数来达到。为了遍历一个程序不同的阶段，一个具备一定量执行阶段的函数是很有帮助的。通过.value，它并非一次性被全部评估，但能够在每个多阶段中“产出（yield）”它的当前值。 这是一个例程（routine）： ( r=Routine({ 1.yield; 2.yield; 3.yield; })...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1064' rel='bookmark' title='Permanent Link: SuperCollider：图形化用户界面'>SuperCollider：图形化用户界面</a><small>SC3的图形化用户界面类 Server.default=s=Server.local; SC3的GUI类包括量程（Range）和2D滑杆，拖放工具，下拉列表，多滑杆和其它很多很多，， 同时按下shift+cmd+N (Mac机)看看可选的GUI小工具。 GD_ToolboxWindow() // 展示GUI建设的第三方类 在这份教程中，SwingOSC用户（这包括了使用PsyCollider的任何人）将需要在以下所有GUI代码前加上J，或使用另一个可替代文件(5.2b GUI与SwingOSC)...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1053' rel='bookmark' title='Permanent Link: SuperCollider：合成器定义'>SuperCollider：合成器定义</a><small>SynthDef {}.play 标志法并非SuperCollider 3的首选标记法，但他却允许我们对合成快速上手。从现在起，你常看到的都将是使用SynthDef结构定义的UGen网络。然后很多合成都是由一个单独的SynthDef来创建，这对于制造一堆类似的声音和其它颗粒以及整体进程是尤其重要的。 SynthDef = Synthesizer Definition（合成器定义） 为了在SC中合成声音，你必须为UGen网络用编程语言写一个秘诀（recipe）。这个秘诀由一个特殊的语言结构写就而成，SynthDef。 SynthDef(\sine,...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1047' rel='bookmark' title='Permanent Link: SuperCollider：数组'>SuperCollider：数组</a><small>SuperCollider有很多收集(collection)类，但对于一些简单的任务来说，你往往可以通过在方括号内定义数据的数组（Array）来实现： a= [5,6,7,8,9,10]; 有时我们需要更清晰的建构数据列，并且我们可以书写我们自己的函数来生成数据： a= Array.fill(6, {arg i; i+5}); 你将会在今后渐渐熟悉收集类比如数组的用法，但现在我将首先展示一些小窍门给你尝尝鲜(逐行运行一下逐行，在post窗口内观察结果)。...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1019' rel='bookmark' title='Permanent Link: SuperCollider：调制合成'>SuperCollider：调制合成</a><small>Server.default=s=Server.internal; s.boot; // 这个使用了Lance Putnam的频率范围。我将始终在后台运行它 // 以为我们描绘我们探索声音的图释 FreqScope.new 在调制合成（modulation synthesis）中，一个波，载体，被调制器所影响。...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><span style="color: #800000;"><strong>通过鼠标、键盘、MIDI、音频输入等进行互动</strong></span></p>
<p>让我们现在先打开localhost服务器：</p>
<pre class="brush:jfx">(
Server.default=s=Server.local;
s.boot;
)</pre>
<p><span id="more-1057"></span></p>
<p><span style="color: #800000;"><strong><span style="text-decoration: underline;">MouseX/Y</span></strong></span><br />
运用鼠标作为一个控制器是一个与patch互动的快速简单的方式</p>
<pre class="brush:jfx">// 基于参数的变化方式
// warp可以是'linear'或'exponential'
MouseX.kr(leftval, rightval, warp)

MouseY.kr(topscreenval, bottomscreenval, warp)</pre>
<p>比较以下听力测试（小心，它们有点刺耳）</p>
<pre class="brush:jfx">{SinOsc.ar(MouseX.kr(20,20000, 'linear'),0,0.1)}.play</pre>
<p>和</p>
<pre class="brush:jfx">{SinOsc.ar(MouseY.kr(20,20000, 'exponential'),0,0.1)}.play</pre>
<p>指数映射（exponential mapping）运用整个萤幕的空间面积，比线性那种强太多！</p>
<hr />如果你想将一个控制器限制在一个离散的（discrete）范围内，那么你可以使用<span style="color: #0000ff;"><em>Index</em></span> UGen</p>
<pre class="brush:jfx">// indexing signal将之保持在一个范围内
// 数组必须是FloatArray，因此你才能将之建成[0,1,2].asSignal
Index.kr(array, indexing signal)</pre>
<pre class="brush:jfx">//有三种不同的状态
(
var vals, buf, s;

s=Server.local;

vals= [100,200,300];
buf=Buffer(s, vals.size, 1); //Buffers将在本文后半部分说明

// 分配并设置值
s.listSendMsg( buf.allocMsg( buf.setnMsg(0, vals) ));

{SinOsc.ar(Index.ar(buf.bufnum, MouseX.kr(0, vals.size+1)),0,0.2)}.play
)   // 萤幕的左、中、右部</pre>
<pre class="brush:jfx">(
var vals, buf, s;
var numharm,basefreq;

numharm=11; 	//和声的数量
basefreq=66;	//序列的基准频率

s=Server.local;

vals= basefreq*(Array.series(numharm,1,1));
buf=Buffer(s, vals.size, 1);

// 分配并设置值
s.listSendMsg( buf.allocMsg( buf.setnMsg(0, vals) ));

{SinOsc.ar(Index.kr(buf.bufnum,MouseX.kr(0,numharm)),0,0.1)}.play
)</pre>
<p>鼠标也可以被用来做触发器</p>
<pre class="brush:jfx">(
{
var trig,mx;
mx=MouseX.kr(0.0,1.0);
// 这个UGen比较mx与krate为0.5的持续信号的值
trig= mx&gt;0.5;

SinOsc.ar(440,0,0.1*trig)
}.play;
)</pre>
<hr />
<pre class="brush:jfx">(	// 在一个给定的范围触发
{
var trig,mx,my;
mx=MouseX.kr(0.0,1.0);
my=MouseY.kr(0.0,1.0);
// 在此，if是一个UGen，*与逻辑和相等
trig= if((mx&gt;0.3) * (mx&lt;0.5) * (my&gt;0.3) * (my&lt;0.7),1,0);
SinOsc.ar(440,0,0.1*trig)
}.play;
)</pre>
<hr />为了展示一个更深入展示这个原理的例子，这里我要使用我最喜欢的SC patch（James McCartney所写）之一：</p>
<pre class="brush:jfx">(
    // 弹奏吉他
    // 使用鼠标弹奏琴弦
{
	var pitch, mousex, out;
	pitch = [ 52, 57, 62, 67, 71, 76 ];   // e a d g b e弦
	mousex = MouseX.kr;
	out = Mix.fill(pitch.size, { arg i;
		var trigger, pluck, period, string;
		// 从0.25到0.75放置触发点
		trigger = HPZ1.kr(mousex &gt; (0.25 + (i * 0.1))).abs;
		pluck = PinkNoise.ar(Decay.kr(trigger, 0.05));
		period = pitch.at(i).midicps.reciprocal;
		string = CombL.ar(pluck, period, period, 4);
		Pan2.ar(string, i * 0.2 - 0.5);
	});
	LPF.ar(out, 12000);
	LeakDC.ar(out);
}.play;
)</pre>
<hr /><span style="color: #800000;"><strong><span style="text-decoration: underline;">键盘</span></strong></span><br />
你可以通过设置动作函数用键盘触发东西。这通常由GUI完成，但接下来是一个根据你输入的文本（也就是敲击键盘）来发声的例子：</p>
<pre class="brush:jfx">(
var doc;

SynthDef("typeofsound",{Out.ar(0,Line.kr(1,0,0.1,doneAction:2)*VarSaw.ar(Rand(100,1000),0,Rand(0.1,0.8),0.1))}).send(s);

doc = Document.current; //this text window you're reading from!
doc.keyDownAction_({arg ...args;
	[args[1],args[3]].postln;
	Synth("typeofsound");
});
)

//关闭之
(
Document.current.keyDownAction_(nil);
)</pre>
<hr /><strong><span style="color: #800000;"><span style="text-decoration: underline;">MIDI</span></span></strong><br />
要使用你的MIDI界面，你必须预置：</p>
<pre class="brush:jfx">MIDIClient.init</pre>
<p>要获取新进的MIDI信息，查看<span style="color: #0000ff;"><em>MIDIIn</em></span>帮助文档。</p>
<p>用户为特定的MIDI信息建立收回（callback）函数。</p>
<p>要向外发送MIDI信息，查看<span style="color: #0000ff;"><em>MIDIOut</em></span>帮助文档。</p>
<hr /><span style="color: #800000;"><strong><span style="text-decoration: underline;">音频输入（AudioIn</span>）</strong></span><br />
要获得当前的音频流，使用简单的<span style="color: #0000ff;"><em>AudioIn</em></span> UGen</p>
<pre class="brush:jfx">{ AudioIn.ar([1,2],0.5) }.play;     //立体声输入

{ AudioIn.ar(1,0.5) }.play;	      // mono on input channel 1</pre>
<p>因此，为实时音频建立效果器就变得很简单了：</p>
<pre class="brush:jfx">(
{ //环调制器
SinOsc.ar(MouseX.kr(0.001,110,'exponential' ))*AudioIn.ar([1,2],0.5)
}.play;	      // 立体声输入
)</pre>
<hr />SuperCollider对实时音频有一个振幅（Amplitude）追踪器和音调（Pitch）追踪器</p>
<pre class="brush:jfx">(
//使用输入的振幅控制脉冲的振幅
//使用耳机以防止反馈
{
	Pulse.ar(90, 0.3, Amplitude.kr(AudioIn.ar(1)))
}.play
)</pre>
<hr />你可以设置一个输入阀值以避免拾取到背景噪音</p>
<pre class="brush:jfx">(
{
var input,inputAmp,threshhold,gate;
var basefreq;

input = AudioIn.ar(1,0.1);
inputAmp = Amplitude.kr(input);
threshhold = 0.02;	// 噪音门限
gate = Lag.kr(inputAmp &gt; threshhold, 0.01);
(input * gate)
}.play;
)</pre>
<hr />
<div id="attachment_1058" class="wp-caption alignright" style="width: 140px"><a href="http://www.ccttours.com/blog/wp-content/uploads/2010/03/K2A.gif" rel="lightbox[1057]"><img class="size-full wp-image-1058 " title="K2A" src="http://www.ccttours.com/blog/wp-content/uploads/2010/03/K2A.gif" alt="K2A" width="130" height="128" /></a><p class="wp-caption-text">K2A比对</p></div>
<p>尽管你只需使用默认值就好，但音调追踪器有很多输入引数。它返回两个输出——被跟踪的频率以及一个显示其实否被锁定在某个周期上的信号。</p>
<p>如果你在Mac机上，你需要换回internal服务器来使用<em><strong>.scope</strong></em>——你可以同时开启internal和localhost服务器，但你可能还需要点击一下<span style="color: #808080;">-&gt; default</span>按钮。</p>
<pre class="brush:jfx">Server.internal.boot;</pre>
<p>展示输出——<span style="color: #0000ff;"><em>K2A</em></span>确保将控制率（control rate）信号转换为音频率（audio rate），因为一个合成器的最终输出必须为音频率。</p>
<pre class="brush:jfx">(
{
var freq, hasFreq;
# freq, hasFreq = Pitch.kr(AudioIn.ar(1,0.1));
[K2A.ar(freq*0.001), K2A.ar(hasFreq)]
}.scope
)</pre>
<hr />
<pre class="brush:jfx">(
{
	var in, amp, freq, hasFreq, out;
	in = Mix.ar(AudioIn.ar([1,2]));
	amp = Amplitude.kr(in, mul: 0.4);
	# freq, hasFreq = Pitch.kr(in);
	out = Mix.ar( LFTri.ar(freq * [0.5, 1, 2]) ) * amp;
	6.do({
		out = AllpassN.ar(out, 0.040, [0.040.rand,0.040.rand], 2)
	});
	out
}.play
)</pre>
<hr />
<pre class="brush:jfx">(
{
	var in, amp, freq, hasFreq, out;

	in = AudioIn.ar(1);
	amp = Amplitude.kr(in, mul: 0.4);
	# freq, hasFreq = Pitch.kr(in);

	out=if(hasFreq,Pulse.ar(freq,0.5,0.1),SinOsc.ar(freq,0,0.1));

	6.do({
		out = AllpassN.ar(out, 0.040, [0.040.rand,0.040.rand], 2)
	});
	out
}.play
)</pre>
<hr />有一些起始的探测器（onset detector）可能会有帮助。<br />
[<span style="color: #0000ff;">PV_HainsworthFoote</span>]<br />
[<span style="color: #0000ff;">PV_JensenAndersen</span>]</p>
<p>触发<span style="color: #0000ff;"><em>TGains</em></span> UGen：</p>
<pre class="brush:jfx">s.sendMsg(\b_allocRead, 10, "sounds/a11wlk01.wav");

(
var fftbuf;

fftbuf=Buffer.alloc(s,2048,1);

{
var b = 10, source1, detect;

	source1= AudioIn.ar(1); 

	detect= PV_HainsworthFoote.ar(FFT(fftbuf.bufnum,source1), 1.0, 0.0, 0.7, 0.01);

	TGrains.ar(2, detect, b, LFNoise0.kr(10,0.2,1.0), MouseX.kr(0,BufDur.kr(b)), MouseY.kr(0.1,0.5), LFNoise0.kr(10,1.0), 0.5, 2);
}.play
)</pre>
<hr /><strong><span style="color: #800000;"><span style="text-decoration: underline;">录音缓冲（RecordBuf</span></span></strong><strong><span style="color: #800000;">）</span></strong><br />
如果你想录、用实地的声音，<span style="color: #0000ff;"><em>RecordBuf</em></span> UGen将帮到你。你需要建立一个缓冲区以存储录下的采样数据。（<a href="http://www.douban.com/artist/ww1way/download?song_id=37025" target="_blank">下载示范mp3</a>）</p>
<pre class="brush:jfx">(
var b;

// 分配在local服务器的1秒单声道缓冲
b=Buffer.alloc(s,44100,1);

{
// 持续在一个循环中录音，录到我们刚才申明过的buffer中
// 每个录音循环繁殖于旧的数据之上
	RecordBuf.ar(AudioIn.ar(1), b.bufnum, 0, 1.0, MouseX.kr(0.0,1.0), 1, 1, 1);

// 在一个循环中回放捕捉到的buffer, 向后
	PlayBuf.ar(1, b.bufnum,MouseY.kr(0.0,-1.0), 1,0,1);
}.play;
)</pre>
<p>对于跳舞音乐来说，你也许需要将捕捉的buffer同步到它的tempo，你还可以优化它，比如加入用户界面以选择何时录入buffer&#8230;</p>
<hr />同样还有控制来自绘图板或游戏杆的工具，尽管这在我们之后学习了GUI和OSC响应后才会更有意义。<br />
[<span style="color: #0000ff;">SC2DTabletSlider</span>]<br />
[<span style="color: #0000ff;">HIDDeviceService</span>]</p>
<p>你可能同样喜欢尝试<br />
[<span style="color: #0000ff;">MouseButton</span>]<br />
[<span style="color: #0000ff;">KeyState</span>]</p>


<p>Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1091' rel='bookmark' title='Permanent Link: SuperCollider：例程和任务'>SuperCollider：例程和任务</a><small>在开始本课之前，请确保你已载入了上一课的\bleep SynthDef。 目前为止，调度一直由为一个特定的时间调度一个函数来达到。为了遍历一个程序不同的阶段，一个具备一定量执行阶段的函数是很有帮助的。通过.value，它并非一次性被全部评估，但能够在每个多阶段中“产出（yield）”它的当前值。 这是一个例程（routine）： ( r=Routine({ 1.yield; 2.yield; 3.yield; })...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1064' rel='bookmark' title='Permanent Link: SuperCollider：图形化用户界面'>SuperCollider：图形化用户界面</a><small>SC3的图形化用户界面类 Server.default=s=Server.local; SC3的GUI类包括量程（Range）和2D滑杆，拖放工具，下拉列表，多滑杆和其它很多很多，， 同时按下shift+cmd+N (Mac机)看看可选的GUI小工具。 GD_ToolboxWindow() // 展示GUI建设的第三方类 在这份教程中，SwingOSC用户（这包括了使用PsyCollider的任何人）将需要在以下所有GUI代码前加上J，或使用另一个可替代文件(5.2b GUI与SwingOSC)...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1053' rel='bookmark' title='Permanent Link: SuperCollider：合成器定义'>SuperCollider：合成器定义</a><small>SynthDef {}.play 标志法并非SuperCollider 3的首选标记法，但他却允许我们对合成快速上手。从现在起，你常看到的都将是使用SynthDef结构定义的UGen网络。然后很多合成都是由一个单独的SynthDef来创建，这对于制造一堆类似的声音和其它颗粒以及整体进程是尤其重要的。 SynthDef = Synthesizer Definition（合成器定义） 为了在SC中合成声音，你必须为UGen网络用编程语言写一个秘诀（recipe）。这个秘诀由一个特殊的语言结构写就而成，SynthDef。 SynthDef(\sine,...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1047' rel='bookmark' title='Permanent Link: SuperCollider：数组'>SuperCollider：数组</a><small>SuperCollider有很多收集(collection)类，但对于一些简单的任务来说，你往往可以通过在方括号内定义数据的数组（Array）来实现： a= [5,6,7,8,9,10]; 有时我们需要更清晰的建构数据列，并且我们可以书写我们自己的函数来生成数据： a= Array.fill(6, {arg i; i+5}); 你将会在今后渐渐熟悉收集类比如数组的用法，但现在我将首先展示一些小窍门给你尝尝鲜(逐行运行一下逐行，在post窗口内观察结果)。...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1019' rel='bookmark' title='Permanent Link: SuperCollider：调制合成'>SuperCollider：调制合成</a><small>Server.default=s=Server.internal; s.boot; // 这个使用了Lance Putnam的频率范围。我将始终在后台运行它 // 以为我们描绘我们探索声音的图释 FreqScope.new 在调制合成（modulation synthesis）中，一个波，载体，被调制器所影响。...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ccttours.com/blog/?feed=rss2&amp;p=1057</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SuperCollider：合成器定义</title>
		<link>http://www.ccttours.com/blog/?p=1053</link>
		<comments>http://www.ccttours.com/blog/?p=1053#comments</comments>
		<pubDate>Sun, 28 Feb 2010 15:32:30 +0000</pubDate>
		<dc:creator>ww</dc:creator>
				<category><![CDATA[SuperCollider3]]></category>
		<category><![CDATA[SuperCollider学习笔记]]></category>

		<guid isPermaLink="false">http://www.ccttours.com/blog/?p=1053</guid>
		<description><![CDATA[SynthDef {}.play 标志法并非SuperCollider 3的首选标记法，但他却允许我们对合成快速上手。从现在起，你常看到的都将是使用SynthDef结构定义的UGen网络。然后很多合成都是由一个单独的SynthDef来创建，这对于制造一堆类似的声音和其它颗粒以及整体进程是尤其重要的。 SynthDef = Synthesizer Definition（合成器定义） 为了在SC中合成声音，你必须为UGen网络用编程语言写一个秘诀（recipe）。这个秘诀由一个特殊的语言结构写就而成，SynthDef。 SynthDef(\sine, {Out.ar(0,SinOsc.ar(Rand(440,880),0,0.1))}).load(s); 一旦一个秘诀被系统所认知，你便能以那个规则创制一个独立的合成器： Synth(\sine); 实际上，你想用它们多少次都可以（每次跑下边的一行代码）： a=Synth(\sine); b=Synth(\sine); c=Synth(\sine); 然后每次一行地分别运行下列代码可以单独停止每一个合成： a.free; b.free; c.free; 注意，每个合成器在创建之初的初始值都是在440到880之间，这是由于上述SynthDef中的Rand UGen所定义的。 以下是一步到位的写法： SynthDef(\saw, {Out.ar(0,Saw.ar(Rand(440,880),0.1))}).play(s); 你会看到制造和使用SynthDef的方法中的一些变化： SynthDef("aaa",{Out.ar(0,SinOsc.ar(440,0,0.1))}).send(s) Synth("aaa"); // 现在运行这个 在命名SynthDef时，\aaa与&#8221;aaa&#8221;是相同的。SynthDef被发送而不是被载入，这属于技术上的细节，将SynthDef储存入硬盘而不是直接使用它们。 各种不同的SynthDef： .send——在目前仅发送SynthDef到合成服务器（synthesis server），不在硬盘上放置任何文件。 .writeDefFile——将SynthDef写入硬盘上的一个文件，不将它载入到合成服务器。 .load——将文件写入硬盘，因此它从现在起当你每次开启合成服务器的时候都被载入并快速发送。 还有一些诸如 .writeOnce 和 .store——我们将在我们需要它们的时候接触它们。 与我们之前使用SinOsc的例子唯一不同的地方，便是SynthDef包裹以及对Out UGen的使用。对于Out UGen完整的解释将在我们讨论总线（bus）的时候进行，但现在你可以将它暂时想做“在计算机的第一个音频输出播放”。 // 为秘诀加入频率引数 // 注意SynthDef可被命名为\sine或"sine" SynthDef(\sine,{arg freq=440, amp=0.1; Out.ar(0,SinOsc.ar(freq,0,amp))}).load(s); Synth("sine"); // 现在这个接受初始值 [...]


Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1091' rel='bookmark' title='Permanent Link: SuperCollider：例程和任务'>SuperCollider：例程和任务</a><small>在开始本课之前，请确保你已载入了上一课的\bleep SynthDef。 目前为止，调度一直由为一个特定的时间调度一个函数来达到。为了遍历一个程序不同的阶段，一个具备一定量执行阶段的函数是很有帮助的。通过.value，它并非一次性被全部评估，但能够在每个多阶段中“产出（yield）”它的当前值。 这是一个例程（routine）： ( r=Routine({ 1.yield; 2.yield; 3.yield; })...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1064' rel='bookmark' title='Permanent Link: SuperCollider：图形化用户界面'>SuperCollider：图形化用户界面</a><small>SC3的图形化用户界面类 Server.default=s=Server.local; SC3的GUI类包括量程（Range）和2D滑杆，拖放工具，下拉列表，多滑杆和其它很多很多，， 同时按下shift+cmd+N (Mac机)看看可选的GUI小工具。 GD_ToolboxWindow() // 展示GUI建设的第三方类 在这份教程中，SwingOSC用户（这包括了使用PsyCollider的任何人）将需要在以下所有GUI代码前加上J，或使用另一个可替代文件(5.2b GUI与SwingOSC)...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1057' rel='bookmark' title='Permanent Link: SuperCollider：互动'>SuperCollider：互动</a><small>通过鼠标、键盘、MIDI、音频输入等进行互动 让我们现在先打开localhost服务器： ( Server.default=s=Server.local; s.boot; ) MouseX/Y 运用鼠标作为一个控制器是一个与patch互动的快速简单的方式 // 基于参数的变化方式...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1047' rel='bookmark' title='Permanent Link: SuperCollider：数组'>SuperCollider：数组</a><small>SuperCollider有很多收集(collection)类，但对于一些简单的任务来说，你往往可以通过在方括号内定义数据的数组（Array）来实现： a= [5,6,7,8,9,10]; 有时我们需要更清晰的建构数据列，并且我们可以书写我们自己的函数来生成数据： a= Array.fill(6, {arg i; i+5}); 你将会在今后渐渐熟悉收集类比如数组的用法，但现在我将首先展示一些小窍门给你尝尝鲜(逐行运行一下逐行，在post窗口内观察结果)。...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1019' rel='bookmark' title='Permanent Link: SuperCollider：调制合成'>SuperCollider：调制合成</a><small>Server.default=s=Server.internal; s.boot; // 这个使用了Lance Putnam的频率范围。我将始终在后台运行它 // 以为我们描绘我们探索声音的图释 FreqScope.new 在调制合成（modulation synthesis）中，一个波，载体，被调制器所影响。...</small></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><strong><span style="color: #00ff00;">SynthDef</span></strong></p>
<p><strong><em>{}.play</em></strong> 标志法并非SuperCollider 3的首选标记法，但他却允许我们对合成快速上手。从现在起，你常看到的都将是使用<span style="color: #0000ff;">SynthDef</span>结构定义的UGen网络。然后很多合成都是由一个单独的<span style="color: #0000ff;">SynthDef</span>来创建，这对于制造一堆类似的声音和其它颗粒以及整体进程是尤其重要的。<br />
<span id="more-1053"></span></p>
<p>SynthDef = Synthesizer Definition（合成器定义）</p>
<hr />
<p>为了在SC中合成声音，你必须为UGen网络用编程语言写一个秘诀（recipe）。这个秘诀由一个特殊的语言结构写就而成，<span style="color: #0000ff;">SynthDef</span>。</p>
<pre class="brush:jfx">SynthDef(\sine, {Out.ar(0,SinOsc.ar(Rand(440,880),0,0.1))}).load(s);</pre>
<p>一旦一个秘诀被系统所认知，你便能以那个规则创制一个独立的合成器：</p>
<pre class="brush:jfx">Synth(\sine);</pre>
<p>实际上，你想用它们多少次都可以（每次跑下边的一行代码）：</p>
<pre class="brush:jfx">a=Synth(\sine);
b=Synth(\sine);
c=Synth(\sine);</pre>
<p>然后每次一行地分别运行下列代码可以单独停止每一个合成：</p>
<pre class="brush:jfx">a.free;
b.free;
c.free;</pre>
<p>注意，每个合成器在创建之初的初始值都是在440到880之间，这是由于上述<span style="color: #0000ff;">SynthDef</span>中的<span style="color: #0000ff;">Rand</span> UGen所定义的。</p>
<p>以下是一步到位的写法：</p>
<pre class="brush:jfx">SynthDef(\saw, {Out.ar(0,Saw.ar(Rand(440,880),0.1))}).play(s);</pre>
<hr />
<p>你会看到制造和使用<span style="color: #0000ff;">SynthDef</span>的方法中的一些变化：</p>
<pre class="brush:jfx">SynthDef("aaa",{Out.ar(0,SinOsc.ar(440,0,0.1))}).send(s)</pre>
<pre class="brush:jfx">Synth("aaa"); // 现在运行这个</pre>
<p>在命名<span style="color: #0000ff;">SynthDef</span>时，\aaa与&#8221;aaa&#8221;是相同的。<span style="color: #0000ff;">SynthDef</span>被发送而不是被载入，这属于技术上的细节，将<span style="color: #0000ff;">SynthDef</span>储存入硬盘而不是直接使用它们。</p>
<hr />
<p>各种不同的<span style="color: #0000ff;">SynthDef</span>：</p>
<ul>
<li><strong><em>.send</em></strong>——在目前仅发送<span style="color: #0000ff;">SynthDef</span>到合成服务器（synthesis server），不在硬盘上放置任何文件。</li>
<li><em><strong>.writeDefFile</strong></em>——将<span style="color: #0000ff;">SynthDef</span>写入硬盘上的一个文件，不将它载入到合成服务器。</li>
<li><strong><em>.load</em></strong>——将文件写入硬盘，因此它从现在起当你每次开启合成服务器的时候都被载入并快速发送。</li>
<li>还有一些诸如 <strong><em>.writeOnce</em></strong> 和 <strong><em>.store</em></strong>——我们将在我们需要它们的时候接触它们。</li>
</ul>
<hr />
<p>与我们之前使用<span style="color: #0000ff;">SinOsc</span>的例子唯一不同的地方，便是<span style="color: #0000ff;">SynthDef</span>包裹以及对<span style="color: #0000ff;">Out</span> UGen的使用。对于<span style="color: #0000ff;">Out</span> UGen完整的解释将在我们讨论总线（bus）的时候进行，但现在你可以将它暂时想做“在计算机的第一个音频输出播放”。</p>
<pre class="brush:jfx">// 为秘诀加入频率引数
// 注意SynthDef可被命名为\sine或"sine"
SynthDef(\sine,{arg freq=440, amp=0.1; Out.ar(0,SinOsc.ar(freq,0,amp))}).load(s);

Synth("sine"); // 现在这个接受初始值

// 通过向SynthDef指明频率引数
// 从秘诀中创制另一个高八度的合成音
Synth("sine",[\freq,880]);</pre>
<p>可以看到，这样做允许我们从一个普通的秘诀中制造出许多变化的合成音。</p>
<hr />
<pre class="brush:jfx">a=Synth(\sine);
b=Synth(\sine,[\freq,550]);
c=Synth(\sine,[\freq,660, \amp, 0.5]);</pre>
<p>然后每次一行地分别运行下列代码可以单独停止每一个合成：</p>
<pre class="brush:jfx">a.free;
b.free;
c.free;</pre>
<hr />
<p><strong>练习：</strong></p>
<p>试着将一个你曾经或正在使用的合成器patch转化为一个<span style="color: #0000ff;">SynthDef</span>。</p>
<p>你可以以下述代码为原型：</p>
<pre class="brush:jfx">(
SynthDef(\synthdefname,{arg input1; // 所有引数都到这

// 一些UGen的代码——之前位于{}.play里的东西

Out.ar(0, finaloutput) //finaloutput是你想听到的UGen最后的结果
}).send(s)
)

Synth(\synthdefname, [\input1, inputval1]); // inputval1是恒量</pre>


<p>Related posts:<ol><li><a href='http://www.ccttours.com/blog/?p=1091' rel='bookmark' title='Permanent Link: SuperCollider：例程和任务'>SuperCollider：例程和任务</a><small>在开始本课之前，请确保你已载入了上一课的\bleep SynthDef。 目前为止，调度一直由为一个特定的时间调度一个函数来达到。为了遍历一个程序不同的阶段，一个具备一定量执行阶段的函数是很有帮助的。通过.value，它并非一次性被全部评估，但能够在每个多阶段中“产出（yield）”它的当前值。 这是一个例程（routine）： ( r=Routine({ 1.yield; 2.yield; 3.yield; })...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1064' rel='bookmark' title='Permanent Link: SuperCollider：图形化用户界面'>SuperCollider：图形化用户界面</a><small>SC3的图形化用户界面类 Server.default=s=Server.local; SC3的GUI类包括量程（Range）和2D滑杆，拖放工具，下拉列表，多滑杆和其它很多很多，， 同时按下shift+cmd+N (Mac机)看看可选的GUI小工具。 GD_ToolboxWindow() // 展示GUI建设的第三方类 在这份教程中，SwingOSC用户（这包括了使用PsyCollider的任何人）将需要在以下所有GUI代码前加上J，或使用另一个可替代文件(5.2b GUI与SwingOSC)...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1057' rel='bookmark' title='Permanent Link: SuperCollider：互动'>SuperCollider：互动</a><small>通过鼠标、键盘、MIDI、音频输入等进行互动 让我们现在先打开localhost服务器： ( Server.default=s=Server.local; s.boot; ) MouseX/Y 运用鼠标作为一个控制器是一个与patch互动的快速简单的方式 // 基于参数的变化方式...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1047' rel='bookmark' title='Permanent Link: SuperCollider：数组'>SuperCollider：数组</a><small>SuperCollider有很多收集(collection)类，但对于一些简单的任务来说，你往往可以通过在方括号内定义数据的数组（Array）来实现： a= [5,6,7,8,9,10]; 有时我们需要更清晰的建构数据列，并且我们可以书写我们自己的函数来生成数据： a= Array.fill(6, {arg i; i+5}); 你将会在今后渐渐熟悉收集类比如数组的用法，但现在我将首先展示一些小窍门给你尝尝鲜(逐行运行一下逐行，在post窗口内观察结果)。...</small></li>
<li><a href='http://www.ccttours.com/blog/?p=1019' rel='bookmark' title='Permanent Link: SuperCollider：调制合成'>SuperCollider：调制合成</a><small>Server.default=s=Server.internal; s.boot; // 这个使用了Lance Putnam的频率范围。我将始终在后台运行它 // 以为我们描绘我们探索声音的图释 FreqScope.new 在调制合成（modulation synthesis）中，一个波，载体，被调制器所影响。...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.ccttours.com/blog/?feed=rss2&amp;p=1053</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
