这个小项目用到了processing的minim库。
代码如下:
其中setup()里主要是音频输入,一般默认情况下都是内置麦克风,当然如果想要用音频播放的输出来做这里的输入的话也是可以的,用soundflower就行~这里不做深入。
draw()主要是可视化方面的,这里主要是用到时域上的变化。= = 还是比较基础的。
- import ddf.minim.*;
-
- Minim minim;
- AudioInput in;
-
- void setup() {
- size(800, 600, P2D);
-
- minim = new Minim(this);
-
- in = minim.getLineIn();
- }
-
- void draw() {
- background(0);
- stroke(255);
-
- strokeWeight(2);
- float a = 0;
- float angle = (2*PI) / 200;
- int step = in.bufferSize() / 200;
- for(int i=0; i < in.bufferSize() - step; i+=step) {
- float x = 400 + cos(a) * (1000 * in.mix.get(i) + 150);
- float y = 300 + sin(a) * (1000 * in.mix.get(i) + 150);
- float x2 = 400 + cos(a + angle) * (1000 * in.mix.get(i+step) + 150);
- float y2 = 300 + sin(a + angle) * (1000 * in.mix.get(i+step) + 150);
- line(x,y,x2,y2);
- a += angle;
- }
- }
-
复制代码
出来的效果是这样子滴~~~
赶紧下载个processing玩玩吧~~
iOS系统上也可以用processing哦~
还可以装载在树莓派上玩哦~
|
[code]add_library('minim')
minim=Minim(this)
lin=minim.getLineIn()
def setup():
size(800,600,P2D)
def draw():
background(0)
stroke(255,255,0)
strokeWeight(2)
a=0.0
angle=(2*PI)/200.0
bfsize=lin.bufferSize()
step=bfsize/200
for i in range(0,bfsize-step,step):
x = 400.0 + cos(a) * (1000 * lin.mix.get(i) + 150)
y = 300.0 + sin(a) * (1000 * lin.mix.get(i) + 150)
x2 = 400.0 + cos(a + angle) * (1000 * lin.mix.get(i+step) + 150)
y2 = 300.0 + sin(a + angle) * (1000 * lin.mix.get(i+step) + 150)
line(x,y,x2,y2)
a += angle[/code]
=== Minim.getLineIn: attempt failed, could not secure an AudioInput.
推测是不允许读取麦克风的原因
但是我用minim库内置的一个录音效果则可以访问麦克风
请问楼主知道原因吗。。好多其他的源代码复制下来只要涉及到麦克风实时的好像都不能够通过验证这个如何解决呢
可以参考examples