Processing 2. Креативное программирование
.pdfString info = "Position: " + playheadMinutes + ":" + nf( playheadSeconds, 2 ) + "/" + totalMinutes + ":" + nf( totalSeconds, 2 );
fill( 0 ); noStroke();
text( info, 10, 20 );
}
..
void mousePressed()
{
int pos = floor( map( mouseX, 0, width, 0, player.length() ) ); player.play( pos );
}
void keyPressed()
{
if ( key == ' ' ) {
if ( player.isPlaying() ) { player.pause();
} else { player.play();
}
}
if ( key == CODED ) {
if ( keyCode == LEFT ) { player.rewind();
}
}
}
stop(),AudioPlayer Minim. .
void stop()
{
player.close();
minim.stop();
super.stop();
}
140
7
, . -. / -.
minim, MinimPApplet.AudioPlayer. AudioPlayer:
player = minim.loadFile("song.mp3");
player.play(),. ,player.loop().
. -,. player. isPlaying() , -. .(true), player.pause()(false), ., . player.rewind().
draw() . player. length() , .player.position() . -0map().,, .:
int seconds = (int)(milliseconds/1000) % 60;
int minutes = (int)(milliseconds/(1000*60)) % 60;
mousePressed() length() position().play() .
141
stop() AudioPlayer Minim., Minim.
..Minim ., , .
, - minim, Minim
AudioInput.
import ddf.minim.*;
import ddf.minim.signals.*; import ddf.minim.analysis.*; import ddf.minim.effects.*;
Minim minim;
AudioInput in;
setup() getLineIn() Minim.
void setup()
{
size( 640, 480 ); smooth();
minim = new Minim( this );
in = minim.getLineIn( Minim.STEREO, 512 );
background( 0 );
}
draw() bufferSize() AudioInput. stop().
void draw()
{
fill( 0, 16 );
142
7
noStroke();
rect( 0, 0, width, height/2 );
stroke( 255 ); noFill();
float r = 0;
for ( int i = 0; i < in.bufferSize(); i++ ) { r += abs( in.mix.get( i ) ) * 20;
}
ellipse( width/2, height/2, r, r );
}
void stop()
{
in.close();
minim.stop();
super.stop();
}
, . -, . .
143
minim.getLineIn() AudioInput., . ,, .. Minim. STEREOMinim.MONO . - ; 512. ,1024.
draw() bufferSize(). , abs() . -. , .
- , , . ,..
. ,.
import ddf.minim.*;
import ddf.minim.signals.*; import ddf.minim.analysis.*; import ddf.minim.effects.*;
Minim minim;
AudioPlayer player;
void setup()
{
size( 1024, 480 ); smooth();
minim = new Minim( this );
player = minim.loadFile("song.mp3", 1024); player.play();
strokeWeight( 2 );
}
144
7
, draw(). , -. stop().
void draw()
{
background( 255 );
translate( 0, height/2 );
//right channel stroke( 255, 0, 0 );
for ( int i = 0; i < player.right.size(); i++ ) { float y = player.right.get( i ) * 220;
point( i, y );
}
//left channel
stroke( 0 );
for ( int i = 0; i < player.left.size(); i++ ) { float y = player.left.get( i ) * 220;
point( i, y );
}
}
void stop()
{
player.close();
minim.stop();
super.stop();
}
, , ..
145
AudioPlayer : ,. player.left, player.right player.mix. size() ,. , . get() .-1 1,.
( ). Minim , ,. : http://paulbourke.net/ miscellaneous/ dft/. , ..
FFT, .
import ddf.minim.*;
import ddf.minim.signals.*; import ddf.minim.analysis.*; import ddf.minim.effects.*;
Minim minim;
AudioPlayer player;
FFT fft;
void setup()
{
size( 1024, 480 );
minim = new Minim( this );
player = minim.loadFile("song.mp3", 512 ); player.loop();
fft = new FFT( player.bufferSize(), player.sampleRate() );
background( 255 );
}
146
7
draw() fft .background(),. .
void draw()
{
fill( 255, 8 ); noStroke();
rect( 0, 0, width, height );
fft.forward( player.mix );
strokeWeight( 4 ); strokeCap( SQUARE ); stroke( 0 );
for ( int i = 0; i < fft.specSize(); i++ ) {
line( i*4, height, i*4, height - fft.getBand( i ) * 20 );
}
}
void stop()
{
player.close();
minim.stop();
super.stop();
}
, ..
147
, , FFT, .AudioPlayer :
fft = new FFT( player.bufferSize(), player.sampleRate() );
draw(). , player.left player.right .
fft.forward( player.mix );
FFT fft.specSize(). FFT player.bufferSize() / 2 + 1. fft. getBand(). , , .
, ., ., .
minim, Minim, AudioPlayerFFT. Particleboolean . .
import ddf.minim.*;
import ddf.minim.signals.*; import ddf.minim.analysis.*; import ddf.minim.effects.*;
Minim minim;
AudioPlayer player;
FFT fft;
Particle[] particles;
boolean fade = false;
148
7
void setup()
{
size( 640, 480 ); smooth();
background( 0 );
colorMode( HSB, 360, 100, 100, 100 );
minim = new Minim( this );
player = minim.loadFile("song.mp3", 512 ); player.loop();
fft = new FFT( player.bufferSize(), player.sampleRate() );
particles = new Particle[ fft.specSize() ]; for ( int i = 0; i < fft.specSize(); i++ ) {
particles[i] = new Particle( i );
}
}
draw() . RGB pushStyle() popStyle(),. ,for.
void draw()
{
pushStyle(); colorMode( RGB, 255 ); if ( fade ) {
noStroke(); fill( 0, 8 );
rect( 0, 0, width, height );
}else { background( 0 );
}
popStyle();
fft.forward( player.mix );
for ( int i = 0; i < fft.specSize() - 1; i++ ) { particles[i].update(fft.getBand(i), player.mix.get( i*2 )); particles[i].render();
}
}
149