Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
/.classpath

/.project

bin/
.gitgnore
13 changes: 9 additions & 4 deletions src/rwdoclet/src/com/ruinwesen/doclet/RWDoclet.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,17 @@
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.regex.*;

import com.sun.javadoc.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.ConstructorDoc;
import com.sun.javadoc.ExecutableMemberDoc;
import com.sun.javadoc.MethodDoc;
import com.sun.javadoc.Parameter;
import com.sun.javadoc.RootDoc;
import com.sun.javadoc.Tag;

public class RWDoclet {
static String outputDir = "/Users/manuel/javadoc-output/";
Expand Down
214 changes: 109 additions & 105 deletions src/rwmidi/MidiEvent.java
Original file line number Diff line number Diff line change
@@ -1,105 +1,109 @@
package rwmidi;

import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MidiMessage;
import javax.sound.midi.ShortMessage;

/**
* Simple wrapper around MIDI messages, used to abstract from the actual bytes and provide a
* more symbolic representation of the MIDI data. This class is used as a superclass for
* messages received on a {@Link MidiInput} object. You don't usually have to create such objects yourself.
*
*/
public class MidiEvent extends ShortMessage{
public static final int SYSEX_START = 0xF0;
public static final int SYSEX_END = 0xF7;
public static final int NOTE_OFF = 0x80;
public static final int NOTE_ON = 0x90;
public static final int CONTROL_CHANGE = 0xB0;
public static final int PROGRAM_CHANGE = 0xC0;
private int midiChannel = 0;

MidiInput input = null;

protected MidiEvent(byte[] data){
super(data);
}

MidiEvent(final MidiMessage _midiMessage){
this(_midiMessage.getMessage());
}

MidiEvent(int command, int number, int value){
this(new byte[] { (byte) NOTE_ON, 0, 0 });
try{
setMessage(command | midiChannel, number, value);
}catch (InvalidMidiDataException e){
e.printStackTrace();
}
}

/**
*
* @return the input on which this message was received.
*/
public MidiInput getInput() {
return input;
}

void setInput(MidiInput _input) {
input = _input;
}

/**
*
* @return the first data byte of this message
*/
public int getData1(){
if (length > 1){
return (data[1] & 0xFF);
}
return 0;
}

void setData1(final int _data1){
data[1] = (byte) (_data1 & 0xFF);
}

/**
*
* @return the second data byte of this message
*/
public int getData2(){
if (length > 2){
return (data[2] & 0xFF);
}
return 0;
}

void setData2(final int _data2){
data[1] = (byte) (_data2 & 0xFF);
}

protected static MidiEvent create(MidiMessage msg) {
if (msg instanceof javax.sound.midi.SysexMessage)
return new SysexMessage((javax.sound.midi.SysexMessage)msg);
else if (msg instanceof ShortMessage) {
ShortMessage smsg = (ShortMessage)msg;
final int midiCommand = smsg.getCommand();
final int midiChannel = smsg.getChannel();
final int midiData1 = smsg.getData1();
final int midiData2 = smsg.getData2();

if (midiCommand == MidiEvent.NOTE_ON && midiData2 > 0) {
return new Note(midiCommand, midiChannel, midiData1, midiData2);
} else if (midiCommand == MidiEvent.NOTE_OFF || ((midiCommand == NOTE_ON) && (midiData2 == 0))) {
return new Note(midiCommand, midiChannel, midiData1, midiData2);
} else if (midiCommand == MidiEvent.CONTROL_CHANGE) {
return new Controller(midiChannel, midiData1, midiData2);
} else if (midiCommand == MidiEvent.PROGRAM_CHANGE) {
return new ProgramChange(midiData1);
}
}
return null;
}
}
package rwmidi;

import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MidiMessage;
import javax.sound.midi.ShortMessage;

/**
* Simple wrapper around MIDI messages, used to abstract from the actual bytes and provide a
* more symbolic representation of the MIDI data. This class is used as a superclass for
* messages received on a {@Link MidiInput} object. You don't usually have to create such objects yourself.
*
*/
public class MidiEvent extends ShortMessage{
public static final int SYSEX_START = 0xF0;
public static final int SYSEX_END = 0xF7;
public static final int NOTE_OFF = 0x80;
public static final int NOTE_ON = 0x90;
public static final int CONTROL_CHANGE = 0xB0;
public static final int PITCH_BEND = 0xE0;

private int midiChannel = 0;

MidiInput input = null;

protected MidiEvent(byte[] data){
super(data);
}

MidiEvent(final MidiMessage _midiMessage){
this(_midiMessage.getMessage());
}

MidiEvent(int command, int number, int value){
this(new byte[] { (byte) NOTE_ON, 0, 0 });
try{
setMessage(command | midiChannel, number, value);
}catch (InvalidMidiDataException e){
e.printStackTrace();
}
}

/**
*
* @return the input on which this message was received.
*/
public MidiInput getInput() {
return input;
}

void setInput(MidiInput _input) {
input = _input;
}

/**
*
* @return the first data byte of this message
*/
public int getData1(){
if (length > 1){
return (data[1] & 0xFF);
}
return 0;
}

void setData1(final int _data1){
data[1] = (byte) (_data1 & 0xFF);
}

/**
*
* @return the second data byte of this message
*/
public int getData2(){
if (length > 2){
return (data[2] & 0xFF);
}
return 0;
}

void setData2(final int _data2){
data[1] = (byte) (_data2 & 0xFF);
}

protected static MidiEvent create(MidiMessage msg) {
if (msg instanceof javax.sound.midi.SysexMessage)
return new SysexMessage((javax.sound.midi.SysexMessage)msg);
else if (msg instanceof ShortMessage) {
ShortMessage smsg = (ShortMessage)msg;
final int midiCommand = smsg.getCommand();
final int sysMessage = smsg.getStatus();
final int midiChannel = smsg.getChannel();
final int midiData1 = smsg.getData1();
final int midiData2 = smsg.getData2();

if (midiCommand == MidiEvent.NOTE_ON && midiData2 > 0) {
return new Note(midiCommand, midiChannel, midiData1, midiData2);
} else if (midiCommand == MidiEvent.NOTE_OFF || ((midiCommand == NOTE_ON) && (midiData2 == 0))) {
return new Note(midiCommand, midiChannel, midiData1, midiData2);
} else if (midiCommand == MidiEvent.CONTROL_CHANGE) {
return new Controller(midiChannel, midiData1, midiData2);
} else if (midiCommand == MidiEvent.PROGRAM_CHANGE) {
return new ProgramChange(midiData1);
} else if (sysMessage >= MidiEvent.SONG_POSITION_POINTER) { //if we get this far, only syncs are left
return new SyncEvent(msg);
}
}
return null;
}
}
Loading