145 lines
4.4 KiB
Plaintext
Executable File
145 lines
4.4 KiB
Plaintext
Executable File
/*
|
|
basic_drawing
|
|
You can draw by simply adding points directly or converted
|
|
cc teddavis.org 2017/18
|
|
*/
|
|
|
|
// import and create instance of XYscope
|
|
XYscope ms_xy;
|
|
|
|
int ms_n_point = 30;
|
|
float ms_t;
|
|
float ms_x[] = new float[2000];
|
|
float ms_y[] = new float[2000];
|
|
float ms_rx[] = new float[2000];
|
|
float ms_ry[] = new float[2000];
|
|
float []ms_channel = new float[128];
|
|
float []ms_channel_amp = new float[128];
|
|
int []ms_chan_index = new int [121];
|
|
int ms_period = 0;
|
|
int ms_activated_channels = 0;
|
|
int ms_rect_circle = 0;
|
|
|
|
Star[] ms_stars = new Star[500];
|
|
|
|
void midi_monophonic_synth(int status, int chan, int value)
|
|
{
|
|
boolean swapped = false;
|
|
|
|
if (status == -112)
|
|
{
|
|
//channel = (12f*(log((pow(2, (chan - 69f)/12))/440f)/log(2)) + 69f);
|
|
for (int i = 0; i < 121; i++)
|
|
{
|
|
if (ms_channel[i] < 1)
|
|
{
|
|
ms_channel[i] = pow(2, (chan - 69f) / 12) * 440;
|
|
ms_channel_amp[i] = map(value, 0, 127, 0, 1);
|
|
ms_chan_index[i] = chan;
|
|
break;
|
|
|
|
}
|
|
}
|
|
ms_activated_channels++;
|
|
}
|
|
if (status == -128)
|
|
{
|
|
for (int i = 0; i < 121; i++)
|
|
{
|
|
if(ms_chan_index[i] == chan && swapped == false)
|
|
{
|
|
ms_channel[i] = 0;
|
|
ms_channel_amp[i] = 0;
|
|
ms_chan_index[i] = 0;
|
|
swapped = true;
|
|
}
|
|
if (swapped == true)
|
|
{
|
|
ms_channel[i] = ms_channel[i + 1];
|
|
ms_channel_amp[i] = ms_channel_amp[i + 1];
|
|
ms_chan_index[i] = ms_chan_index[i+1];
|
|
if (ms_channel[i] < 1)
|
|
break;
|
|
}
|
|
}
|
|
ms_activated_channels--;
|
|
}
|
|
if (chan == 7 && status == -80)
|
|
ms_n_point = value * 2;
|
|
if (chan == 7 && status == -79)
|
|
ms_rect_circle = value;
|
|
}
|
|
|
|
void setup_monophonic_synth() {
|
|
for (int i = 0; i < 2000; i++)
|
|
{
|
|
ms_rx[i] = random(-2000, 1000) / 1000.0;
|
|
ms_ry[i] = random(-1000, 1000) / 1000.0;
|
|
}
|
|
for (int i = 0; i < 128; i++)
|
|
{
|
|
ms_channel[i] = 0;
|
|
ms_channel_amp[i] = 0;
|
|
}
|
|
background(0);
|
|
// initialize XYscope with default sound out
|
|
ms_xy = new XYscope(this);
|
|
//xy.getMixerInfo();
|
|
ms_setup_star();
|
|
}
|
|
|
|
|
|
void draw_monophonic_synth() {
|
|
strokeWeight(2);
|
|
background(0);
|
|
ms_xy.clearWaves();
|
|
ms_t = millis() / 1000.0;
|
|
ms_t = 1;
|
|
//loadPixels();
|
|
if (ms_activated_channels > 0)
|
|
{
|
|
ms_xy.freq(ms_channel[ms_period % ms_activated_channels]);
|
|
ms_xy.amp(ms_channel_amp[ms_period % ms_activated_channels]);
|
|
} else
|
|
ms_xy.freq(0);
|
|
for (int i = 0; i < ms_n_point; i++)
|
|
{
|
|
ms_x[i] = (-ms_rx[i] * ms_rx[i] + ms_rx[i] + ms_ry[i]) * (cos(ms_t) * 500) + width/2;
|
|
ms_y[i] = (ms_rx[i] * (ms_rx[i] - ms_ry[i]) * ms_ry[i] - ms_rx[i] * ms_ry[i] + ms_ry[i]) * (sin(ms_t) * 500) * (cos(ms_rx[i]) * ms_rx[i]) + ms_ry[i] + height/2;
|
|
}
|
|
for (int i = 0; i < ms_activated_channels; i++)
|
|
{
|
|
for (int j = 127; j > 127 - ms_n_point; j--)
|
|
{
|
|
ms_xy.ellipse(map(ms_chan_index[i], 0, 120, 0, width), height / 2, j, j);
|
|
ms_xy.ellipse(map(ms_chan_index[i], 0, 120, 0, width), map(ms_chan_index[i], 0, 120, 0, height), j, j);
|
|
if (ms_rect_circle > 84)
|
|
{
|
|
ms_xy.rect(map(ms_chan_index[i], 0, 120, 0, width), 0, j / 2, j / 2);
|
|
ms_xy.ellipse(map(ms_chan_index[i], 0, 120, 0, width), 0.66f * height, j / 2, j / 2);
|
|
}
|
|
else if (ms_rect_circle > 42)
|
|
ms_xy.rect(map(ms_chan_index[i], 0, 120, 0, width), height/ 2, j / 2, j / 2);
|
|
else
|
|
ms_xy.ellipse(map(ms_chan_index[i], 0, 120, 0, width), height /2, j / 2, j / 2);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
//updatePixels();
|
|
// build audio from shapes
|
|
ms_xy.buildWaves();
|
|
|
|
// draw all analytics
|
|
ms_xy.drawAll();
|
|
ms_period++;
|
|
ms_manage_star();
|
|
}
|
|
|
|
void keyPressed() {
|
|
if (keyCode == DOWN) { // DELETE
|
|
ms_xy.clearWaves();
|
|
}
|
|
}
|