ww

ww

Processing:库

1. 在计算机科学领域,一个库指的是一个“帮助者”代码的集合。一个库可能包含函数、变量和对象。 2. 在绝大多数汇编语言中,你都会被要求在代码之初便指定你要用到的库。 3. 这么着导入:import processing.core.*; “ Import ”表明我们将使用一个库,准备使用的库是 “processing.core.”。 “ .* ”是通配符,意味着我们将使用库里的所有东西。以后还会更多的接触这类东西,现在,我们仅需要知道“ processing.core ”是库的名字。 4. 你可以到这里下载pr的众多第三方库。 5. 通过Sketch -> Import Library导入你想使用的库。 6. 安装:将下载到的库文件夹放入你的sketchbook文件夹(在偏好里设置)下的libraries文件夹(如果不存在,则自己创建一个)内。重启Processing,安装成功并可以开始使用。

Processing:除错 调试

1. 小窍门#1:休息一下 我没有开玩笑。离开你的电脑。睡一觉。出去慢跑一圈。吃个橘子。玩一下拼字游戏。总之,做一些除了日代码之外的事。我无法告诉你究竟有多少次我盯着代码数小时而无法搞定那些bug,然后第二天一早醒来五分钟就解决了战斗。 2. 小窍门#2:让他人介入 把你的问题讲给你的朋友,将你展示代码的流程讲给一个程序员(甚至是非程序员)并且顺着过一遍它的逻辑,这往往能揭示问题所在。在很多情况下,因为你是如此熟悉你的代码,因此便看不到很多很明显的东西。通过你将其阐述给第二人的过程,会促使你更慢的将你的代码重新过一遍。如果你身边暂时没有朋友,你同样可以将这个流程大声的告诉你自己。是的,看起来像傻逼,但却很有帮助的。 3. 小窍门#3:简化 在上一章(算法),我们学会了分部分块的完成程序的方法,分得越细,最后出错的机率便越小。这么做的方法之一,是将程序中的某些部分“评论(comment)”掉。 4. 小窍门#4: println( )是你的朋友 运用信息窗口显示变量的值可以说事非常有用。如果一个对象完全从萤幕消失了并且你想知道为什么,你可以打印出它位置变量的值。它看起来可能像这样: println( “x:” + thing.x + “y:” + thing.y); 如果结果是: x: 9000000 y: – 900000 x: 9000116 y: – 901843 x: 9000184 y: – 902235 x: 9000299…

Processing:算法(下)

6.2.4. 雨滴 可以分为如下步骤: 1)一个运动的雨滴 2)一个雨滴对象的数组 3)随机数量的雨滴(每次显示一滴) 4)优化雨滴外形 1)比较简单(先用个简单的圆形代替) float x,y; // 雨滴位置变量 void setup() { size(400,400); background(0); x = width/2; y = 0; } void draw() { background(255); // 显示雨滴 fill(50,100,150); noStroke(); ellipse(x,y,16,16); // 移动雨滴 y++ ; } 再次,我们需要通过将雨滴做成类,而得到一个关于雨滴类的数组,以实现很多雨滴。我们可以为其增加诸如速度或大小等变量,同时还可以加入一个测试雨滴是否滴到地面的函数。 class…

Processing:算法(上)

1. 回顾之前的学习。以Zoog为例,他教会了我们用p5自带库绘制基础的形状。从那开始,Zoog升级为可以与鼠标互动,通过变量自动移动,运用条件式变化方向,用循环扩展他的身体,通过函数组织他的代码,将他的数据和功能封装进入一个对象,最后通过数组复制他自己。学到现在,我们应该停下来一会,想想我们学到的然后如何使用它们得到我们想要的结果。我们的想法是什么?变量、条件式、循环、函数、对象和数组,它们能如何来帮助我们? 2. 在之前的学习中,我们把所有精力集中在“一种特性”的编程例子上。Zoog可以并且只会抖动。Zoog不会忽然开始跳起来,并且Zoog通常都是一个人,从不在路上与其他外星生物互动。当然,我们可以将之前那些例子带向更远,但现在更重要的是,抓住基本的机能(functionality),只有这样我们才能真正学到基本原理(fundamentals)。 3. 本课我们的目标主要是示范一个大型的项目如何由许多“单一特性”的小程序构成。你,程序员,应当从全局出发,但必须学会如何将它打散为不同独立的部分以成功执行你的预期。 3.1. 我们的步骤 1)想法——从一个想法开始。 2)部分——将这个想法打散为小块。 a. 算法伪码——以伪码的形式日出各个部分的算法 b. 算法代码——用代码执行算法。 c. 对象——将与这个算法有关的数据和功能建入一个类。 3)整合——将第二步得到的所有类整合为一个更大的算法。 4. 一个算法就是一个解决问题的程序或公式。在计算机编程中,一个算法就是要求执行一项任务的步骤。我们之前所有的例子都包括一个算法。 5. 通常意义上,编程被认为按以下的程序运作:1)发展一个想法,2)设计出一套实现这个想法的算法,3)写出实现那个算法的代码。再细分的话,编程的程序就是:1)发展一个想法,2)将那个想法分解为多个更小的可管理的部分,3)为每个部分设计出算法,4)为每个部分写代码,5)为所有部分一同设计出算法,6)整合各部分的代码。

Minim:控制器

[ javadoc | 范例 ] 像之前的章节里提到的,JavaSound使用Line在你的系统和程序间传递音频。每条线路都可以通过它进行声相、平衡、增益和音量调节。优点是你无须在你的合成类里执行以上的控制,但缺点是在回放音频时,只有当你的软件接到采样后这些控制才会起作用。这意味着你在播放一个立体声音频时,即使将平衡调至极右,你也不会在你的采样中看到任何差别。换句话说,当你以为左声道的值为0的时候,它仍将保存原始音频文件左声道内的一起实际存在的东西。另外,在监听音频输入的时候,设置一个控制将被反映入采样缓冲器中,因为它将在你的软件收到音频之前起效。 打印控制 并非所有控制在所有线路上都可用。你可以使用方法printControls打印出一个控制器上可用的控制,同时包括那些控制的范围。 示范代码(在线范例) import ddf.minim.*; Minim minim; AudioOutput out; void setup() { size(512, 200); minim = new Minim(this); out = minim.getLineOut(); out.printControls(); } void draw() { background(0); } void stop() { // 日完记得关闭Minim音频类 out.close();…

Minim:AudioSource(音源)

[ javadoc | 范例 ] AudioSource定义了三个AudioBuffer成员,同时也可执行Recordable和Effectable界面。你无法直接创建一个AudioSource,它仅仅是为AudioPlayer, AudioSample, AudioOuput和AudioInput提供普通功能而存在。 采样缓冲器 三个采样缓冲器被命名为left, right和mix。它们持续更新左通道,右通道及左右混合声道的音源。即使在播放单声道音频时,三个通道都是可用的并且包含同样的采样。每个采样缓冲器都是一个AudioBuffer对象。 AudioBuffer: Get和Size 两个你在AudioBuffer中使用最频繁的方法是get(int i)和size()。方法size返回缓冲器的长度。方法get返回采样缓冲器第i个采样的浮点值,这个值将会在-1~1的范围内。因此,这常被认为是一个标准化的浮点采样。一个采样即对一个音源在某一时刻的振幅测量值。要听见一个声音,振幅必须时刻处于变化。最简单的变化辨识方波(square wave)。方法get并不做任何范围检查。因此,如果你询问一个位置小于零或大等于size返回值的采样,你将会得到一个ArrayOutOfBounds的错误。下例示范了如何使用get和size来为一个音频信号绘制波形。 范例(在线看) import ddf.minim.*; Minim minim; AudioPlayer groove; void setup() { size(512, 200, P3D); minim = new Minim(this); groove = minim.loadFile(“groove.mp3”); groove.loop(); } void draw()…