Processing

Minim:快速入门指南

欲开始使用Minim,首先你得建立一个Minim对象,这样你便能载入音频文件或者建立声音输入与输出。而后,在你退出程序前,你必须关闭你从Minim获得的所有I/O类然后关闭你的Minim范本。音频输入/输出类包括AudioPlayer, AudioSample, AudioSnippet, AudioInput, 和 AudioOutput。达到这个目的的一个很好的方式就是在你关闭所有音频类的位置定义一个停止(stop)方法(method)。以下是以上几点的一个范例(部分): Minim minim; AudioPlayer player; AudioInput input; void setup() { size(100, 100); minim = new Minim(this); player = minim.loadFile(“song.mp3”); input = minim.getLineIn(); } void draw() { // 做你想做的 } void stop() { // 你从Minim.loadFile()获得的音频播放器 player.close();…

Minim:关于

Minim是一个为在Proessing环境下工作的人们提供的易用的音频库(library),它基于JavaSound API、一点点Tritonus和Javazoom的MP3SPI开发。掩藏在其API之后的哲学是尽可能简单的将音频互动加入至你的sketch内,同时也为高级用户提供足够多的弹性。你无需做回调(callback)甚至无需直接操作采样数组(sample arrays),所有脏活累活都为你做好了。下载提供两种口味:1)仅仅是运行Minim必须的jar文件,2)包括javadocs、例子以及源码的完全版。Minim经LGPL许可发布。 安装:解压zip档到你sketchbook文件夹(在偏好设置里指定)的libraries文件夹内(如果不存在,则手动创建),承载它的文件夹应命名为minim(Processing现已自带Minim库)。 以下为Minim的一些特性: 音频播放器(AudioPlayer):WAV, AIFF, AU, SND, 和 MP3文件的单声道或立体声回放。 音频meta数据(AudioMetaData):一个装载文件meta数据的对象,例如ID3标签。 音频录音机(AudioRecorder):经缓冲或直接将单声道或立体声音频录入硬盘。 音频输入(AudioInput):单声道或立体声输入监听器。 音频输出(AudioOutput):单声道或立体声合成。 音频信号(AudioSignal):一个提供你写自己的声音合成类的简单界面。 配备所有标准波形,粉噪音及白噪音生成器。此外,你还可以通过简单执行你自己的周期波形来扩展振荡器类。 音频效果(AudioEffect):一个提供你写自己的音频效果的简单界面。 配备低通(low pass)、高通(high pass)、带通(band pass)、陷波(notch)滤波器。此外,你还可以通过对你自己的IIR滤波器的简单执行来扩充IIRFilter类。 可以方便的将信号和效果加于音频输入和输出上。 提供一个可做频谱分析的FFT类。 提供一个可做拍子侦测的BeatDetect类。 计划中的特性: 更多的音频效果,如混响、延迟、移相、回响调制以及一点点破音。 使用频主体过滤技术提供更好的滤波效果(frequency domain filtering techniques)。 要开始使用Minim,你可以进入下一课的学习,或去日它的javadocs。如果有任何问题或者发现任何bug,可以通过作者主页以及p5论坛联系他。

Processing:数组(下)

12. ok,现在来做100辆车吧: Car[] cars = new Car[100]; // 由100个cars对象组成的数组! void setup() { size(200,200); smooth(); for (int i = 0; i < cars.length; i ++ ) { // 用for循环初始化100辆车. cars[i] = new Car(color(i*2),0,i*2,i); } } void draw() { background(255); for (int…

Processing:数组(上)

1. 一个数组(Array)就是包含了一串变量列(list of variables)的一个阵列。当程序需要诸多相似数据的例子的时候,就是使用数组的时候,比如画100辆上一课中的小车。 2. 列(list)因两个重要的原因显得非常有用:i、列记录列内元素的踪迹;ii、列保持那些元素的顺序。后一点至关重要,因为在很多程序中,信息的顺序与信息本身一样重要。 3. 一个列的第一位是0。 4. 申明一个列:列类型 [ ] 列名称 5. 每个列都有一个固定的数目,不可更改。 6. 创造一个新的列:列类型 [ ] 列名称 = new 类型 [列数目] 7. 几个例子: // 一个由四个浮点数组成的列 float[] scores = new float[4]; // 一个由100个Humen对象组成的列 Human[] people = new Human[100];…

Processing:对象

1. 类(Class)的名字常常以大写开头,用以与变量区分 2. 初始化对象(Object)的方式:myCar = new Car(); 。如果你忘记初始化一个对象,则他会被pr默认为null。null意味着什么也没有,既不是0,也不是负数。如果你遇到类似“NullPointerException”的错误,绝大多数情况下,便是由于忘记初始化一个对象造成的。 3. 使用一个对象的方式:variableName.objectMethod(Method Arguments); 例如:myCar.draw(); 4. 看一个对象应用的例子: Car myCar; // 申明对象car为一个全局变量 void setup() { size(200,200); // 初始化Car对象 myCar = new Car(); // 呼叫构造器(constructor)在setup() 内初始化car对象. } void draw() { background(255); // 操作对象Car. myCar.move(); //…

Processing:函数(Function)

1. 用户自定义函数的好处:模块化,易读,拆分大程序,反复利用性强。还有一个重要的:查错。我们可以//掉某些自定义函数,一一运行其余的,来逐一找到问题所在。 2. 比如line()这样的函数属于processing自带库的函数。 3. 一个函数定义的结构是这样子的: returnType functionName (arguments ) { // Code body of function } 4. 你可以直接用 函数名称() 这样的方式在draw()内调用你的自定义函数。你可以在setup()和draw()以外的任何地方定义你自己的函数,当然,惯例是放在你的draw()程序块下。 5. 引数(Argument)是执行函数的条件。属于局部变量的范畴。 6. 局部变量可以在一个函数中被申明和使用。 7. void drawCar(int x, int y, int thesize, color c) 圆括号里的值叫做引数(Argument)。 void draw() { drawCar(100,100,64,color(20,250,0,79));…