initial reboot commit
commit
1a3453d1b7
@ -0,0 +1,11 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<classpath>
|
||||||
|
<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="module" value="true"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
<classpathentry kind="src" path=""/>
|
||||||
|
<classpathentry kind="lib" path="libs/jsyn_16_7_3.jar"/>
|
||||||
|
<classpathentry kind="output" path=""/>
|
||||||
|
</classpath>
|
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>Rise_I</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||||
|
</natures>
|
||||||
|
</projectDescription>
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,75 @@
|
|||||||
|
/BoundingBox.class
|
||||||
|
/Cue.class
|
||||||
|
/CuePanel.class
|
||||||
|
/Glissandi.class
|
||||||
|
/GrainStream.class
|
||||||
|
/Note.class
|
||||||
|
/NoteFrame$1.class
|
||||||
|
/NoteFrame.class
|
||||||
|
/OpenClassIterator.class
|
||||||
|
/PitchVector.class
|
||||||
|
/PrintUtilities.class
|
||||||
|
/Rise.class
|
||||||
|
/SaveClassIterator.class
|
||||||
|
/Score.class
|
||||||
|
/ScrollBar.class
|
||||||
|
/ToolFrame$1.class
|
||||||
|
/ToolFrame$10.class
|
||||||
|
/ToolFrame$11.class
|
||||||
|
/ToolFrame$12.class
|
||||||
|
/ToolFrame$13.class
|
||||||
|
/ToolFrame$14.class
|
||||||
|
/ToolFrame$15.class
|
||||||
|
/ToolFrame$16.class
|
||||||
|
/ToolFrame$17.class
|
||||||
|
/ToolFrame$18.class
|
||||||
|
/ToolFrame$19.class
|
||||||
|
/ToolFrame$2.class
|
||||||
|
/ToolFrame$20.class
|
||||||
|
/ToolFrame$21.class
|
||||||
|
/ToolFrame$22.class
|
||||||
|
/ToolFrame$23.class
|
||||||
|
/ToolFrame$24.class
|
||||||
|
/ToolFrame$25.class
|
||||||
|
/ToolFrame$26.class
|
||||||
|
/ToolFrame$27.class
|
||||||
|
/ToolFrame$28.class
|
||||||
|
/ToolFrame$29.class
|
||||||
|
/ToolFrame$3.class
|
||||||
|
/ToolFrame$30.class
|
||||||
|
/ToolFrame$31.class
|
||||||
|
/ToolFrame$32.class
|
||||||
|
/ToolFrame$33.class
|
||||||
|
/ToolFrame$34.class
|
||||||
|
/ToolFrame$35.class
|
||||||
|
/ToolFrame$36.class
|
||||||
|
/ToolFrame$37.class
|
||||||
|
/ToolFrame$38.class
|
||||||
|
/ToolFrame$39.class
|
||||||
|
/ToolFrame$4.class
|
||||||
|
/ToolFrame$40.class
|
||||||
|
/ToolFrame$41.class
|
||||||
|
/ToolFrame$42.class
|
||||||
|
/ToolFrame$43.class
|
||||||
|
/ToolFrame$44.class
|
||||||
|
/ToolFrame$45.class
|
||||||
|
/ToolFrame$46.class
|
||||||
|
/ToolFrame$47.class
|
||||||
|
/ToolFrame$48.class
|
||||||
|
/ToolFrame$49.class
|
||||||
|
/ToolFrame$5.class
|
||||||
|
/ToolFrame$50.class
|
||||||
|
/ToolFrame$51.class
|
||||||
|
/ToolFrame$52.class
|
||||||
|
/ToolFrame$53.class
|
||||||
|
/ToolFrame$54.class
|
||||||
|
/ToolFrame$55.class
|
||||||
|
/ToolFrame$56.class
|
||||||
|
/ToolFrame$57.class
|
||||||
|
/ToolFrame$58.class
|
||||||
|
/ToolFrame$6.class
|
||||||
|
/ToolFrame$7.class
|
||||||
|
/ToolFrame$8.class
|
||||||
|
/ToolFrame$9.class
|
||||||
|
/ToolFrame.class
|
||||||
|
/WaveForm.class
|
@ -0,0 +1,49 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.geom.Rectangle2D;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
public class BoundingBox extends JPanel {
|
||||||
|
|
||||||
|
double x1;
|
||||||
|
double x2;
|
||||||
|
double y1;
|
||||||
|
double y2;
|
||||||
|
|
||||||
|
public BoundingBox() {
|
||||||
|
this.setOpaque(false);
|
||||||
|
this.setBounds((int) 0, (int) 0,(int) (Rise.PAGE_WIDTH*Rise.ZOOM), (int) (Rise.PAGE_HEIGHT*Rise.ZOOM));
|
||||||
|
this.setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCoordinates(double x1, double x2, double y1, double y2) {
|
||||||
|
this.x1 = x1;
|
||||||
|
this.x2 = x2;
|
||||||
|
this.y1 = y1;
|
||||||
|
this.y2 = y2;
|
||||||
|
|
||||||
|
if (this.x1<0){
|
||||||
|
this.x1=0;
|
||||||
|
}
|
||||||
|
if (this.x2>this.getWidth()){
|
||||||
|
this.x2=this.getWidth()-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.y1<0){
|
||||||
|
this.y1=0;
|
||||||
|
}
|
||||||
|
if (this.y2>this.getHeight()){
|
||||||
|
this.y2=this.getHeight()-1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paint(Graphics g){
|
||||||
|
//super.paint(g);
|
||||||
|
g.setColor(Color.BLUE);
|
||||||
|
Graphics2D g2 = (Graphics2D) g;
|
||||||
|
g2.draw(new Rectangle2D.Double(x1, y1, x2-x1, y2-y1));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,82 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
import com.softsynth.jsyn.Synth;
|
||||||
|
|
||||||
|
public class Cue extends Thread {
|
||||||
|
|
||||||
|
JPanel cuePanel;
|
||||||
|
int startTick;
|
||||||
|
int cuesPast;
|
||||||
|
int clicksPast;
|
||||||
|
int[] cuesPoints;
|
||||||
|
|
||||||
|
|
||||||
|
public Cue(JPanel cP){
|
||||||
|
super();
|
||||||
|
cuePanel = cP;
|
||||||
|
//add(new LineOut());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(int[] cP){
|
||||||
|
//startTick = sT;
|
||||||
|
cuesPoints = cP;
|
||||||
|
cuesPast = 0;
|
||||||
|
clicksPast = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized void run() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
//System.out.println("waiting");
|
||||||
|
this.wait(0);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
//boolean isOn = true;
|
||||||
|
|
||||||
|
int startTime = cuesPoints[0];
|
||||||
|
|
||||||
|
int duration = (int) (Synth.getTickRate() / 10);
|
||||||
|
//int duration = (int) (Synth.getTickRate() / 50);
|
||||||
|
|
||||||
|
int advanceTime = (int) (Synth.getTickRate() * .5); // half second advance
|
||||||
|
Synth.sleepUntilTick(startTime - advanceTime);// /*(int) (Math.random() * 2 * Synth.getTickRate())*/); // Wake up early!
|
||||||
|
int nextTime = startTime;
|
||||||
|
int nextCueTime = startTime;
|
||||||
|
while(true)
|
||||||
|
{
|
||||||
|
if (Rise.IS_ENGINE_ON == true) {
|
||||||
|
|
||||||
|
if (Synth.getTickCount() > nextCueTime) {
|
||||||
|
if (cuesPast % 2 == 0) {
|
||||||
|
cuePanel.setBackground(Color.BLACK);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
cuePanel.setBackground(Color.WHITE);
|
||||||
|
}
|
||||||
|
cuesPast++;
|
||||||
|
nextCueTime = cuesPoints[cuesPast];
|
||||||
|
//System.out.println("test " + clicksPast + " " + nextCueTime + " " + Synth.getTickCount());
|
||||||
|
}
|
||||||
|
|
||||||
|
nextTime += duration;
|
||||||
|
Synth.sleepUntilTick(nextTime);
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
try {
|
||||||
|
//System.out.println("waiting");
|
||||||
|
this.wait(0);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,40 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.font.FontRenderContext;
|
||||||
|
import java.awt.font.TextLayout;
|
||||||
|
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
public class CuePanel extends JPanel{
|
||||||
|
|
||||||
|
public double envPos;
|
||||||
|
public Color color;
|
||||||
|
// public void setEnv(double eV){
|
||||||
|
// envPos
|
||||||
|
// }
|
||||||
|
|
||||||
|
public void paint(Graphics g){
|
||||||
|
super.paint(g);
|
||||||
|
Graphics2D g2 = (Graphics2D) g;
|
||||||
|
FontRenderContext frc = g2.getFontRenderContext();
|
||||||
|
Font fontTime = new Font("Times", Font.PLAIN, 40);
|
||||||
|
int totalSecs = (int) (envPos * Rise.TOTAL_DUR);
|
||||||
|
int minutes = totalSecs/60;
|
||||||
|
int seconds = totalSecs%60;
|
||||||
|
String secondString = seconds + "";
|
||||||
|
if (seconds < 10){
|
||||||
|
secondString = "0" + secondString;
|
||||||
|
}
|
||||||
|
String timeForString = minutes + ":" + secondString;
|
||||||
|
TextLayout time = new TextLayout(timeForString, fontTime, frc);
|
||||||
|
g2.setFont(fontTime);
|
||||||
|
|
||||||
|
g2.setColor(color);
|
||||||
|
time.draw(g2,5,50);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,373 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
|
||||||
|
import com.softsynth.jsyn.AddUnit;
|
||||||
|
import com.softsynth.jsyn.DivideUnit;
|
||||||
|
import com.softsynth.jsyn.EnvelopePlayer;
|
||||||
|
import com.softsynth.jsyn.EqualTemperedTuning;
|
||||||
|
import com.softsynth.jsyn.ExponentialLag;
|
||||||
|
import com.softsynth.jsyn.LineOut;
|
||||||
|
import com.softsynth.jsyn.MultiplyUnit;
|
||||||
|
import com.softsynth.jsyn.SynthEnvelope;
|
||||||
|
import com.softsynth.jsyn.Synth;
|
||||||
|
import com.softsynth.jsyn.SynthMixer;
|
||||||
|
|
||||||
|
public class Glissandi extends Thread{
|
||||||
|
|
||||||
|
WaveForm[] gliss;
|
||||||
|
AddUnit[] num;
|
||||||
|
DivideUnit[] ratio;
|
||||||
|
MultiplyUnit[] freq;
|
||||||
|
SynthEnvelope env;
|
||||||
|
MultiplyUnit denMult;
|
||||||
|
AddUnit den;
|
||||||
|
EnvelopePlayer envPlayer;
|
||||||
|
boolean isOn = false;
|
||||||
|
double fund;
|
||||||
|
GrainStream grainStream[];
|
||||||
|
LineOut lineOut;
|
||||||
|
SynthMixer glissMixer;
|
||||||
|
SynthMixer grainMixer;
|
||||||
|
ExponentialLag grainFader;
|
||||||
|
MultiplyUnit grainMult;
|
||||||
|
ExponentialLag glissFader;
|
||||||
|
MultiplyUnit glissMult;
|
||||||
|
//MultiplyUnit glissMultForCurve;
|
||||||
|
int currentTick;
|
||||||
|
|
||||||
|
public Glissandi(){
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(GrainStream[] gS, int gMin, int cT, int nG){
|
||||||
|
|
||||||
|
currentTick = cT;
|
||||||
|
Rise.MASTER_MIXER = new SynthMixer(3,1);
|
||||||
|
glissMixer = new SynthMixer(Rise.VOICES,1);
|
||||||
|
grainMixer = new SynthMixer(nG,1);
|
||||||
|
Rise.CLICK_MIXER = new SynthMixer(10,1);
|
||||||
|
lineOut = new LineOut();
|
||||||
|
Rise.MASTER_MULT = new MultiplyUnit();
|
||||||
|
Rise.MASTER_FADER = new ExponentialLag();
|
||||||
|
grainMult = new MultiplyUnit();
|
||||||
|
grainFader = new ExponentialLag();
|
||||||
|
glissMult = new MultiplyUnit();
|
||||||
|
glissFader = new ExponentialLag();
|
||||||
|
Rise.CLICK_MULT = new MultiplyUnit();
|
||||||
|
Rise.CLICK_FADER = new ExponentialLag();
|
||||||
|
|
||||||
|
//System.out.println(Rise.FIRST_NUM + " " + Rise.VOICES);
|
||||||
|
|
||||||
|
gliss = new WaveForm[Rise.VOICES];
|
||||||
|
num = new AddUnit[Rise.VOICES];
|
||||||
|
ratio = new DivideUnit[Rise.VOICES];
|
||||||
|
freq = new MultiplyUnit[Rise.VOICES];
|
||||||
|
|
||||||
|
fund = EqualTemperedTuning.getMIDIFrequency(24+Rise.TRANSPOSE_SCORE+Rise.TRANSPOSE_SOUND);
|
||||||
|
//System.out.println(Rise.TOTAL_DUR);
|
||||||
|
|
||||||
|
//Make sure this is ok
|
||||||
|
envPlayer = new EnvelopePlayer();
|
||||||
|
double[] envData = new double[302];
|
||||||
|
double playDuration = Rise.TOTAL_DUR - Rise.START_TIME;
|
||||||
|
double startEnvPosition = Rise.START_TIME/Rise.TOTAL_DUR;
|
||||||
|
double envLength = 1 - startEnvPosition;
|
||||||
|
|
||||||
|
envData[0] = 0;
|
||||||
|
envData[1] = startEnvPosition;
|
||||||
|
for (int i = 1; i < envData.length/2; i++){
|
||||||
|
envData[i * 2] = playDuration/((envData.length-2)/2);
|
||||||
|
envData[i * 2 + 1] = startEnvPosition + (envLength/ ((envData.length-2)/2)) * (i);
|
||||||
|
}
|
||||||
|
//System.out.println(envData[1] + " " + envData[envData.length-1]);
|
||||||
|
env = new SynthEnvelope(envData);
|
||||||
|
|
||||||
|
denMult = new MultiplyUnit();
|
||||||
|
denMult.inputA.connect(envPlayer.output);
|
||||||
|
denMult.inputB.set(-1 * (Rise.VOICES - 1));
|
||||||
|
|
||||||
|
den = new AddUnit();
|
||||||
|
den.inputA.set(Rise.FIRST_NUM);
|
||||||
|
den.inputB.connect(denMult.output);
|
||||||
|
|
||||||
|
int advanceTime = (int) (currentTick + 4 * Synth.getTickRate());
|
||||||
|
|
||||||
|
//int[] cuePoints = new int[Rise.VOICES * 14];
|
||||||
|
|
||||||
|
for (int i = 0; i < Rise.VOICES; i++){
|
||||||
|
|
||||||
|
//System.out.println(i);
|
||||||
|
|
||||||
|
gliss[i] = new WaveForm();
|
||||||
|
num[i] = new AddUnit();
|
||||||
|
ratio[i] = new DivideUnit();
|
||||||
|
freq[i] = new MultiplyUnit();
|
||||||
|
|
||||||
|
double spectrum = (Rise.MAX_SPECTRUM - Rise.MIN_SPECTRUM)/2. + Rise.MIN_SPECTRUM;
|
||||||
|
gliss[i].spectrum.set(spectrum);
|
||||||
|
|
||||||
|
num[i].inputA.set(i);
|
||||||
|
num[i].inputB.connect(den.output);
|
||||||
|
|
||||||
|
ratio[i].inputA.connect(num[i].output);
|
||||||
|
ratio[i].inputB.connect(den.output);
|
||||||
|
|
||||||
|
freq[i].inputA.connect(ratio[i].output);
|
||||||
|
freq[i].inputB.set(fund);
|
||||||
|
|
||||||
|
freq[i].output.connect(gliss[i].frequency);
|
||||||
|
|
||||||
|
//gliss[i].envRate.set(1); // figure out this number
|
||||||
|
|
||||||
|
|
||||||
|
int startTick = (int) (advanceTime + (((Rise.TOTAL_DUR/(Rise.VOICES-1.) * i) - Rise.START_TIME) * Synth.getTickRate()));
|
||||||
|
double startPitch = fund * Rise.FIRST_NUM/(Rise.FIRST_NUM-i);
|
||||||
|
//System.out.println("test " + startTick + " " + Synth.getTickCount());
|
||||||
|
//System.out.println("show " + ((Rise.TOTAL_DUR/(Rise.VOICES-1.) * i) - Rise.START_TIME));
|
||||||
|
|
||||||
|
//double st = (Rise.TOTAL_DUR/(Rise.VOICES-1.) * i);
|
||||||
|
|
||||||
|
double startAmp = (((1/(Rise.VOICES-1.)) * i) * (Rise.GLISS_AMP_END - Rise.GLISS_AMP_START)) + Rise.GLISS_AMP_START;
|
||||||
|
|
||||||
|
envData = new double[6];
|
||||||
|
|
||||||
|
envData[0] = 1;
|
||||||
|
envData[1] = startAmp;
|
||||||
|
envData[2] = Rise.TOTAL_DUR - ((1/(Rise.VOICES-1.)) * i) - 1;
|
||||||
|
envData[3] = Rise.GLISS_AMP_END;
|
||||||
|
envData[4] = Rise.FADE_DUR + Math.random()*5;
|
||||||
|
envData[5] = 0;
|
||||||
|
|
||||||
|
if (Rise.START_TIME > (Rise.TOTAL_DUR/(Rise.VOICES-1.) * i)){
|
||||||
|
|
||||||
|
startAmp = (Rise.START_TIME/Rise.TOTAL_DUR) * (Rise.GLISS_AMP_END - Rise.GLISS_AMP_START) + Rise.GLISS_AMP_START;
|
||||||
|
|
||||||
|
envData[0] = 1;
|
||||||
|
envData[1] = startAmp;
|
||||||
|
envData[2] = Rise.TOTAL_DUR - Rise.START_TIME - 1;
|
||||||
|
envData[3] = Rise.GLISS_AMP_END;
|
||||||
|
envData[4] = Rise.FADE_DUR + Math.random()*5;
|
||||||
|
envData[5] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == Rise.VOICES-1){
|
||||||
|
envData = new double[4];
|
||||||
|
envData[0] = 1;
|
||||||
|
envData[1] = Rise.GLISS_AMP_END;
|
||||||
|
envData[2] = Rise.FADE_DUR + Math.random()*5;
|
||||||
|
envData[3] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// for (int j = 0; j < envData.length; j++) {
|
||||||
|
// System.out.println(i + " " + envData[j]);
|
||||||
|
// }
|
||||||
|
|
||||||
|
gliss[i].glissOn(startTick, startPitch, 1 /*(1./Rise.VOICES)*/, envData );
|
||||||
|
|
||||||
|
// envData = new double[4];
|
||||||
|
//
|
||||||
|
// envData[0] = 0;
|
||||||
|
// envData[1] = startAmp;
|
||||||
|
// envData[2] = Rise.TOTAL_DUR - ((1/(Rise.VOICES-1.)) * i) - 1;
|
||||||
|
// envData[3] = 1;
|
||||||
|
//
|
||||||
|
// gliss[i].glissSustain((int) (startTick + Synth.getTickRate()), envData);
|
||||||
|
|
||||||
|
// for (int j = 0; j < 14; j++){
|
||||||
|
// cuePoints[14 * i + j] = (int) (startTick - 3 * Synth.getTickRate() + Synth.getTickRate()/2. * j);
|
||||||
|
// }
|
||||||
|
|
||||||
|
//System.out.println("test " + startTick + " " + endTick + " " + Synth.getTickCount() + " " + ((1./ (Rise.VOICES-1)) * i));
|
||||||
|
|
||||||
|
//make this have jitter??
|
||||||
|
//gliss[i].glissOff(endTick, (.5 / (Rise.FADE_DUR + Math.random()*5)));
|
||||||
|
|
||||||
|
num[i].start(startTick);
|
||||||
|
ratio[i].start(startTick);
|
||||||
|
freq[i].start(startTick);
|
||||||
|
|
||||||
|
glissMixer.connectInput(i, gliss[i].output, 0);
|
||||||
|
glissMixer.setGain(i, 0, (1./Rise.VOICES));
|
||||||
|
}
|
||||||
|
|
||||||
|
//c.init(cuePoints);
|
||||||
|
|
||||||
|
denMult.start(advanceTime);
|
||||||
|
den.start(advanceTime);
|
||||||
|
//System.out.println(envPlayer.getSynthContext().getTickCount());
|
||||||
|
|
||||||
|
envPlayer.start(advanceTime);
|
||||||
|
|
||||||
|
envPlayer.envelopePort.clear(advanceTime);
|
||||||
|
envPlayer.envelopePort.queue(advanceTime,env,0,env.getNumFrames());
|
||||||
|
|
||||||
|
grainStream = gS;
|
||||||
|
|
||||||
|
for (int i = 0; i < nG; i++){
|
||||||
|
grainMixer.connectInput(i, grainStream[i].grain.output, 0);
|
||||||
|
grainMixer.setGain(i, 0, 1);
|
||||||
|
int grainStartTick = (int) (advanceTime + Rise.START_TIME * Synth.getTickRate());
|
||||||
|
|
||||||
|
if (i > gMin){
|
||||||
|
grainStartTick = (int) (advanceTime + (((Rise.TOTAL_DUR/(nG - gMin) * (i - gMin)) - Rise.START_TIME) * Synth.getTickRate()));
|
||||||
|
}
|
||||||
|
|
||||||
|
//System.out.println("tick " + grainStartTick);
|
||||||
|
grainStream[i].setStartTick(grainStartTick + (int) (Synth.getTickRate() * Math.random() * 5));
|
||||||
|
int endTick = (int) (advanceTime + ((Rise.TOTAL_DUR - Rise.START_TIME) * Synth.getTickRate()));
|
||||||
|
grainStream[i].setEndTick(endTick);
|
||||||
|
}
|
||||||
|
|
||||||
|
grainMult.inputA.connect(grainFader.output);
|
||||||
|
grainMult.inputB.connect(grainMixer.getOutput(0));
|
||||||
|
|
||||||
|
glissMult.inputA.connect(glissFader.output);
|
||||||
|
glissMult.inputB.connect(glissMixer.getOutput(0));
|
||||||
|
|
||||||
|
for (int count = 0; count < 10; count++){
|
||||||
|
Rise.CLICK_MIXER.setGain(count, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Rise.CLICK_MULT.inputA.connect(Rise.CLICK_FADER.output);
|
||||||
|
Rise.CLICK_MULT.inputB.connect(Rise.CLICK_MIXER.getOutput(0));
|
||||||
|
|
||||||
|
Rise.MASTER_MIXER.connectInput(0, glissMult.output, 0);
|
||||||
|
Rise.MASTER_MIXER.setGain(0, 0, 1);
|
||||||
|
|
||||||
|
Rise.MASTER_MIXER.connectInput(1, grainMult.output, 0);
|
||||||
|
Rise.MASTER_MIXER.setGain(1, 0, 1);
|
||||||
|
|
||||||
|
Rise.MASTER_MIXER.connectInput(2, Rise.CLICK_MULT.output, 0);
|
||||||
|
Rise.MASTER_MIXER.setGain(2, 0, 1);
|
||||||
|
|
||||||
|
Rise.MASTER_MULT.inputA.connect(Rise.MASTER_FADER.output);
|
||||||
|
Rise.MASTER_MULT.inputB.connect(Rise.MASTER_MIXER.getOutput(0));
|
||||||
|
|
||||||
|
lineOut.input.connect(0, Rise.MASTER_MULT.output, 0);
|
||||||
|
lineOut.input.connect(1, Rise.MASTER_MULT.output, 0);
|
||||||
|
|
||||||
|
lineOut.start(advanceTime);
|
||||||
|
glissMixer.start(advanceTime);
|
||||||
|
grainMixer.start(advanceTime);
|
||||||
|
|
||||||
|
Rise.MASTER_MIXER.start(advanceTime);
|
||||||
|
Rise.MASTER_MULT.start(advanceTime);
|
||||||
|
Rise.MASTER_FADER.start(advanceTime);
|
||||||
|
Rise.CLICK_MIXER.start(advanceTime);
|
||||||
|
Rise.CLICK_MULT.start(advanceTime);
|
||||||
|
Rise.CLICK_FADER.start(advanceTime);
|
||||||
|
|
||||||
|
grainMult.start(advanceTime);
|
||||||
|
grainFader.start(advanceTime);
|
||||||
|
glissMult.start(advanceTime);
|
||||||
|
glissFader.start(advanceTime);
|
||||||
|
|
||||||
|
for (int i = 0; i < nG; i++){
|
||||||
|
grainStream[i].setTimer(envPlayer);
|
||||||
|
}
|
||||||
|
|
||||||
|
isOn = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGlissFader(double a){
|
||||||
|
if (Rise.IS_ENGINE_ON == true) {
|
||||||
|
glissFader.input.set(a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGrainFader(double a){
|
||||||
|
if (Rise.IS_ENGINE_ON == true) {
|
||||||
|
grainFader.input.set(a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized void run() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
//System.out.println("waiting");
|
||||||
|
this.wait(0);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
Synth.sleepUntilTick( (int) (currentTick + 1 * Synth.getTickRate()) );
|
||||||
|
|
||||||
|
Rise.CUE_PANEL.color = Color.YELLOW;
|
||||||
|
Rise.CUE_PANEL.repaint();
|
||||||
|
|
||||||
|
Synth.sleepUntilTick( (int) (currentTick + 2 * Synth.getTickRate()) );
|
||||||
|
|
||||||
|
Rise.CUE_PANEL.color = Color.GREEN;
|
||||||
|
Rise.CUE_PANEL.repaint();
|
||||||
|
|
||||||
|
Synth.sleepUntilTick( (int) (currentTick + 3 * Synth.getTickRate()) );
|
||||||
|
|
||||||
|
Rise.CUE_PANEL.color = Color.BLACK;
|
||||||
|
Rise.CUE_PANEL.repaint();
|
||||||
|
|
||||||
|
int startTime = (int) (currentTick + 3 * Synth.getTickRate()); ///*Synth.getTickCount()*/ currentTick + (int) Synth.getTickRate();
|
||||||
|
int duration = (int) (Synth.getTickRate() / 5); // Resolution should be pixles in view
|
||||||
|
|
||||||
|
int advanceTime = (int) (Synth.getTickRate() * 0.05); // half second advance
|
||||||
|
Synth.sleepUntilTick( startTime - advanceTime ); // Wake up early!
|
||||||
|
int nextTime = startTime;
|
||||||
|
|
||||||
|
while(true)
|
||||||
|
{
|
||||||
|
if (Rise.IS_ENGINE_ON == true) {
|
||||||
|
//System.out.println(envPlayer.output.get());
|
||||||
|
|
||||||
|
Rise.CUE_PANEL.envPos = envPlayer.output.get();
|
||||||
|
Rise.CUE_PANEL.repaint();
|
||||||
|
|
||||||
|
Rise.SCROLLBAR.xPos = envPlayer.output.get() * Rise.SCROLLBAR_WIDTH;
|
||||||
|
if (envPlayer.output.get() == 0){
|
||||||
|
Rise.SCROLLBAR.xPos = (Rise.START_TIME/Rise.TOTAL_DUR) * Rise.SCROLLBAR_WIDTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
Rise.SCROLLBAR.repaint();
|
||||||
|
nextTime += duration; // Advance nextTime by fixed amount.
|
||||||
|
Synth.sleepUntilTick( nextTime - advanceTime ); // Wake up early!
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
try {
|
||||||
|
//System.out.println("waiting");
|
||||||
|
this.wait(0);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void kill() {
|
||||||
|
isOn = false;
|
||||||
|
for (int i = 0; i < Rise.VOICES; i++){
|
||||||
|
gliss[i].glissOff(0, 1);
|
||||||
|
num[i].stop();
|
||||||
|
ratio[i].stop();
|
||||||
|
freq[i].stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
denMult.stop();
|
||||||
|
den.stop();
|
||||||
|
envPlayer.stop();
|
||||||
|
|
||||||
|
glissMixer.stop(0);
|
||||||
|
grainMixer.stop(0);
|
||||||
|
|
||||||
|
Rise.MASTER_FADER.stop(0);
|
||||||
|
Rise.MASTER_MULT.stop(0);
|
||||||
|
Rise.MASTER_MIXER.stop(0);
|
||||||
|
|
||||||
|
Rise.CLICK_FADER.stop(0);
|
||||||
|
Rise.CLICK_MULT.stop(0);
|
||||||
|
Rise.CLICK_MIXER.stop(0);
|
||||||
|
|
||||||
|
grainMult.stop(0);
|
||||||
|
grainFader.stop(0);
|
||||||
|
glissMult.stop(0);
|
||||||
|
glissFader.stop(0);
|
||||||
|
lineOut.stop(0);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,194 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
|
import com.softsynth.jsyn.EnvelopePlayer;
|
||||||
|
import com.softsynth.jsyn.Synth;
|
||||||
|
|
||||||
|
public class GrainStream extends Thread {
|
||||||
|
|
||||||
|
WaveForm grain = new WaveForm();
|
||||||
|
// double ampValStart;
|
||||||
|
// double ampValEnd;
|
||||||
|
// double ampJitStart;
|
||||||
|
// double ampJitEnd;
|
||||||
|
//
|
||||||
|
// double soundDurValStart;
|
||||||
|
// double soundDurValEnd;
|
||||||
|
// double soundDurJitStart;
|
||||||
|
// double soundDurJitEnd;
|
||||||
|
//
|
||||||
|
// double silenceDurValStart;
|
||||||
|
// double silenceDurValEnd;
|
||||||
|
// double silenceDurJitStart;
|
||||||
|
// double silenceDurJitEnd;
|
||||||
|
|
||||||
|
int startTick;
|
||||||
|
int endTick;
|
||||||
|
|
||||||
|
EnvelopePlayer envPlayer;
|
||||||
|
|
||||||
|
PitchVector pitchVector;
|
||||||
|
|
||||||
|
int instance;
|
||||||
|
|
||||||
|
int noGrains;
|
||||||
|
|
||||||
|
public GrainStream(){
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(double aVS, double aVE, double aJS, double aJE,
|
||||||
|
double soDVS, double soDVE, double soDJS, double soDJE,
|
||||||
|
double siDVS, double siDVE, double siDJS, double siDJE,
|
||||||
|
PitchVector pV, int nG, int i){
|
||||||
|
|
||||||
|
//System.out.println("WOOHOO!!!");
|
||||||
|
|
||||||
|
// ampValStart = aVS;
|
||||||
|
// ampValEnd = aVE;
|
||||||
|
// ampJitStart = aJS;
|
||||||
|
// ampJitEnd = aJE;
|
||||||
|
//
|
||||||
|
// soundDurValStart = soDVS;
|
||||||
|
// soundDurValEnd = soDVE;
|
||||||
|
// soundDurJitStart = soDJS;
|
||||||
|
// soundDurJitEnd = soDJE;
|
||||||
|
//
|
||||||
|
// //System.out.println(soundDurValStart);
|
||||||
|
//
|
||||||
|
// silenceDurValStart = siDVS;
|
||||||
|
// silenceDurValEnd = siDVE;
|
||||||
|
// silenceDurJitStart = siDJS;
|
||||||
|
// silenceDurJitEnd = siDJE;
|
||||||
|
|
||||||
|
pitchVector = pV;
|
||||||
|
noGrains = nG;
|
||||||
|
|
||||||
|
instance = i;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStartTick(int sT){
|
||||||
|
startTick = sT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEndTick(int eT){
|
||||||
|
endTick = eT;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTimer(EnvelopePlayer eP){
|
||||||
|
envPlayer = eP;
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized void run() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
//System.out.println("waiting");
|
||||||
|
this.wait(0);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
//boolean isOn = true;
|
||||||
|
|
||||||
|
int startTime = startTick;
|
||||||
|
int endTime = endTick;
|
||||||
|
|
||||||
|
int advanceTime = (int) (Synth.getTickRate() * 0.5); // half second advance
|
||||||
|
Synth.sleepUntilTick( startTime - advanceTime /*(int) (Math.random() * 2 * Synth.getTickRate())*/); // Wake up early!
|
||||||
|
|
||||||
|
int upDuration = (int) (Synth.getTickRate() / 10);
|
||||||
|
|
||||||
|
int nextTime = startTime;
|
||||||
|
int nextGrainTime = startTime;
|
||||||
|
|
||||||
|
while(true)
|
||||||
|
{
|
||||||
|
if (Rise.IS_ENGINE_ON == true) {
|
||||||
|
|
||||||
|
//System.out.println("IM ON!!!");
|
||||||
|
|
||||||
|
//double freq = Math.random() * 300 + 300;
|
||||||
|
if (Synth.getTickCount() > nextGrainTime - advanceTime) {
|
||||||
|
|
||||||
|
double envPosition = envPlayer.output.get();
|
||||||
|
|
||||||
|
int aPos = (int) (envPosition * (int) (Rise.TOTAL_DUR * 10));
|
||||||
|
|
||||||
|
int rand = (int) (Math.random() * pitchVector.array[aPos].size());
|
||||||
|
|
||||||
|
double randFadeJitter = (Math.random() * 5);
|
||||||
|
|
||||||
|
//System.out.println(aPos + " " + pitchVector.array[aPos].size());
|
||||||
|
|
||||||
|
double freq = (Double) pitchVector.array[aPos].get(rand);
|
||||||
|
|
||||||
|
// double duration =
|
||||||
|
// (soundDurValStart - envPosition * Math.abs(soundDurValStart - soundDurValEnd)) +
|
||||||
|
// ((soundDurJitStart - envPosition * Math.abs(soundDurJitStart - soundDurJitEnd)) *
|
||||||
|
// (Math.random() * 2 - 1));
|
||||||
|
// grain.envRate.set(1./duration);
|
||||||
|
//
|
||||||
|
// double pause =
|
||||||
|
// (silenceDurValStart - envPosition * Math.abs(silenceDurValStart - silenceDurValEnd)) +
|
||||||
|
// ((silenceDurJitStart - envPosition * Math.abs(silenceDurJitStart - silenceDurJitEnd)) *
|
||||||
|
// (Math.random() * 2 - 1));
|
||||||
|
//
|
||||||
|
// double amp =
|
||||||
|
// ((ampValStart + envPosition * Math.abs(ampValEnd - ampValStart)) +
|
||||||
|
// ((ampJitStart + envPosition * Math.abs(ampJitEnd - ampJitStart)) *
|
||||||
|
// (Math.random() * 2 - 1)));
|
||||||
|
|
||||||
|
double duration =
|
||||||
|
(Rise.GRAIN_SOUND_DUR_VAL_START - envPosition * Math.abs(Rise.GRAIN_SOUND_DUR_VAL_START - Rise.GRAIN_SOUND_DUR_VAL_END)) +
|
||||||
|
((Rise.GRAIN_SOUND_DUR_JIT_START - envPosition * Math.abs(Rise.GRAIN_SOUND_DUR_JIT_START - Rise.GRAIN_SOUND_DUR_JIT_END)) *
|
||||||
|
(Math.random() * 2 - 1));
|
||||||
|
grain.envRate.set(1./duration);
|
||||||
|
|
||||||
|
double pause =
|
||||||
|
(Rise.GRAIN_SILENCE_DUR_VAL_START - envPosition * Math.abs(Rise.GRAIN_SILENCE_DUR_VAL_START - Rise.GRAIN_SILENCE_DUR_VAL_END)) +
|
||||||
|
((Rise.GRAIN_SILENCE_DUR_JIT_START - envPosition * Math.abs(Rise.GRAIN_SILENCE_DUR_JIT_START - Rise.GRAIN_SILENCE_DUR_JIT_END)) *
|
||||||
|
(Math.random() * 2 - 1));
|
||||||
|
|
||||||
|
double amp =
|
||||||
|
((Rise.GRAIN_AMP_VAL_START + envPosition * Math.abs(Rise.GRAIN_AMP_VAL_END - Rise.GRAIN_AMP_VAL_START)) +
|
||||||
|
((Rise.GRAIN_AMP_JIT_START + envPosition * Math.abs(Rise.GRAIN_AMP_JIT_END - Rise.GRAIN_AMP_JIT_START)) *
|
||||||
|
(Math.random() * 2 - 1)));
|
||||||
|
|
||||||
|
if (Synth.getTickCount() > endTime) {
|
||||||
|
amp = amp * Math.abs((Synth.getTickCount() - endTime)/((Rise.FADE_DUR+randFadeJitter)*Synth.getTickRate())-1);
|
||||||
|
if (Synth.getTickCount() > endTime + (Rise.FADE_DUR+randFadeJitter)*Synth.getTickRate()){
|
||||||
|
amp = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//System.out.println((Synth.getTickCount() - endTime) + " " + amp + " " + (Synth.getTickCount() - endTime)/(Rise.FADE_DUR*Synth.getTickRate()));
|
||||||
|
|
||||||
|
double spectrum =
|
||||||
|
Rise.MIN_SPECTRUM + Math.random() * Math.abs(Rise.MAX_SPECTRUM - Rise.MIN_SPECTRUM);
|
||||||
|
|
||||||
|
grain.spectrum.set(spectrum);
|
||||||
|
grain.grainOn(0, freq, amp);
|
||||||
|
|
||||||
|
//System.out.println("instance = " + instance);
|
||||||
|
|
||||||
|
//System.out.println(duration + " " + pause + " " + amp);
|
||||||
|
|
||||||
|
int durationInTicks = (int) (Synth.getTickRate() * duration);
|
||||||
|
int pauseInTicks = (int) (Synth.getTickRate() * pause);
|
||||||
|
nextGrainTime += (durationInTicks + pauseInTicks);
|
||||||
|
|
||||||
|
}
|
||||||
|
nextTime += (upDuration); // Advance nextTime by fixed amount.
|
||||||
|
Synth.sleepUntilTick( nextTime - advanceTime ); // Wake up early!
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
try {
|
||||||
|
//System.out.println("waiting");
|
||||||
|
this.wait(0);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,405 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.awt.FontMetrics;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.font.FontRenderContext;
|
||||||
|
import java.awt.font.TextLayout;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import java.awt.geom.Rectangle2D;
|
||||||
|
|
||||||
|
public class Note extends JPanel{
|
||||||
|
|
||||||
|
int noTimesClicked = 0;
|
||||||
|
double x;
|
||||||
|
double y;
|
||||||
|
int n;
|
||||||
|
int d;
|
||||||
|
int v;
|
||||||
|
int p;
|
||||||
|
double pitch;
|
||||||
|
int clefChoice;
|
||||||
|
int octavaAndBassoChoice;
|
||||||
|
int spellingChoice;
|
||||||
|
int ratioChoice;
|
||||||
|
int noteHeadChoice = 0;
|
||||||
|
String[] clefs = {"\uf03f", "\uf042", "\uf042", "\uf026"};
|
||||||
|
String[] octavasAndBassos = {"15", "8", " ", "8", "15"};
|
||||||
|
String[] acc = {"\uf062","\uf06e", "\uf023"};
|
||||||
|
|
||||||
|
float clickAndPlayX1;
|
||||||
|
float clickAndPlayX2;
|
||||||
|
|
||||||
|
Color color = Color.BLACK;
|
||||||
|
|
||||||
|
boolean isListening = false;
|
||||||
|
|
||||||
|
public Note(double x, double y, double p, int v, int pP){
|
||||||
|
this.x = x;
|
||||||
|
this.y = y;
|
||||||
|
n = (int) (Rise.FIRST_NUM+v-pP);
|
||||||
|
d = (int) (Rise.FIRST_NUM-pP);
|
||||||
|
this.pitch = p + Rise.TRANSPOSE_SCORE * 100.;
|
||||||
|
this.v = v;
|
||||||
|
this.p = pP;
|
||||||
|
this.setOpaque(false);
|
||||||
|
this.setBackground(Color.WHITE);
|
||||||
|
this.setBounds((int) 0, (int) 0,(int) (Rise.PAGE_WIDTH*Rise.ZOOM), (int) (Rise.PAGE_HEIGHT*Rise.ZOOM));
|
||||||
|
initializeChoices();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paint(Graphics g){
|
||||||
|
g.setColor(color);
|
||||||
|
Graphics2D g2 = (Graphics2D) g;
|
||||||
|
this.setBounds((int) 0, (int) 0,(int) (Rise.PAGE_WIDTH*Rise.ZOOM), (int) (Rise.PAGE_HEIGHT*Rise.ZOOM));
|
||||||
|
g2.translate(Rise.PAGE_MARGIN*Rise.ZOOM, Rise.PAGE_MARGIN*Rise.ZOOM);
|
||||||
|
g2.scale(Rise.ZOOM, Rise.ZOOM);
|
||||||
|
|
||||||
|
FontRenderContext frc = g2.getFontRenderContext();
|
||||||
|
Font fontMusic = new Font("Maestro", Font.PLAIN, (int) Rise.FONT);
|
||||||
|
fontMusic.deriveFont(Rise.FONT);
|
||||||
|
Font fontNumbers = new Font("Liberation Serif", Font.PLAIN, (int) Math.round(Rise.FONT/1.714));
|
||||||
|
Font fontOBSigns = new Font("Liberation Serif", Font.PLAIN, (int) Math.round(Rise.FONT/2.4));
|
||||||
|
TextLayout note = new TextLayout("\uf0cf", fontMusic, frc);
|
||||||
|
TextLayout staff = new TextLayout("\uf03d\uf03d", fontMusic, frc);
|
||||||
|
TextLayout ledgerLine = new TextLayout("\uf02d", fontMusic, frc);
|
||||||
|
g2.setFont(fontMusic);
|
||||||
|
FontMetrics fontMetrics = g2.getFontMetrics();
|
||||||
|
double noteWidth = fontMetrics.stringWidth("\uf0cf");
|
||||||
|
double staffWidth = fontMetrics.stringWidth("\uf03d");
|
||||||
|
double ledgerWidth = fontMetrics.stringWidth("\uf02d");
|
||||||
|
double staffSpace = Rise.FONT/8.;
|
||||||
|
float noteX = (float) (x*Rise.IMAGE_WIDTH - noteWidth/2. /*- ((1./(Rise.VOICES-1))*(p-v)/p)*Rise.IMAGE_WIDTH*Rise.X_DIV*/);
|
||||||
|
float noteY = (float) y*Rise.IMAGE_HEIGHT;
|
||||||
|
|
||||||
|
float toneX1 = (float) (x*Rise.IMAGE_WIDTH - ((1./(Rise.VOICES-1))*(p-v)/p)*Rise.IMAGE_WIDTH*Rise.X_DIV);
|
||||||
|
float toneX2;
|
||||||
|
if (p != Rise.VOICES-1) {
|
||||||
|
toneX2 = (float) (x*Rise.IMAGE_WIDTH + ((1./(Rise.VOICES-1))*v/(p+1))*Rise.IMAGE_WIDTH*Rise.X_DIV);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
toneX2 = (float) (x*Rise.IMAGE_WIDTH + ((1./(Rise.VOICES-1))*.25)*Rise.IMAGE_WIDTH*Rise.X_DIV);
|
||||||
|
}
|
||||||
|
float toneY1 = (float) (noteY - note.getBounds().getMaxY()/3);
|
||||||
|
float toneY2 = (float) (noteY - note.getBounds().getMinY()/3);
|
||||||
|
|
||||||
|
//System.out.println("notes " + ((1./(Rise.VOICES-1))*(p-v)/p) + " " + ((1./(Rise.VOICES-1))*v/(p+1)));
|
||||||
|
|
||||||
|
g2.setColor(new Color(200, 200, 200));
|
||||||
|
g2.fill(new Rectangle2D.Float(toneX1, toneY1, toneX2-toneX1, toneY2-toneY1));
|
||||||
|
g2.setColor(color);
|
||||||
|
|
||||||
|
clickAndPlayX1 = toneX1;
|
||||||
|
clickAndPlayX2 = toneX2;
|
||||||
|
|
||||||
|
note.draw(g2,noteX,noteY);
|
||||||
|
|
||||||
|
double accWidth = fontMetrics.stringWidth(acc[getAcc((int) (Math.round(pitch/100.)%12))]);
|
||||||
|
TextLayout accidental = new TextLayout(acc[getAcc((int) (Math.round(pitch/100.)%12))], fontMusic, frc);
|
||||||
|
accidental.draw(g2,(float) (noteX-accWidth-2),(float) y*Rise.IMAGE_HEIGHT);
|
||||||
|
|
||||||
|
int notePosition = getNotePosition((int) (Math.round(pitch/100.)%12));
|
||||||
|
|
||||||
|
int centDeviation = (int) Math.round((pitch/100. - Math.round(pitch/100.))*100.);
|
||||||
|
TextLayout centDeviationText;
|
||||||
|
if (centDeviation >= 0) {
|
||||||
|
centDeviationText = new TextLayout("+" + String.valueOf(centDeviation), fontNumbers, frc);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
centDeviationText = new TextLayout(String.valueOf(centDeviation), fontNumbers, frc);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = d; i > 0; i--) {
|
||||||
|
if (Math.round((float) d/i) == (float) d/i
|
||||||
|
&& Math.round((float) n/i) == (float) n/i) {
|
||||||
|
n = n/i;
|
||||||
|
d = d/i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
TextLayout ratioText = new TextLayout(String.valueOf(n) + "/" + String.valueOf(d), fontNumbers, frc);
|
||||||
|
|
||||||
|
int stepsToLowestC = 0;
|
||||||
|
int addOctaves = 0;
|
||||||
|
int stepsToClef = 0;
|
||||||
|
|
||||||
|
if (clefChoice == 0){
|
||||||
|
stepsToLowestC = -11;
|
||||||
|
stepsToClef = 6;
|
||||||
|
}
|
||||||
|
else if (clefChoice == 1){
|
||||||
|
stepsToLowestC = -15;
|
||||||
|
stepsToClef = 6;
|
||||||
|
}
|
||||||
|
else if (clefChoice == 2){
|
||||||
|
stepsToLowestC = -17;
|
||||||
|
stepsToClef = 4;
|
||||||
|
}
|
||||||
|
else if (clefChoice == 3){
|
||||||
|
stepsToLowestC = -23;
|
||||||
|
stepsToClef = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (octavaAndBassoChoice == 0){
|
||||||
|
stepsToLowestC = stepsToLowestC+14;
|
||||||
|
}
|
||||||
|
else if (octavaAndBassoChoice == 1){
|
||||||
|
stepsToLowestC = stepsToLowestC+7;
|
||||||
|
}
|
||||||
|
else if (octavaAndBassoChoice == 2){
|
||||||
|
}
|
||||||
|
else if (octavaAndBassoChoice == 3){
|
||||||
|
stepsToLowestC = stepsToLowestC-7;
|
||||||
|
}
|
||||||
|
else if (octavaAndBassoChoice == 4){
|
||||||
|
stepsToLowestC = stepsToLowestC-14;
|
||||||
|
}
|
||||||
|
|
||||||
|
addOctaves = (int) (Math.round(pitch/100.)/12)*7;
|
||||||
|
float staffX = (float) (x*Rise.IMAGE_WIDTH - 1.5*staffWidth /*- ((1./(Rise.VOICES-1))*(p-v)/p)*Rise.IMAGE_WIDTH*Rise.X_DIV*noteHeadChoice*/);
|
||||||
|
float staffY = (float) (y*Rise.IMAGE_HEIGHT+(stepsToLowestC+notePosition+addOctaves)*staffSpace);
|
||||||
|
staff.draw(g2, staffX, staffY);
|
||||||
|
float clefX = (float) (x*Rise.IMAGE_WIDTH - 1.5*staffWidth /*- ((1./(Rise.VOICES-1))*(p-v)/p)*Rise.IMAGE_WIDTH*Rise.X_DIV*noteHeadChoice*/);
|
||||||
|
float clefY = (float) (y*Rise.IMAGE_HEIGHT+((stepsToLowestC-stepsToClef)+notePosition+addOctaves)*staffSpace);
|
||||||
|
TextLayout clef = new TextLayout(clefs[clefChoice], fontMusic, frc);
|
||||||
|
clef.draw(g2, clefX, clefY);
|
||||||
|
TextLayout octavaAndBasso = new TextLayout(octavasAndBassos[octavaAndBassoChoice], fontOBSigns, frc);
|
||||||
|
if (octavaAndBassoChoice < 2){
|
||||||
|
octavaAndBasso.draw(g2,(float) (clefX+clef.getVisibleAdvance()/2.-octavaAndBasso.getAdvance()/2),(float) (clefY+clef.getBounds().getMaxY()-octavaAndBasso.getBounds().getMinY()));
|
||||||
|
}
|
||||||
|
else if (octavaAndBassoChoice < 3){
|
||||||
|
}
|
||||||
|
else if(octavaAndBassoChoice < 5){
|
||||||
|
if (clefChoice == 3 && octavaAndBassoChoice == 3) {
|
||||||
|
octavaAndBasso.draw(g2,(float) (clefX+clef.getVisibleAdvance()/2.-octavaAndBasso.getAdvance()/16.),(float) (clefY+clef.getBounds().getMinY()));
|
||||||
|
}
|
||||||
|
else if (clefChoice == 3 && octavaAndBassoChoice == 4) {
|
||||||
|
octavaAndBasso.draw(g2,(float) (clefX+clef.getVisibleAdvance()/2.-octavaAndBasso.getAdvance()/4.),(float) (clefY+clef.getBounds().getMinY()));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
octavaAndBasso.draw(g2,(float) (clefX+clef.getVisibleAdvance()/2.-octavaAndBasso.getAdvance()/2),(float) (clefY+clef.getBounds().getMinY()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (noteY-staffY >= staffSpace*2){
|
||||||
|
float ledgerLineX = (float) (x*Rise.IMAGE_WIDTH - ledgerWidth/2.);
|
||||||
|
float ledgerLineY = (float) (staffY+staffSpace*2);
|
||||||
|
while (ledgerLineY <= noteY){
|
||||||
|
ledgerLine.draw(g2, ledgerLineX, ledgerLineY);
|
||||||
|
ledgerLineY = (float) (ledgerLineY+staffSpace*2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (staffY-noteY >= staffSpace*10){
|
||||||
|
float ledgerLineX = (float) (x*Rise.IMAGE_WIDTH - ledgerWidth/2.);
|
||||||
|
float ledgerLineY = (float) (staffY-staffSpace*10);
|
||||||
|
while (ledgerLineY >= noteY){
|
||||||
|
ledgerLine.draw(g2, ledgerLineX, ledgerLineY);
|
||||||
|
ledgerLineY = (float) (ledgerLineY-staffSpace*2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (noteY >= staffY-staffSpace*6){
|
||||||
|
centDeviationText.draw(g2, (float) (noteX-centDeviationText.getAdvance()/4.), (float) (staffY-staffSpace*9));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
centDeviationText.draw(g2, (float) (noteX-centDeviationText.getAdvance()/4.), (float) (noteY-staffSpace*3));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ratioChoice == 0) {
|
||||||
|
if (noteY <= staffY-staffSpace*2){
|
||||||
|
ratioText.draw(g2, (float) (noteX-ratioText.getAdvance()/4.), (float) (staffY+staffSpace*1+ratioText.getAscent()));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ratioText.draw(g2, (float) (noteX-ratioText.getAdvance()/4.), (float) (noteY+staffSpace*3+ratioText.getAscent()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getNotePosition(int mN) {
|
||||||
|
int notePosition = 0;
|
||||||
|
if (spellingChoice == 0) {
|
||||||
|
int modNote = mN;
|
||||||
|
switch(modNote) {
|
||||||
|
case 0 : notePosition = 0; break;
|
||||||
|
case 1 : notePosition = 0; break;
|
||||||
|
case 2 : notePosition = 1; break;
|
||||||
|
case 3 : notePosition = 1; break;
|
||||||
|
case 4 : notePosition = 2; break;
|
||||||
|
case 5 : notePosition = 3; break;
|
||||||
|
case 6 : notePosition = 3; break;
|
||||||
|
case 7 : notePosition = 4; break;
|
||||||
|
case 8 : notePosition = 4; break;
|
||||||
|
case 9 : notePosition = 5; break;
|
||||||
|
case 10 : notePosition = 5; break;
|
||||||
|
case 11: notePosition = 6; break;
|
||||||
|
case 12: notePosition = 7; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (spellingChoice == 1){
|
||||||
|
int modNote = mN;
|
||||||
|
switch(modNote) {
|
||||||
|
case 0 : notePosition = 0; break;
|
||||||
|
case 1 : notePosition = 1; break;
|
||||||
|
case 2 : notePosition = 1; break;
|
||||||
|
case 3 : notePosition = 2; break;
|
||||||
|
case 4 : notePosition = 2; break;
|
||||||
|
case 5 : notePosition = 3; break;
|
||||||
|
case 6 : notePosition = 4; break;
|
||||||
|
case 7 : notePosition = 4; break;
|
||||||
|
case 8 : notePosition = 5; break;
|
||||||
|
case 9 : notePosition = 5; break;
|
||||||
|
case 10 : notePosition = 6; break;
|
||||||
|
case 11: notePosition = 6; break;
|
||||||
|
case 12: notePosition = 7; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return notePosition;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAcc(int mN) {
|
||||||
|
int accidental = 1;
|
||||||
|
if (spellingChoice == 0){
|
||||||
|
int modNote = mN;
|
||||||
|
switch(modNote) {
|
||||||
|
case 0 : accidental = 1; break;
|
||||||
|
case 1 : accidental = 2; break;
|
||||||
|
case 2 : accidental = 1; break;
|
||||||
|
case 3 : accidental = 2; break;
|
||||||
|
case 4 : accidental = 1; break;
|
||||||
|
case 5 : accidental = 1; break;
|
||||||
|
case 6 : accidental = 2; break;
|
||||||
|
case 7 : accidental = 1; break;
|
||||||
|
case 8 : accidental = 2; break;
|
||||||
|
case 9 : accidental = 1; break;
|
||||||
|
case 10 : accidental = 2; break;
|
||||||
|
case 11: accidental = 1; break;
|
||||||
|
case 12: accidental = 1; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (spellingChoice == 1){
|
||||||
|
int modNote = mN;
|
||||||
|
switch(modNote) {
|
||||||
|
case 0 : accidental = 1; break;
|
||||||
|
case 1 : accidental = 0; break;
|
||||||
|
case 2 : accidental = 1; break;
|
||||||
|
case 3 : accidental = 0; break;
|
||||||
|
case 4 : accidental = 1; break;
|
||||||
|
case 5 : accidental = 1; break;
|
||||||
|
case 6 : accidental = 0; break;
|
||||||
|
case 7 : accidental = 1; break;
|
||||||
|
case 8 : accidental = 0; break;
|
||||||
|
case 9 : accidental = 1; break;
|
||||||
|
case 10 : accidental = 0; break;
|
||||||
|
case 11: accidental = 1; break;
|
||||||
|
case 12: accidental = 1; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return accidental;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initializeChoices(){
|
||||||
|
|
||||||
|
spellingChoice = 1;
|
||||||
|
ratioChoice = 0;
|
||||||
|
|
||||||
|
int stepsToLowestC = 0;
|
||||||
|
int addOctaves = 0;
|
||||||
|
double staffSpace = Rise.FONT/8.;
|
||||||
|
float noteY = (float) y*Rise.IMAGE_HEIGHT;
|
||||||
|
int notePosition = getNotePosition((int) (Math.round(pitch/100.)%12));
|
||||||
|
|
||||||
|
float min = 500000;
|
||||||
|
for (int c = 0; c < 4; c++){
|
||||||
|
int oBStart = 0;
|
||||||
|
int oBMax = 0;
|
||||||
|
if (c == 0) {
|
||||||
|
oBStart = 0;
|
||||||
|
oBMax = 3;
|
||||||
|
}
|
||||||
|
else if (c < 3) {
|
||||||
|
oBStart = 2;
|
||||||
|
oBMax = 3;
|
||||||
|
}
|
||||||
|
else if (c < 4) {
|
||||||
|
oBStart = 2;
|
||||||
|
oBMax = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int oB = oBStart; oB < oBMax; oB++){
|
||||||
|
|
||||||
|
if (c == 0){
|
||||||
|
stepsToLowestC = -11;
|
||||||
|
}
|
||||||
|
else if (c == 1){
|
||||||
|
stepsToLowestC = -15;
|
||||||
|
}
|
||||||
|
else if (c == 2){
|
||||||
|
stepsToLowestC = -17;
|
||||||
|
}
|
||||||
|
else if (c == 3){
|
||||||
|
stepsToLowestC = -23;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (oB == 0){
|
||||||
|
stepsToLowestC = stepsToLowestC+14;
|
||||||
|
}
|
||||||
|
else if (oB == 1){
|
||||||
|
stepsToLowestC = stepsToLowestC+7;
|
||||||
|
}
|
||||||
|
else if (oB == 2){
|
||||||
|
}
|
||||||
|
else if (oB == 3){
|
||||||
|
stepsToLowestC = stepsToLowestC-7;
|
||||||
|
}
|
||||||
|
else if (oB == 4){
|
||||||
|
stepsToLowestC = stepsToLowestC-14;
|
||||||
|
}
|
||||||
|
|
||||||
|
addOctaves = (int) (Math.round(pitch/100.)/12)*7;
|
||||||
|
float staffY = (float) (y*Rise.IMAGE_HEIGHT+(stepsToLowestC+notePosition+addOctaves)*staffSpace);
|
||||||
|
if (Math.abs((staffY-4*staffSpace)-noteY) < min){
|
||||||
|
clefChoice = c;
|
||||||
|
octavaAndBassoChoice = oB;
|
||||||
|
min = (float) Math.abs((staffY-4*staffSpace)-noteY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int testSelect(float x1, float y1, float x2, float y2){
|
||||||
|
if ((float) (Rise.PAGE_MARGIN*Rise.ZOOM+x*Rise.IMAGE_WIDTH*Rise.ZOOM) > x1
|
||||||
|
&& (float) (Rise.PAGE_MARGIN*Rise.ZOOM+x*Rise.IMAGE_WIDTH*Rise.ZOOM) < x2
|
||||||
|
&& (float) (Rise.PAGE_MARGIN*Rise.ZOOM+y*Rise.IMAGE_HEIGHT*Rise.ZOOM) > y1
|
||||||
|
&& (float) (Rise.PAGE_MARGIN*Rise.ZOOM+y*Rise.IMAGE_HEIGHT*Rise.ZOOM) < y2){
|
||||||
|
color = Color.BLUE;
|
||||||
|
isListening = true;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
color = Color.BLACK;
|
||||||
|
isListening = false;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int testSelectClickAndPlay(float xMouse, float yMouse){
|
||||||
|
if ((Rise.PAGE_MARGIN*Rise.ZOOM + clickAndPlayX1*Rise.ZOOM) < xMouse
|
||||||
|
&& (Rise.PAGE_MARGIN*Rise.ZOOM + clickAndPlayX2*Rise.ZOOM) > xMouse
|
||||||
|
&& (float) (Rise.PAGE_MARGIN*Rise.ZOOM+(y)*Rise.IMAGE_HEIGHT*Rise.ZOOM + 10*Rise.ZOOM) > yMouse
|
||||||
|
&& (float) (Rise.PAGE_MARGIN*Rise.ZOOM+(y)*Rise.IMAGE_HEIGHT*Rise.ZOOM - 10*Rise.ZOOM) < yMouse){
|
||||||
|
color = Color.BLUE;
|
||||||
|
isListening = true;
|
||||||
|
//double toReturn = (xMouse - Rise.PAGE_MARGIN*Rise.ZOOM)/(Rise.IMAGE_WIDTH*Rise.ZOOM);
|
||||||
|
//System.out.println((xMouse) + " " + (clickAndPlayX1*Rise.ZOOM) + " " + (clickAndPlayX2*Rise.ZOOM) + " " + yMouse + " " + (Rise.PAGE_MARGIN*Rise.ZOOM+y*Rise.IMAGE_HEIGHT*Rise.ZOOM));
|
||||||
|
//System.out.println(toReturn);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
color = Color.BLACK;
|
||||||
|
isListening = false;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,255 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Container;
|
||||||
|
import java.awt.GridLayout;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.event.WindowAdapter;
|
||||||
|
import java.awt.event.WindowEvent;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import javax.swing.BorderFactory;
|
||||||
|
import javax.swing.ButtonGroup;
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JRadioButton;
|
||||||
|
|
||||||
|
public class NoteFrame extends JFrame implements ActionListener{
|
||||||
|
|
||||||
|
JRadioButton bass = new JRadioButton("bass");
|
||||||
|
JRadioButton tenor = new JRadioButton("tenor");
|
||||||
|
JRadioButton alto = new JRadioButton("alto");
|
||||||
|
JRadioButton treble = new JRadioButton("treble");
|
||||||
|
JRadioButton clefNada = new JRadioButton("nada");
|
||||||
|
|
||||||
|
JRadioButton ma = new JRadioButton("15ma");
|
||||||
|
JRadioButton va = new JRadioButton("8va");
|
||||||
|
JRadioButton none = new JRadioButton("none");
|
||||||
|
JRadioButton vb = new JRadioButton("8vb");
|
||||||
|
JRadioButton mb = new JRadioButton("15mb");
|
||||||
|
JRadioButton oBNada = new JRadioButton("nada");
|
||||||
|
|
||||||
|
JRadioButton sharps = new JRadioButton("sharps");
|
||||||
|
JRadioButton flats = new JRadioButton("flats");
|
||||||
|
JRadioButton spellNada = new JRadioButton("nada");
|
||||||
|
|
||||||
|
JRadioButton show = new JRadioButton("show");
|
||||||
|
JRadioButton hide = new JRadioButton("hide");
|
||||||
|
JRadioButton ratiosNada = new JRadioButton("nada");
|
||||||
|
|
||||||
|
ArrayList notes;
|
||||||
|
ArrayList listeningNotes;
|
||||||
|
|
||||||
|
int clefChoice;
|
||||||
|
int octavaAndBassoChoice;
|
||||||
|
int ratioChoice;
|
||||||
|
int spellingChoice;
|
||||||
|
|
||||||
|
public NoteFrame(){
|
||||||
|
|
||||||
|
this.setTitle("Note Frame");
|
||||||
|
|
||||||
|
this.addWindowListener(new WindowAdapter()
|
||||||
|
{
|
||||||
|
public void windowClosing(WindowEvent we){
|
||||||
|
Rise.BOUNDING_BOX.setVisible(false);
|
||||||
|
for (int i = 0; i < notes.size(); i++) {
|
||||||
|
((Note) notes.get(i)).color = Color.BLACK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Container noteContainer = this.getContentPane();
|
||||||
|
noteContainer.setLayout(new GridLayout(0,2));
|
||||||
|
|
||||||
|
bass.setActionCommand("bass");
|
||||||
|
bass.addActionListener(this);
|
||||||
|
tenor.setActionCommand("tenor");
|
||||||
|
tenor.addActionListener(this);
|
||||||
|
alto.setActionCommand("alto");
|
||||||
|
alto.addActionListener(this);
|
||||||
|
treble.setActionCommand("treble");
|
||||||
|
treble.addActionListener(this);
|
||||||
|
|
||||||
|
ma.setActionCommand("ma");
|
||||||
|
ma.addActionListener(this);
|
||||||
|
va.setActionCommand("va");
|
||||||
|
va.addActionListener(this);
|
||||||
|
none.setActionCommand("none");
|
||||||
|
none.addActionListener(this);
|
||||||
|
vb.setActionCommand("vb");
|
||||||
|
vb.addActionListener(this);
|
||||||
|
mb.setActionCommand("mb");
|
||||||
|
mb.addActionListener(this);
|
||||||
|
|
||||||
|
sharps.setActionCommand("sharps");
|
||||||
|
sharps.addActionListener(this);
|
||||||
|
flats.setActionCommand("flats");
|
||||||
|
flats.addActionListener(this);
|
||||||
|
|
||||||
|
show.setActionCommand("show");
|
||||||
|
show.addActionListener(this);
|
||||||
|
hide.setActionCommand("hide");
|
||||||
|
hide.addActionListener(this);
|
||||||
|
|
||||||
|
ButtonGroup clef = new ButtonGroup();
|
||||||
|
clef.add(bass);
|
||||||
|
clef.add(tenor);
|
||||||
|
clef.add(alto);
|
||||||
|
clef.add(treble);
|
||||||
|
clef.add(clefNada);
|
||||||
|
//clefNada.setVisible(false);
|
||||||
|
|
||||||
|
ButtonGroup oB = new ButtonGroup();
|
||||||
|
oB.add(ma);
|
||||||
|
oB.add(va);
|
||||||
|
oB.add(none);
|
||||||
|
oB.add(vb);
|
||||||
|
oB.add(mb);
|
||||||
|
oB.add(oBNada);
|
||||||
|
//oBNada.setVisible(false);
|
||||||
|
|
||||||
|
ButtonGroup spell = new ButtonGroup();
|
||||||
|
spell.add(sharps);
|
||||||
|
spell.add(flats);
|
||||||
|
spell.add(spellNada);
|
||||||
|
//spellNada.setVisible(false);
|
||||||
|
|
||||||
|
ButtonGroup ratios = new ButtonGroup();
|
||||||
|
ratios.add(show);
|
||||||
|
ratios.add(hide);
|
||||||
|
ratios.add(ratiosNada);
|
||||||
|
//ratiosNada.setVisible(false);
|
||||||
|
|
||||||
|
JPanel clefPanel = new JPanel();
|
||||||
|
clefPanel.setBorder(BorderFactory.createLineBorder(Color.black));
|
||||||
|
clefPanel.setLayout(new GridLayout(0,1));
|
||||||
|
clefPanel.add(new JLabel("Clef"));
|
||||||
|
clefPanel.add(bass);
|
||||||
|
clefPanel.add(tenor);
|
||||||
|
clefPanel.add(alto);
|
||||||
|
clefPanel.add(treble);
|
||||||
|
|
||||||
|
JPanel oBPanel = new JPanel();
|
||||||
|
oBPanel.setBorder(BorderFactory.createLineBorder(Color.black));
|
||||||
|
oBPanel.setLayout(new GridLayout(0,1));
|
||||||
|
oBPanel.add(new JLabel("Octava/Basso"));
|
||||||
|
oBPanel.add(ma);
|
||||||
|
oBPanel.add(va);
|
||||||
|
oBPanel.add(none);
|
||||||
|
oBPanel.add(vb);
|
||||||
|
oBPanel.add(mb);
|
||||||
|
|
||||||
|
JPanel spellPanel = new JPanel();
|
||||||
|
spellPanel.setBorder(BorderFactory.createLineBorder(Color.black));
|
||||||
|
spellPanel.setLayout(new GridLayout(0,1));
|
||||||
|
spellPanel.add(new JLabel("Spelling Pref."));
|
||||||
|
spellPanel.add(sharps);
|
||||||
|
spellPanel.add(flats);
|
||||||
|
|
||||||
|
JPanel ratiosPanel = new JPanel();
|
||||||
|
ratiosPanel.setBorder(BorderFactory.createLineBorder(Color.black));
|
||||||
|
ratiosPanel.setLayout(new GridLayout(0,1));
|
||||||
|
ratiosPanel.add(new JLabel("Ratios"));
|
||||||
|
ratiosPanel.add(show);
|
||||||
|
ratiosPanel.add(hide);
|
||||||
|
|
||||||
|
noteContainer.add(clefPanel);
|
||||||
|
noteContainer.add(oBPanel);
|
||||||
|
noteContainer.add(spellPanel);
|
||||||
|
noteContainer.add(ratiosPanel);
|
||||||
|
|
||||||
|
this.setSize(200,400);
|
||||||
|
this.setLocation(0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNoteAccess(ArrayList n){
|
||||||
|
notes = n;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setListeningNotes(){
|
||||||
|
listeningNotes = new ArrayList();
|
||||||
|
for (int i = 0; i < notes.size(); i++) {
|
||||||
|
if (((Note) notes.get(i)).isListening == true){
|
||||||
|
//System.out.println(((Note) notes.get(i)).pitch);
|
||||||
|
listeningNotes.add(notes.get(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if ("bass".equals(e.getActionCommand())){
|
||||||
|
clefChoice = 0;
|
||||||
|
}
|
||||||
|
else if ("tenor".equals(e.getActionCommand())){
|
||||||
|
clefChoice = 1;
|
||||||
|
}
|
||||||
|
else if ("alto".equals(e.getActionCommand())){
|
||||||
|
clefChoice = 2;
|
||||||
|
}
|
||||||
|
else if ("treble".equals(e.getActionCommand())){
|
||||||
|
clefChoice = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if ("mb".equals(e.getActionCommand())){
|
||||||
|
octavaAndBassoChoice = 0;
|
||||||
|
}
|
||||||
|
else if ("vb".equals(e.getActionCommand())){
|
||||||
|
octavaAndBassoChoice = 1;
|
||||||
|
}
|
||||||
|
else if ("none".equals(e.getActionCommand())){
|
||||||
|
octavaAndBassoChoice = 2;
|
||||||
|
}
|
||||||
|
else if ("va".equals(e.getActionCommand())){
|
||||||
|
octavaAndBassoChoice = 3;
|
||||||
|
}
|
||||||
|
else if ("ma".equals(e.getActionCommand())){
|
||||||
|
octavaAndBassoChoice = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if ("sharps".equals(e.getActionCommand())){
|
||||||
|
spellingChoice = 0;
|
||||||
|
}
|
||||||
|
else if ("flats".equals(e.getActionCommand())){
|
||||||
|
spellingChoice = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if ("show".equals(e.getActionCommand())){
|
||||||
|
ratioChoice = 0;
|
||||||
|
}
|
||||||
|
else if ("hide".equals(e.getActionCommand())){
|
||||||
|
ratioChoice = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < listeningNotes.size(); i++){
|
||||||
|
if ("bass".equals(e.getActionCommand())
|
||||||
|
|| "tenor".equals(e.getActionCommand())
|
||||||
|
|| "alto".equals(e.getActionCommand())
|
||||||
|
|| "treble".equals(e.getActionCommand())){
|
||||||
|
((Note) listeningNotes.get(i)).clefChoice = clefChoice;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("mb".equals(e.getActionCommand())
|
||||||
|
|| "vb".equals(e.getActionCommand())
|
||||||
|
|| "none".equals(e.getActionCommand())
|
||||||
|
|| "va".equals(e.getActionCommand())
|
||||||
|
|| "ma".equals(e.getActionCommand())){
|
||||||
|
((Note) listeningNotes.get(i)).octavaAndBassoChoice = octavaAndBassoChoice;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("sharps".equals(e.getActionCommand())
|
||||||
|
|| "flats".equals(e.getActionCommand())){
|
||||||
|
((Note) listeningNotes.get(i)).spellingChoice = spellingChoice;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("show".equals(e.getActionCommand())
|
||||||
|
|| "hide".equals(e.getActionCommand())){
|
||||||
|
((Note) listeningNotes.get(i)).ratioChoice = ratioChoice;
|
||||||
|
}
|
||||||
|
((Note) listeningNotes.get(i)).repaint();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
|
import java.awt.Container;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.ObjectInputStream;
|
||||||
|
|
||||||
|
import javax.swing.JSlider;
|
||||||
|
import javax.swing.JTextField;
|
||||||
|
|
||||||
|
public class OpenClassIterator {
|
||||||
|
|
||||||
|
public OpenClassIterator(Container c, ObjectInputStream in){
|
||||||
|
|
||||||
|
if (c.getClass() == new JTextField().getClass()){
|
||||||
|
try {
|
||||||
|
((JTextField) c).setText((String) in.readObject());
|
||||||
|
} catch (IOException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (c.getClass() == new JSlider().getClass()){
|
||||||
|
try {
|
||||||
|
((JSlider) c).setValue(in.readInt());
|
||||||
|
} catch (IOException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < c.getComponentCount(); i++){
|
||||||
|
OpenClassIterator oCI = new OpenClassIterator((Container) c.getComponent(i),in);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import com.softsynth.jsyn.EqualTemperedTuning;
|
||||||
|
|
||||||
|
public class PitchVector{
|
||||||
|
|
||||||
|
Vector[] array;
|
||||||
|
|
||||||
|
public PitchVector(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(){
|
||||||
|
|
||||||
|
int aLength = (int) (Rise.TOTAL_DUR * 10);
|
||||||
|
array = new Vector[aLength];
|
||||||
|
|
||||||
|
double fund = EqualTemperedTuning.getMIDIFrequency(24+Rise.TRANSPOSE_SCORE+Rise.TRANSPOSE_SOUND);
|
||||||
|
|
||||||
|
for (int i = 0; i < aLength; i++){
|
||||||
|
array[i] = new Vector();
|
||||||
|
array[i].add(fund);
|
||||||
|
}
|
||||||
|
for (int plotPoint = 1; plotPoint < Rise.VOICES; plotPoint++){
|
||||||
|
|
||||||
|
//int plotPoint =
|
||||||
|
for (int voice = 1; voice <= plotPoint; voice++){
|
||||||
|
double x = (1./(Rise.VOICES-1))*plotPoint;
|
||||||
|
double pitch = 1200./Math.log(2.)*Math.log((double) (Rise.FIRST_NUM+voice-plotPoint)/(Rise.FIRST_NUM-plotPoint));
|
||||||
|
double frequency = EqualTemperedTuning.getMIDIFrequency(24+Rise.TRANSPOSE_SCORE+Rise.TRANSPOSE_SOUND+pitch/100.);
|
||||||
|
|
||||||
|
int start = (int) ((x - ((1./(Rise.VOICES-1))*(plotPoint-voice)/plotPoint)) * (aLength-1));
|
||||||
|
int end = (int) ((x + ((1./(Rise.VOICES-1))*voice/(plotPoint+1))) * (aLength-1));
|
||||||
|
|
||||||
|
if (end >= aLength){
|
||||||
|
end = aLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
//System.out.println("s and e " + start + " " + end + " " + pitch);
|
||||||
|
|
||||||
|
for (int i = start; i < end; i++) {
|
||||||
|
array[i].add(frequency);
|
||||||
|
}
|
||||||
|
|
||||||
|
//System.out.println("notes 2 " + plotPoint + " " + pitch + " " + frequency + (x - ((1./(Rise.VOICES-1))*(plotPoint-voice)/plotPoint)) + " " + (x + ((1./(Rise.VOICES-1))*voice/(plotPoint+1))));
|
||||||
|
// p is plot point, v is voice
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,79 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
import javax.swing.*;
|
||||||
|
import java.awt.print.*;
|
||||||
|
|
||||||
|
public class PrintUtilities extends JPanel implements Printable {
|
||||||
|
|
||||||
|
Score score;
|
||||||
|
int xPage;
|
||||||
|
int yPage;
|
||||||
|
PrinterJob pj = PrinterJob.getPrinterJob();
|
||||||
|
|
||||||
|
public PrintUtilities() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void init(Score score, int xPage, int yPage){
|
||||||
|
this.score = score;
|
||||||
|
this.xPage = xPage;
|
||||||
|
this.yPage = yPage;
|
||||||
|
pageSetup();
|
||||||
|
//this.setName("yo");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void pageSetup() {
|
||||||
|
PageFormat pf = new PageFormat();
|
||||||
|
//figure out how to get this to return user page format
|
||||||
|
pf = pj.pageDialog(pj.defaultPage());
|
||||||
|
Paper paper = new Paper();
|
||||||
|
double margin = 0;
|
||||||
|
paper.setSize(pf.getPaper().getWidth(), pf.getPaper().getHeight());
|
||||||
|
paper.setImageableArea(margin, margin, paper.getWidth(), paper.getHeight());
|
||||||
|
pf.setPaper(paper);
|
||||||
|
pj.setPrintable(this, pf);
|
||||||
|
if (pj.printDialog()) {
|
||||||
|
try { pj.print(); }
|
||||||
|
catch (PrinterException e) {
|
||||||
|
System.out.println(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int print(Graphics g, PageFormat pageFormat, int pageIndex) {
|
||||||
|
if (pageIndex >= Rise.X_DIV * Rise.Y_DIV){
|
||||||
|
Rise.CURRENT_X_PAGE = xPage;
|
||||||
|
Rise.CURRENT_Y_PAGE = yPage;
|
||||||
|
return(NO_SUCH_PAGE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Rise.CURRENT_X_PAGE = pageIndex % Rise.X_DIV;
|
||||||
|
Rise.CURRENT_Y_PAGE = pageIndex / Rise.X_DIV;
|
||||||
|
score.removeAll();
|
||||||
|
score.setNotes();
|
||||||
|
score.setNoteChoices();
|
||||||
|
Graphics2D g2 = (Graphics2D)g;
|
||||||
|
disableDoubleBuffering(this);
|
||||||
|
g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
|
||||||
|
Dimension d = score.getSize();
|
||||||
|
double scaleX = pageFormat.getImageableWidth()/d.width;
|
||||||
|
double scaleY = pageFormat.getImageableHeight() / d.height;
|
||||||
|
g2.scale(scaleX, scaleY);
|
||||||
|
score.paint(g2);
|
||||||
|
enableDoubleBuffering(this);
|
||||||
|
return(PAGE_EXISTS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void disableDoubleBuffering(Component c) {
|
||||||
|
RepaintManager currentManager = RepaintManager.currentManager(c);
|
||||||
|
currentManager.setDoubleBufferingEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void enableDoubleBuffering(Component c) {
|
||||||
|
RepaintManager currentManager = RepaintManager.currentManager(c);
|
||||||
|
currentManager.setDoubleBufferingEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,130 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Container;
|
||||||
|
import java.awt.Dimension;
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JScrollPane;
|
||||||
|
import javax.swing.JViewport;
|
||||||
|
import javax.swing.UIManager;
|
||||||
|
import java.awt.Font;
|
||||||
|
|
||||||
|
import com.softsynth.jsyn.ExponentialLag;
|
||||||
|
import com.softsynth.jsyn.MultiplyUnit;
|
||||||
|
import com.softsynth.jsyn.SynthMixer;
|
||||||
|
|
||||||
|
public class Rise {
|
||||||
|
|
||||||
|
static int PAGE_WIDTH = 1224;
|
||||||
|
static int PAGE_HEIGHT = 792;
|
||||||
|
static int PAGE_MARGIN = 36+18;
|
||||||
|
static int IMAGE_WIDTH = PAGE_WIDTH-PAGE_MARGIN*2;
|
||||||
|
static int IMAGE_HEIGHT = PAGE_HEIGHT-PAGE_MARGIN*2;
|
||||||
|
static double ZOOM = .64;
|
||||||
|
static float FONT = 12;
|
||||||
|
static float LINE_THICKNESS = (float) .05;
|
||||||
|
static int FIRST_NUM = 16;
|
||||||
|
static int VOICES = 12;
|
||||||
|
static int X_DIV = 1;
|
||||||
|
static int Y_DIV = 1;
|
||||||
|
static int CURRENT_X_PAGE = 0;
|
||||||
|
static int CURRENT_Y_PAGE = 0;
|
||||||
|
//static float TOTAL_TIME = (VOICES-1)*60;
|
||||||
|
static float TRANSPOSE_SCORE = 36;
|
||||||
|
static float TRANSPOSE_SOUND = 0;
|
||||||
|
static int MODE = 0;
|
||||||
|
static double MASTER_AMP = 0;
|
||||||
|
static double START_AMP = 0;
|
||||||
|
static double END_AMP = 0;
|
||||||
|
static double MIN_SPECTRUM = 0;
|
||||||
|
static double MAX_SPECTRUM = 0;
|
||||||
|
static int START_DENSITY = 0;
|
||||||
|
static int END_DENSITY = 0;
|
||||||
|
static double START_DUR = 0;
|
||||||
|
static double END_DUR = 0;
|
||||||
|
static double TOTAL_DUR = 1650;
|
||||||
|
static double START_TIME = 0;
|
||||||
|
static double FADE_DUR = 150;
|
||||||
|
static boolean IS_ENGINE_ON = false;
|
||||||
|
static int SCROLLBAR_WIDTH;
|
||||||
|
|
||||||
|
static CuePanel CUE_PANEL;
|
||||||
|
|
||||||
|
Score score;
|
||||||
|
JScrollPane scroller;
|
||||||
|
JPanel scrollPanel;
|
||||||
|
|
||||||
|
static NoteFrame NOTE_FRAME = new NoteFrame();
|
||||||
|
static BoundingBox BOUNDING_BOX = new BoundingBox();
|
||||||
|
static ScrollBar SCROLLBAR = new ScrollBar();
|
||||||
|
|
||||||
|
static SynthMixer MASTER_MIXER;
|
||||||
|
static ExponentialLag MASTER_FADER;
|
||||||
|
static MultiplyUnit MASTER_MULT;
|
||||||
|
static SynthMixer CLICK_MIXER;
|
||||||
|
static ExponentialLag CLICK_FADER;
|
||||||
|
static MultiplyUnit CLICK_MULT;
|
||||||
|
|
||||||
|
static double GRAIN_AMP_VAL_START;
|
||||||
|
static double GRAIN_AMP_VAL_END;
|
||||||
|
static double GRAIN_AMP_JIT_START;
|
||||||
|
static double GRAIN_AMP_JIT_END;
|
||||||
|
|
||||||
|
static double GRAIN_SOUND_DUR_VAL_START;
|
||||||
|
static double GRAIN_SOUND_DUR_VAL_END;
|
||||||
|
static double GRAIN_SOUND_DUR_JIT_START;
|
||||||
|
static double GRAIN_SOUND_DUR_JIT_END;
|
||||||
|
|
||||||
|
static double GRAIN_SILENCE_DUR_VAL_START;
|
||||||
|
static double GRAIN_SILENCE_DUR_VAL_END;
|
||||||
|
static double GRAIN_SILENCE_DUR_JIT_START;
|
||||||
|
static double GRAIN_SILENCE_DUR_JIT_END;
|
||||||
|
|
||||||
|
static double GLISS_AMP_START;
|
||||||
|
static double GLISS_AMP_END;
|
||||||
|
|
||||||
|
public static void setUIFont (javax.swing.plaf.FontUIResource f){
|
||||||
|
java.util.Enumeration keys = UIManager.getDefaults().keys();
|
||||||
|
while (keys.hasMoreElements()) {
|
||||||
|
Object key = keys.nextElement();
|
||||||
|
Object value = UIManager.get (key);
|
||||||
|
if (value instanceof javax.swing.plaf.FontUIResource)
|
||||||
|
UIManager.put (key, f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Rise() {
|
||||||
|
|
||||||
|
setUIFont (new javax.swing.plaf.FontUIResource("Liberation Serif", Font.BOLD, 8));
|
||||||
|
|
||||||
|
JFrame scoreFrame = new JFrame();
|
||||||
|
scoreFrame.setTitle("Score Frame");
|
||||||
|
Container scoreContainer = scoreFrame.getContentPane();
|
||||||
|
|
||||||
|
scrollPanel = new JPanel();
|
||||||
|
scroller = new JScrollPane(scrollPanel,
|
||||||
|
JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
|
||||||
|
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
|
||||||
|
score = new Score();
|
||||||
|
score.setPreferredSize(new Dimension((int) (PAGE_WIDTH*ZOOM), (int) (PAGE_HEIGHT*ZOOM)));
|
||||||
|
score.setBackground(Color.WHITE);
|
||||||
|
scrollPanel.add(score);
|
||||||
|
scoreContainer.add(scroller);
|
||||||
|
scroller.getViewport().setScrollMode(JViewport.BLIT_SCROLL_MODE);
|
||||||
|
|
||||||
|
ToolFrame controlFrame = new ToolFrame(score);
|
||||||
|
|
||||||
|
scoreFrame.pack();
|
||||||
|
scoreFrame.setSize(800,550);
|
||||||
|
scoreFrame.setVisible(true);
|
||||||
|
|
||||||
|
controlFrame.setLocation(800, 0);
|
||||||
|
controlFrame.setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String args[]) {
|
||||||
|
Rise rise = new Rise();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
|
import java.awt.Container;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.ObjectOutputStream;
|
||||||
|
|
||||||
|
import javax.swing.JSlider;
|
||||||
|
import javax.swing.JTabbedPane;
|
||||||
|
import javax.swing.JTextField;
|
||||||
|
|
||||||
|
public class SaveClassIterator {
|
||||||
|
|
||||||
|
public SaveClassIterator(Container c, ObjectOutputStream out){
|
||||||
|
|
||||||
|
if (c.getClass() == new JTextField().getClass()){
|
||||||
|
try {
|
||||||
|
out.writeObject(((JTextField) c).getText());
|
||||||
|
} catch (IOException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (c.getClass() == new JSlider().getClass()){
|
||||||
|
try {
|
||||||
|
out.writeInt(((JSlider) c).getValue());
|
||||||
|
} catch (IOException e) {
|
||||||
|
// TODO Auto-generated catch block
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < c.getComponentCount(); i++){
|
||||||
|
SaveClassIterator sCI = new SaveClassIterator((Container) c.getComponent(i),out);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,372 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
|
import java.awt.BasicStroke;
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.event.MouseListener;
|
||||||
|
import java.awt.event.MouseMotionListener;
|
||||||
|
import java.awt.geom.Line2D;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
import com.softsynth.jsyn.EqualTemperedTuning;
|
||||||
|
import com.softsynth.jsyn.ExponentialLag;
|
||||||
|
import com.softsynth.jsyn.LineOut;
|
||||||
|
import com.softsynth.jsyn.MultiplyUnit;
|
||||||
|
import com.softsynth.jsyn.Synth;
|
||||||
|
import com.softsynth.jsyn.SynthMixer;
|
||||||
|
|
||||||
|
public class Score extends JPanel implements MouseListener, MouseMotionListener{
|
||||||
|
|
||||||
|
ArrayList notes = new ArrayList();
|
||||||
|
ArrayList lastNotes;
|
||||||
|
float x1;
|
||||||
|
float x2;
|
||||||
|
float y1;
|
||||||
|
float y2;
|
||||||
|
|
||||||
|
WaveForm clickAndPlay;
|
||||||
|
|
||||||
|
LineOut lineOut;
|
||||||
|
|
||||||
|
int counter = 0;
|
||||||
|
|
||||||
|
public Score(){
|
||||||
|
|
||||||
|
this.addMouseListener(this);
|
||||||
|
this.addMouseMotionListener(this);
|
||||||
|
this.setLayout(null);
|
||||||
|
this.setBackground(Color.WHITE);
|
||||||
|
this.add(Rise.BOUNDING_BOX);
|
||||||
|
|
||||||
|
setNotes();
|
||||||
|
|
||||||
|
this.add(Rise.SCROLLBAR);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNotes(){
|
||||||
|
lastNotes = (ArrayList) notes.clone();
|
||||||
|
notes = new ArrayList();
|
||||||
|
double centRange = (1200/Math.log(2.))*Math.log((double) Rise.FIRST_NUM/(Rise.FIRST_NUM-Rise.VOICES+1));
|
||||||
|
int totalVoices = Rise.VOICES;
|
||||||
|
int plotPoints = totalVoices;
|
||||||
|
int count = 0;
|
||||||
|
for (int voice = 0; voice < totalVoices; voice++){
|
||||||
|
for (int plotPoint = voice; plotPoint < plotPoints; plotPoint++){
|
||||||
|
double x = (1./(plotPoints-1))*plotPoint;
|
||||||
|
double pitch = 1200./Math.log(2.)*Math.log((double) (Rise.FIRST_NUM+voice-plotPoint)/(Rise.FIRST_NUM-plotPoint));
|
||||||
|
double y = Math.abs(((pitch)/centRange)-1);
|
||||||
|
notes.add(new Note((x*Rise.X_DIV-((double) Rise.X_DIV/Rise.X_DIV)*Rise.CURRENT_X_PAGE),
|
||||||
|
(y*Rise.Y_DIV-((double) Rise.Y_DIV/Rise.Y_DIV)*Math.abs(Rise.CURRENT_Y_PAGE-(Rise.Y_DIV-1))),
|
||||||
|
pitch,voice,plotPoint));
|
||||||
|
if (x >= (1./Rise.X_DIV)*Rise.CURRENT_X_PAGE && x <= (1./Rise.X_DIV)*(Rise.CURRENT_X_PAGE+1)
|
||||||
|
&& y >= 1-(1./Rise.Y_DIV)*(Rise.CURRENT_Y_PAGE+1) && y <= 1-(1./Rise.Y_DIV)*(Rise.CURRENT_Y_PAGE)) {
|
||||||
|
this.add((Note) notes.get(count));
|
||||||
|
|
||||||
|
}
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Rise.NOTE_FRAME.setNoteAccess(notes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNoteChoices(){
|
||||||
|
for (int count = 0; count < notes.size(); count++){
|
||||||
|
((Note) notes.get(count)).clefChoice = ((Note) lastNotes.get(count)).clefChoice;
|
||||||
|
((Note) notes.get(count)).octavaAndBassoChoice = ((Note) lastNotes.get(count)).octavaAndBassoChoice;
|
||||||
|
((Note) notes.get(count)).spellingChoice = ((Note) lastNotes.get(count)).spellingChoice;
|
||||||
|
((Note) notes.get(count)).ratioChoice = ((Note) lastNotes.get(count)).ratioChoice;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paint(Graphics g){
|
||||||
|
|
||||||
|
super.paint(g);
|
||||||
|
Rise.SCROLLBAR_WIDTH = (int) (this.getPreferredSize().width - Rise.PAGE_MARGIN*Rise.ZOOM * 2);
|
||||||
|
Graphics2D g2 = (Graphics2D) g;
|
||||||
|
g2.translate(Rise.PAGE_MARGIN*Rise.ZOOM, Rise.PAGE_MARGIN*Rise.ZOOM);
|
||||||
|
g2.scale(Rise.ZOOM, Rise.ZOOM);
|
||||||
|
g2.setStroke(new BasicStroke(Rise.LINE_THICKNESS,BasicStroke.CAP_BUTT,BasicStroke.JOIN_MITER));
|
||||||
|
int totalVoices = Rise.VOICES;
|
||||||
|
double centRange = (1200/Math.log(2.))*Math.log((double) Rise.FIRST_NUM/(Rise.FIRST_NUM-Rise.VOICES+1));
|
||||||
|
int plotPoints = totalVoices*25;
|
||||||
|
for (int voice = 1; voice < totalVoices-1; voice++){
|
||||||
|
for (int plotPoint = voice*(plotPoints/totalVoices); plotPoint < plotPoints-(plotPoints/totalVoices); plotPoint++){
|
||||||
|
double startX = (1./(plotPoints-plotPoints/totalVoices))*plotPoint;
|
||||||
|
double startY = Math.abs(((1200./Math.log(2.)*Math.log((Rise.FIRST_NUM+voice-plotPoint/((double) plotPoints/totalVoices))/(Rise.FIRST_NUM-plotPoint/((double) plotPoints/totalVoices))))/centRange)-1);
|
||||||
|
double endX = (1./(plotPoints-plotPoints/totalVoices))*(plotPoint+1);
|
||||||
|
double endY = Math.abs(((1200./Math.log(2.)*Math.log((Rise.FIRST_NUM+voice-(plotPoint+1)/((double) plotPoints/totalVoices))/(Rise.FIRST_NUM-(plotPoint+1)/((double) plotPoints/totalVoices))))/centRange)-1);
|
||||||
|
if (startX >= (1./Rise.X_DIV)*Rise.CURRENT_X_PAGE && startX <= (1./Rise.X_DIV)*(Rise.CURRENT_X_PAGE+1)
|
||||||
|
&& startY >= 1-(1./Rise.Y_DIV)*(Rise.CURRENT_Y_PAGE+1) && startY <= 1-(1./Rise.Y_DIV)*(Rise.CURRENT_Y_PAGE)) {
|
||||||
|
g2.draw(new Line2D.Double((startX*Rise.X_DIV-((double) Rise.X_DIV/Rise.X_DIV)*Rise.CURRENT_X_PAGE)*Rise.IMAGE_WIDTH,
|
||||||
|
(startY*Rise.Y_DIV-((double) Rise.Y_DIV/Rise.Y_DIV)*Math.abs(Rise.CURRENT_Y_PAGE-(Rise.Y_DIV-1)))*Rise.IMAGE_HEIGHT,
|
||||||
|
(endX*Rise.X_DIV-((double) Rise.X_DIV/Rise.X_DIV)*Rise.CURRENT_X_PAGE)*Rise.IMAGE_WIDTH,
|
||||||
|
(endY*Rise.Y_DIV-((double) Rise.Y_DIV/Rise.Y_DIV)*Math.abs(Rise.CURRENT_Y_PAGE-(Rise.Y_DIV-1)))*Rise.IMAGE_HEIGHT));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMasterFader(double a){
|
||||||
|
if (Rise.IS_ENGINE_ON == true) {
|
||||||
|
Rise.MASTER_FADER.input.set(a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setClickFader(double a){
|
||||||
|
if (Rise.IS_ENGINE_ON == true) {
|
||||||
|
Rise.CLICK_FADER.input.set(a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mouseClicked(MouseEvent e) {
|
||||||
|
}
|
||||||
|
public void mousePressed(MouseEvent e) {
|
||||||
|
x1 = e.getX();
|
||||||
|
y1 = e.getY();
|
||||||
|
if (Rise.MODE == 0){
|
||||||
|
|
||||||
|
Rise.NOTE_FRAME.setVisible(false);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
int registered = 0;
|
||||||
|
for(int i = 0; i < notes.size(); i++ ) {
|
||||||
|
//int add = ((Note) notes.get(i)).testSelectClickAndPlay((float) (x1-20*Rise.ZOOM), (float) (y1-20*Rise.ZOOM), (float) (x1+20*Rise.ZOOM), (float) (y1+20*Rise.ZOOM));
|
||||||
|
int add = ((Note) notes.get(i)).testSelectClickAndPlay((float) (x1), (float) (y1));
|
||||||
|
|
||||||
|
if (add != 0) {
|
||||||
|
registered = registered + add;
|
||||||
|
|
||||||
|
//System.out.println(((Note) notes.get(i)).x + " " + ((Note) notes.get(i)).y +
|
||||||
|
// " " + ((Note) notes.get(i)).p + " " + ((Note) notes.get(i)).v);
|
||||||
|
|
||||||
|
((Note) notes.get(i)).repaint();
|
||||||
|
if (Rise.IS_ENGINE_ON == false){
|
||||||
|
Rise.IS_ENGINE_ON = true;
|
||||||
|
Synth.startEngine(0);
|
||||||
|
Rise.MASTER_MIXER = new SynthMixer(1,1);
|
||||||
|
Rise.CLICK_MIXER = new SynthMixer(10,1);
|
||||||
|
Rise.MASTER_MULT = new MultiplyUnit();
|
||||||
|
Rise.MASTER_FADER = new ExponentialLag();
|
||||||
|
Rise.CLICK_MULT = new MultiplyUnit();
|
||||||
|
Rise.CLICK_FADER = new ExponentialLag();
|
||||||
|
lineOut = new LineOut();
|
||||||
|
|
||||||
|
for (int c = 0; c < 10; c++){
|
||||||
|
Rise.CLICK_MIXER.setGain(c, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Rise.CLICK_MULT.inputA.connect(Rise.CLICK_FADER.output);
|
||||||
|
Rise.CLICK_MULT.inputB.connect(Rise.CLICK_MIXER.getOutput(0));
|
||||||
|
|
||||||
|
|
||||||
|
Rise.MASTER_MIXER.connectInput(0, Rise.CLICK_MULT.output, 0);
|
||||||
|
Rise.MASTER_MIXER.setGain(0, 0, 1);
|
||||||
|
|
||||||
|
Rise.MASTER_MULT.inputA.connect(Rise.MASTER_FADER.output);
|
||||||
|
Rise.MASTER_MULT.inputB.connect(Rise.MASTER_MIXER.getOutput(0));
|
||||||
|
|
||||||
|
lineOut.input.connect(0, Rise.MASTER_MULT.output, 0);
|
||||||
|
lineOut.input.connect(1, Rise.MASTER_MULT.output, 0);
|
||||||
|
|
||||||
|
lineOut.start(0);
|
||||||
|
Rise.MASTER_MIXER.start(0);
|
||||||
|
Rise.MASTER_MULT.start(0);
|
||||||
|
Rise.MASTER_FADER.start(0);
|
||||||
|
Rise.CLICK_MIXER.start(0);
|
||||||
|
Rise.CLICK_MULT.start(0);
|
||||||
|
Rise.CLICK_FADER.start(0);
|
||||||
|
|
||||||
|
setMasterFader(1);
|
||||||
|
setClickFader(1);
|
||||||
|
|
||||||
|
//System.out.println("STARTED!!!");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
//clickAndPlay = new WaveForm();
|
||||||
|
|
||||||
|
clickAndPlay = new WaveForm();
|
||||||
|
Rise.CLICK_MIXER.connectInput((counter%10), clickAndPlay.output, 0);
|
||||||
|
counter++;
|
||||||
|
|
||||||
|
double envPosition = (x1 - Rise.PAGE_MARGIN*Rise.ZOOM)/(Rise.IMAGE_WIDTH*Rise.ZOOM);
|
||||||
|
|
||||||
|
double duration =
|
||||||
|
(Rise.GRAIN_SOUND_DUR_VAL_START - envPosition * Math.abs(Rise.GRAIN_SOUND_DUR_VAL_START - Rise.GRAIN_SOUND_DUR_VAL_END)) +
|
||||||
|
((Rise.GRAIN_SOUND_DUR_JIT_START - envPosition * Math.abs(Rise.GRAIN_SOUND_DUR_JIT_START - Rise.GRAIN_SOUND_DUR_JIT_END)) *
|
||||||
|
(Math.random() * 2 - 1));
|
||||||
|
clickAndPlay.envRate.set(1./duration);
|
||||||
|
|
||||||
|
double amp =
|
||||||
|
((Rise.GRAIN_AMP_VAL_START + envPosition * Math.abs(Rise.GRAIN_AMP_VAL_END - Rise.GRAIN_AMP_VAL_START)) +
|
||||||
|
((Rise.GRAIN_AMP_JIT_START + envPosition * Math.abs(Rise.GRAIN_AMP_JIT_END - Rise.GRAIN_AMP_JIT_START)) *
|
||||||
|
(Math.random() * 2 - 1)));
|
||||||
|
|
||||||
|
double spectrum =
|
||||||
|
Rise.MIN_SPECTRUM + Math.random() * Math.abs(Rise.MAX_SPECTRUM - Rise.MIN_SPECTRUM);
|
||||||
|
|
||||||
|
//System.out.println("Tone Info; dur = " + duration + ", amp = " + amp);
|
||||||
|
|
||||||
|
clickAndPlay.spectrum.set(spectrum);
|
||||||
|
double frequency = EqualTemperedTuning.getMIDIFrequency(24/*+Rise.TRANSPOSE_SCORE*/+Rise.TRANSPOSE_SOUND+((Note) notes.get(i)).pitch/100.);
|
||||||
|
|
||||||
|
clickAndPlay.clickOn(0, frequency, amp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//System.out.println(registered);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void mouseReleased(MouseEvent e) {
|
||||||
|
if (Rise.MODE == 0){
|
||||||
|
Rise.NOTE_FRAME.bass.setSelected(false);
|
||||||
|
Rise.NOTE_FRAME.tenor.setSelected(false);
|
||||||
|
Rise.NOTE_FRAME.alto.setSelected(false);
|
||||||
|
Rise.NOTE_FRAME.treble.setSelected(false);
|
||||||
|
|
||||||
|
int clef = 0;
|
||||||
|
int oB = 0;
|
||||||
|
int spell = 0;
|
||||||
|
int ratio = 0;
|
||||||
|
|
||||||
|
x2 = e.getX();
|
||||||
|
y2 = e.getY();
|
||||||
|
|
||||||
|
double rectX1;
|
||||||
|
double rectX2;
|
||||||
|
double rectY1;
|
||||||
|
double rectY2;
|
||||||
|
|
||||||
|
if (e.getX() < x1){
|
||||||
|
rectX2 = x1;
|
||||||
|
rectX1 = e.getX();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rectX1 = x1;
|
||||||
|
rectX2 = e.getX();
|
||||||
|
}
|
||||||
|
if (e.getY() < y1){
|
||||||
|
rectY2 = y1;
|
||||||
|
rectY1 = e.getY();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rectY1 = y1;
|
||||||
|
rectY2 = e.getY();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int registered = 0;
|
||||||
|
for(int i = 0; i < notes.size(); i++ ) {
|
||||||
|
int add = ((Note) notes.get(i)).testSelect((float) (rectX1-10*Rise.ZOOM), (float) (rectY1-10*Rise.ZOOM), (float) (rectX2+10*Rise.ZOOM), (float) (rectY2+10*Rise.ZOOM));
|
||||||
|
|
||||||
|
if (add != 0) {
|
||||||
|
registered = registered + add;
|
||||||
|
clef = ((Note) notes.get(i)).clefChoice;
|
||||||
|
oB = ((Note) notes.get(i)).octavaAndBassoChoice;
|
||||||
|
spell = ((Note) notes.get(i)).spellingChoice;
|
||||||
|
ratio = ((Note) notes.get(i)).ratioChoice;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (registered > 0) {
|
||||||
|
Rise.NOTE_FRAME.setListeningNotes();
|
||||||
|
Rise.BOUNDING_BOX.setVisible(true);
|
||||||
|
Rise.BOUNDING_BOX.setCoordinates(rectX1, rectX2, rectY1, rectY2);
|
||||||
|
Rise.BOUNDING_BOX.repaint();
|
||||||
|
Rise.NOTE_FRAME.setVisible(true);
|
||||||
|
if (registered == 1) {
|
||||||
|
if (clef == 0) {
|
||||||
|
Rise.NOTE_FRAME.bass.setSelected(true);
|
||||||
|
}
|
||||||
|
else if (clef == 1) {
|
||||||
|
Rise.NOTE_FRAME.tenor.setSelected(true);
|
||||||
|
}
|
||||||
|
else if (clef == 2) {
|
||||||
|
Rise.NOTE_FRAME.alto.setSelected(true);
|
||||||
|
}
|
||||||
|
else if (clef == 3) {
|
||||||
|
Rise.NOTE_FRAME.treble.setSelected(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (oB == 0) {
|
||||||
|
Rise.NOTE_FRAME.mb.setSelected(true);
|
||||||
|
}
|
||||||
|
else if (oB == 1) {
|
||||||
|
Rise.NOTE_FRAME.vb.setSelected(true);
|
||||||
|
}
|
||||||
|
else if (oB == 2) {
|
||||||
|
Rise.NOTE_FRAME.none.setSelected(true);
|
||||||
|
}
|
||||||
|
else if (oB == 3) {
|
||||||
|
Rise.NOTE_FRAME.va.setSelected(true);
|
||||||
|
}
|
||||||
|
else if (oB == 4) {
|
||||||
|
Rise.NOTE_FRAME.ma.setSelected(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (spell == 0) {
|
||||||
|
Rise.NOTE_FRAME.sharps.setSelected(true);
|
||||||
|
}
|
||||||
|
else if (spell == 1) {
|
||||||
|
Rise.NOTE_FRAME.flats.setSelected(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ratio == 0) {
|
||||||
|
Rise.NOTE_FRAME.show.setSelected(true);
|
||||||
|
}
|
||||||
|
else if (ratio == 1) {
|
||||||
|
Rise.NOTE_FRAME.hide.setSelected(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Rise.NOTE_FRAME.clefNada.setSelected(true);
|
||||||
|
Rise.NOTE_FRAME.oBNada.setSelected(true);
|
||||||
|
Rise.NOTE_FRAME.spellNada.setSelected(true);
|
||||||
|
Rise.NOTE_FRAME.ratiosNada.setSelected(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Rise.BOUNDING_BOX.setVisible(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void mouseEntered(MouseEvent e) {
|
||||||
|
}
|
||||||
|
public void mouseExited(MouseEvent e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void mouseDragged(MouseEvent e) {
|
||||||
|
if (Rise.MODE == 0){
|
||||||
|
Rise.BOUNDING_BOX.setVisible(true);
|
||||||
|
double rectX1;
|
||||||
|
double rectX2;
|
||||||
|
double rectY1;
|
||||||
|
double rectY2;
|
||||||
|
|
||||||
|
if (e.getX() < x1){
|
||||||
|
rectX2 = x1;
|
||||||
|
rectX1 = e.getX();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rectX1 = x1;
|
||||||
|
rectX2 = e.getX();
|
||||||
|
}
|
||||||
|
if (e.getY() < y1){
|
||||||
|
rectY2 = y1;
|
||||||
|
rectY1 = e.getY();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rectY1 = y1;
|
||||||
|
rectY2 = e.getY();
|
||||||
|
}
|
||||||
|
Rise.BOUNDING_BOX.setCoordinates(rectX1, rectX2, rectY1, rectY2);
|
||||||
|
Rise.BOUNDING_BOX.repaint();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void mouseMoved(MouseEvent e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.Graphics;
|
||||||
|
import java.awt.Graphics2D;
|
||||||
|
import java.awt.geom.Line2D;
|
||||||
|
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
|
public class ScrollBar extends JPanel{
|
||||||
|
|
||||||
|
double xPos;
|
||||||
|
|
||||||
|
public ScrollBar() {
|
||||||
|
this.setOpaque(false);
|
||||||
|
this.setBounds((int) 0, (int) 0,(int) (Rise.PAGE_WIDTH*Rise.ZOOM), (int) (Rise.PAGE_HEIGHT*Rise.ZOOM));
|
||||||
|
this.setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void paint(Graphics g){
|
||||||
|
g.setColor(Color.BLUE);
|
||||||
|
Graphics2D g2 = (Graphics2D) g;
|
||||||
|
g2.draw(new Line2D.Double(Rise.PAGE_MARGIN*Rise.ZOOM + xPos,0, Rise.PAGE_MARGIN*Rise.ZOOM + xPos,Rise.PAGE_HEIGHT*Rise.ZOOM));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,118 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
|
import com.softsynth.jsyn.*;
|
||||||
|
|
||||||
|
public class WaveForm extends SynthNote {
|
||||||
|
|
||||||
|
EnvelopePlayer envPlayer;
|
||||||
|
SynthEnvelope env;
|
||||||
|
SynthInput envRate;
|
||||||
|
SynthInput spectrum;
|
||||||
|
int noOsc = 5;
|
||||||
|
//Set random phase
|
||||||
|
SineOscillator[] oscBank = new SineOscillator[noOsc];
|
||||||
|
BusWriter[] busWriter = new BusWriter[noOsc];
|
||||||
|
MultiplyUnit[] multAmp = new MultiplyUnit[noOsc];
|
||||||
|
MultiplyUnit[] multFreq = new MultiplyUnit[noOsc];
|
||||||
|
LineOut lineOut;
|
||||||
|
BusReader busReader;
|
||||||
|
SynthDistributor freqDist = new SynthDistributor("frequency");
|
||||||
|
SynthDistributor spectrumDist = new SynthDistributor("spectrum");
|
||||||
|
double[] envData;
|
||||||
|
SynthEnvelope glissEnv;
|
||||||
|
|
||||||
|
public WaveForm() {
|
||||||
|
super();
|
||||||
|
add(envPlayer = new EnvelopePlayer());
|
||||||
|
add(busReader = new BusReader());
|
||||||
|
|
||||||
|
add(busWriter[0] = new BusWriter());
|
||||||
|
add(oscBank[0] = new SineOscillator());
|
||||||
|
add(lineOut = new LineOut());
|
||||||
|
|
||||||
|
double randomPhase = Math.random();
|
||||||
|
oscBank[0].phase.set(randomPhase);
|
||||||
|
|
||||||
|
oscBank[0].frequency.connect(freqDist);
|
||||||
|
oscBank[0].output.connect(busWriter[0].input);
|
||||||
|
busWriter[0].busOutput.connect(busReader.busInput);
|
||||||
|
|
||||||
|
|
||||||
|
for(int i = 1; i < noOsc; i++){
|
||||||
|
add(busWriter[i] = new BusWriter());
|
||||||
|
add(oscBank[i] = new SineOscillator());
|
||||||
|
add(multFreq[i] = new MultiplyUnit());
|
||||||
|
add(multAmp[i] = new MultiplyUnit());
|
||||||
|
multFreq[i].inputA.set(i+1.);
|
||||||
|
multFreq[i].inputB.connect(freqDist);
|
||||||
|
multFreq[i].output.connect(oscBank[i].frequency);
|
||||||
|
multAmp[i].inputA.set(1./(i+1.));
|
||||||
|
multAmp[i].inputB.connect(spectrumDist);
|
||||||
|
multAmp[i].output.connect(oscBank[i].amplitude);
|
||||||
|
oscBank[i].output.connect(busWriter[i].input);
|
||||||
|
busWriter[i].busOutput.connect(busReader.busInput);
|
||||||
|
envPlayer.output.connect(busReader.amplitude);
|
||||||
|
|
||||||
|
oscBank[i].phase.set(randomPhase);
|
||||||
|
}
|
||||||
|
|
||||||
|
addPort(amplitude = envPlayer.amplitude);
|
||||||
|
addPort(frequency = freqDist);
|
||||||
|
addPort(envRate = envPlayer.rate);
|
||||||
|
addPort(output = busReader.output);
|
||||||
|
addPort(spectrum = spectrumDist);
|
||||||
|
|
||||||
|
//double[] envData = { .5, 1.0, .5, 0.0 };
|
||||||
|
envData = new double[42];
|
||||||
|
for (int i = 0; i < 21; i++) {
|
||||||
|
envData[i*2] = 1/20.;
|
||||||
|
envData[i*2+1] = (Math.cos(2*(1/20.*i)*Math.PI+Math.PI)+1)/2;
|
||||||
|
//System.out.println(envData[i*2] + " " + envData[i*2+1]);
|
||||||
|
}
|
||||||
|
env = new SynthEnvelope(envData);
|
||||||
|
|
||||||
|
frequency.set(400);
|
||||||
|
amplitude.set(1.);
|
||||||
|
spectrum.set(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void grainOn(int t, double f, double a) {
|
||||||
|
start(t);
|
||||||
|
frequency.set(t, f);
|
||||||
|
amplitude.set(t, a);
|
||||||
|
//spectrum.set(arg0);
|
||||||
|
envPlayer.envelopePort.clear(t);
|
||||||
|
envPlayer.envelopePort.queue(env,0,env.getNumFrames(),Synth.FLAG_AUTO_STOP);
|
||||||
|
//envPlayer.envelopePort.queueLoop(t, env, 1, 1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clickOn(int t, double f, double a) {
|
||||||
|
|
||||||
|
start(t);
|
||||||
|
frequency.set(t, f);
|
||||||
|
amplitude.set(t, a);
|
||||||
|
//spectrum.set(arg0);
|
||||||
|
envPlayer.envelopePort.clear(t);
|
||||||
|
envPlayer.envelopePort.queue(env,0,env.getNumFrames(),Synth.FLAG_AUTO_STOP);
|
||||||
|
//envPlayer.envelopePort.queueLoop(t, env, 1, 1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void glissOn(int t, double f, double a , double[] eD) {
|
||||||
|
glissEnv = new SynthEnvelope(eD);
|
||||||
|
start(t);
|
||||||
|
frequency.set(t, f);
|
||||||
|
amplitude.set(t, a);
|
||||||
|
envPlayer.envelopePort.clear(t);
|
||||||
|
envPlayer.envelopePort.queue(t,glissEnv,0,glissEnv.getNumFrames(), Synth.FLAG_AUTO_STOP);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void glissOff(int t, double r) {
|
||||||
|
envRate.set(t, r);
|
||||||
|
envPlayer.envelopePort.clear(t);
|
||||||
|
envPlayer.envelopePort.queue(t, glissEnv, glissEnv.getNumFrames() - 1, 1, Synth.FLAG_AUTO_STOP);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue