| 1 | package com.github.dakusui.symfonion.song; | |
| 2 | ||
| 3 | import com.github.dakusui.json.*; | |
| 4 | import com.github.dakusui.symfonion.core.MidiCompiler; | |
| 5 | import com.github.dakusui.symfonion.core.MidiCompilerContext; | |
| 6 | import com.github.dakusui.symfonion.exceptions.ExceptionThrower; | |
| 7 | import com.github.dakusui.symfonion.exceptions.SymfonionException; | |
| 8 | import com.github.dakusui.symfonion.exceptions.SymfonionIllegalFormatException; | |
| 9 | import com.github.dakusui.symfonion.song.Pattern.Parameters; | |
| 10 | import com.github.dakusui.symfonion.utils.Fraction; | |
| 11 | import com.github.dakusui.symfonion.utils.Utils; | |
| 12 | import com.google.gson.*; | |
| 13 | ||
| 14 | import javax.sound.midi.InvalidMidiDataException; | |
| 15 | import javax.sound.midi.MidiEvent; | |
| 16 | import javax.sound.midi.Track; | |
| 17 | import java.util.LinkedList; | |
| 18 | import java.util.List; | |
| 19 | import java.util.regex.Matcher; | |
| 20 | ||
| 21 | import static com.github.dakusui.symfonion.exceptions.ExceptionThrower.*; | |
| 22 | import static com.github.dakusui.symfonion.exceptions.ExceptionThrower.ContextKey.JSON_ELEMENT_ROOT; | |
| 23 | import static com.github.dakusui.symfonion.exceptions.SymfonionIllegalFormatException.NOTE_LENGTH_EXAMPLE; | |
| 24 | import static com.github.dakusui.symfonion.exceptions.SymfonionTypeMismatchException.PRIMITIVE; | |
| 25 | ||
| 26 | public class Stroke { | |
| 27 | private static final int UNDEFINED_NUM = -1; | |
| 28 | private final Fraction length; | |
| 29 | static java.util.regex.Pattern notesPattern = java.util.regex.Pattern.compile("([A-Zac-z])([#b]*)([><]*)([\\+\\-]*)?"); | |
| 30 | List<NoteSet> notes = new LinkedList<>(); | |
| 31 | private final double gate; | |
| 32 | private final NoteMap noteMap; | |
| 33 | private final int[] volume; | |
| 34 | private final int[] pan; | |
| 35 | private final int[] reverb; | |
| 36 | private final int[] chorus; | |
| 37 | private final int[] pitch; | |
| 38 | private final int[] modulation; | |
| 39 | private final int pgno; | |
| 40 | private String bkno = null; | |
| 41 | private final int tempo; | |
| 42 | private final JsonArray sysex; | |
| 43 | private final int[] aftertouch; | |
| 44 | private final JsonElement strokeJson; | |
| 45 | ||
| 46 | public Stroke(JsonElement strokeJson, Parameters params, NoteMap noteMap) throws SymfonionException, JsonException { | |
| 47 | String notes; | |
| 48 | Fraction len = params.length(); | |
| 49 | double gate = params.gate(); | |
| 50 | this.strokeJson = strokeJson; | |
| 51 | JsonObject obj = JsonUtils.asJsonObjectWithPromotion(strokeJson, new String[]{ | |
| 52 | Keyword.$notes.name(), | |
| 53 | Keyword.$length.name() | |
| 54 | }); | |
| 55 | notes = JsonUtils.asStringWithDefault(obj, null, Keyword.$notes); | |
| 56 |
1
1. <init> : negated conditional → KILLED |
if (JsonUtils.hasPath(obj, Keyword.$length)) { |
| 57 | JsonElement lenJSON = JsonUtils.asJsonElement(obj, Keyword.$length); | |
| 58 |
1
1. <init> : negated conditional → KILLED |
if (lenJSON.isJsonPrimitive()) { |
| 59 | len = Utils.parseNoteLength(lenJSON.getAsString()); | |
| 60 |
1
1. <init> : negated conditional → KILLED |
if (len == null) { |
| 61 | throw illegalFormatException(lenJSON, NOTE_LENGTH_EXAMPLE); | |
| 62 | } | |
| 63 | } else { | |
| 64 | throw typeMismatchException(lenJSON, PRIMITIVE); | |
| 65 | } | |
| 66 | } | |
| 67 |
1
1. <init> : negated conditional → KILLED |
if (JsonUtils.hasPath(obj, Keyword.$gate)) { |
| 68 | gate = JsonUtils.asDouble(obj, Keyword.$gate); | |
| 69 | } | |
| 70 |
1
1. <init> : negated conditional → KILLED |
this.tempo = JsonUtils.hasPath(obj, Keyword.$tempo) ? JsonUtils.asInt(obj, Keyword.$tempo) : UNDEFINED_NUM; |
| 71 |
1
1. <init> : negated conditional → KILLED |
this.pgno = JsonUtils.hasPath(obj, Keyword.$program) ? JsonUtils.asInt(obj, Keyword.$program) : UNDEFINED_NUM; |
| 72 |
1
1. <init> : negated conditional → KILLED |
if (JsonUtils.hasPath(obj, Keyword.$bank)) { |
| 73 | this.bkno = JsonUtils.asString(obj, Keyword.$bank); | |
| 74 | // Checks if this.bkno can be parsed as a double value. | |
| 75 | assert this.bkno != null; | |
| 76 | //noinspection ResultOfMethodCallIgnored | |
| 77 | Double.parseDouble(this.bkno); | |
| 78 | } | |
| 79 | this.volume = getIntArray(obj, Keyword.$volume); | |
| 80 | this.pan = getIntArray(obj, Keyword.$pan); | |
| 81 | this.reverb = getIntArray(obj, Keyword.$reverb); | |
| 82 | this.chorus = getIntArray(obj, Keyword.$chorus); | |
| 83 | this.pitch = getIntArray(obj, Keyword.$pitch); | |
| 84 | this.modulation = getIntArray(obj, Keyword.$modulation); | |
| 85 | this.aftertouch = getIntArray(obj, Keyword.$aftertouch); | |
| 86 | this.sysex = JsonUtils.asJsonArrayWithDefault(obj, null, Keyword.$sysex); | |
| 87 | /* | |
| 88 | * } else { | |
| 89 | * // unsupported | |
| 90 | * } | |
| 91 | */ | |
| 92 | this.noteMap = noteMap; | |
| 93 | this.gate = gate; | |
| 94 | Fraction strokeLen = Fraction.zero; | |
| 95 |
1
1. <init> : negated conditional → KILLED |
if (notes != null) { |
| 96 | for (String nn : notes.split(";")) { | |
| 97 | NoteSet ns = new NoteSet(); | |
| 98 | Fraction nsLen; | |
| 99 | String l; | |
| 100 |
1
1. <init> : negated conditional → KILLED |
if ((l = parseNotes(nn, ns)) != null) { |
| 101 | nsLen = Utils.parseNoteLength(l); | |
| 102 | } else { | |
| 103 | nsLen = len; | |
| 104 | } | |
| 105 |
1
1. <init> : removed call to com/github/dakusui/symfonion/song/NoteSet::setLength → KILLED |
ns.setLength(nsLen); |
| 106 | this.notes.add(ns); | |
| 107 | strokeLen = Fraction.add(strokeLen, nsLen); | |
| 108 | } | |
| 109 | } | |
| 110 |
1
1. <init> : negated conditional → KILLED |
if (Fraction.zero.equals(strokeLen)) { |
| 111 | strokeLen = len; | |
| 112 | } | |
| 113 | this.length = strokeLen; | |
| 114 | } | |
| 115 | ||
| 116 | private int[] getIntArray(JsonObject cur, Keyword kw) throws JsonInvalidPathException, JsonTypeMismatchException, JsonFormatException { | |
| 117 | int[] ret; | |
| 118 |
1
1. getIntArray : negated conditional → KILLED |
if (!JsonUtils.hasPath(cur, kw)) { |
| 119 | return null; | |
| 120 | } | |
| 121 | JsonElement json = JsonUtils.asJsonElement(cur, kw); | |
| 122 |
1
1. getIntArray : negated conditional → KILLED |
if (json.isJsonArray()) { |
| 123 | JsonArray arr = json.getAsJsonArray(); | |
| 124 | ret = interpolate(expandDots(arr)); | |
| 125 | } else { | |
| 126 | ret = new int[1]; | |
| 127 | ret[0] = JsonUtils.asInt(cur, kw); | |
| 128 | } | |
| 129 |
1
1. getIntArray : replaced return value with null for com/github/dakusui/symfonion/song/Stroke::getIntArray → KILLED |
return ret; |
| 130 | } | |
| 131 | ||
| 132 | private static JsonArray expandDots(JsonArray arr) throws SymfonionIllegalFormatException { | |
| 133 | JsonArray ret = new JsonArray(); | |
| 134 |
2
1. expandDots : negated conditional → KILLED 2. expandDots : changed conditional boundary → KILLED |
for (int i = 0; i < arr.size(); i++) { |
| 135 | JsonElement cur = arr.get(i); | |
| 136 |
1
1. expandDots : negated conditional → KILLED |
if (cur.isJsonPrimitive()) { |
| 137 | JsonPrimitive p = cur.getAsJsonPrimitive(); | |
| 138 |
2
1. expandDots : negated conditional → KILLED 2. expandDots : negated conditional → KILLED |
if (p.isBoolean() || p.isNumber()) |
| 139 |
1
1. expandDots : removed call to com/google/gson/JsonArray::add → KILLED |
ret.add(p); |
| 140 |
1
1. expandDots : negated conditional → KILLED |
else if (p.isString()) { |
| 141 | String s = p.getAsString(); | |
| 142 |
2
1. expandDots : changed conditional boundary → KILLED 2. expandDots : negated conditional → KILLED |
for (int j = 0; j < s.length(); j++) { |
| 143 |
1
1. expandDots : negated conditional → KILLED |
if (s.charAt(j) == '.') |
| 144 |
1
1. expandDots : removed call to com/google/gson/JsonArray::add → KILLED |
ret.add(JsonNull.INSTANCE); |
| 145 | else | |
| 146 | throw syntaxErrorWhenExpandingDotsIn(arr); | |
| 147 | } | |
| 148 | } | |
| 149 |
1
1. expandDots : negated conditional → KILLED |
} else if (cur.isJsonNull()) |
| 150 |
1
1. expandDots : removed call to com/google/gson/JsonArray::add → KILLED |
ret.add(cur); |
| 151 | else | |
| 152 | throw ExceptionThrower.typeMismatchWhenExpandingDotsIn(arr); | |
| 153 | } | |
| 154 |
1
1. expandDots : replaced return value with null for com/github/dakusui/symfonion/song/Stroke::expandDots → KILLED |
return ret; |
| 155 | } | |
| 156 | ||
| 157 | private static int[] interpolate(JsonArray arr) { | |
| 158 | int[] ret; | |
| 159 | Integer[] tmp = new Integer[arr.size()]; | |
| 160 |
2
1. interpolate : changed conditional boundary → KILLED 2. interpolate : negated conditional → KILLED |
for (int i = 0; i < tmp.length; i++) { |
| 161 |
2
1. interpolate : negated conditional → KILLED 2. interpolate : negated conditional → KILLED |
if (arr.get(i) == null || arr.get(i).isJsonNull()) { |
| 162 | tmp[i] = null; | |
| 163 | } else { | |
| 164 | tmp[i] = arr.get(i).getAsInt(); | |
| 165 | } | |
| 166 | } | |
| 167 | ret = new int[arr.size()]; | |
| 168 | int start = 0; | |
| 169 | int end = 0; | |
| 170 |
2
1. interpolate : negated conditional → KILLED 2. interpolate : changed conditional boundary → KILLED |
for (int i = 0; i < tmp.length; i++) { |
| 171 |
1
1. interpolate : negated conditional → SURVIVED |
if (tmp[i] != null) { |
| 172 | start = ret[i] = tmp[i]; | |
| 173 | } else { | |
| 174 |
1
1. interpolate : Replaced integer addition with subtraction → TIMED_OUT |
int j = i + 1; |
| 175 |
2
1. interpolate : changed conditional boundary → SURVIVED 2. interpolate : negated conditional → KILLED |
while (j < tmp.length) { |
| 176 |
1
1. interpolate : negated conditional → KILLED |
if (tmp[j] != null) { |
| 177 | end = tmp[j]; | |
| 178 | ret[j] = end; | |
| 179 | break; | |
| 180 | } | |
| 181 | j++; | |
| 182 | } | |
| 183 |
3
1. interpolate : Replaced integer subtraction with addition → SURVIVED 2. interpolate : Replaced integer subtraction with addition → SURVIVED 3. interpolate : Replaced integer division with multiplication → KILLED |
int step = (end - start) / (j - i); |
| 184 | int curval = start; | |
| 185 |
2
1. interpolate : changed conditional boundary → SURVIVED 2. interpolate : negated conditional → KILLED |
for (int k = i; k < j; k++) { |
| 186 |
1
1. interpolate : Replaced integer addition with subtraction → KILLED |
curval += step; |
| 187 | ret[k] = curval; | |
| 188 | } | |
| 189 | i = j; | |
| 190 | } | |
| 191 | } | |
| 192 |
1
1. interpolate : replaced return value with null for com/github/dakusui/symfonion/song/Stroke::interpolate → KILLED |
return ret; |
| 193 | } | |
| 194 | ||
| 195 | public Fraction length() { | |
| 196 |
1
1. length : replaced return value with null for com/github/dakusui/symfonion/song/Stroke::length → KILLED |
return length; |
| 197 | } | |
| 198 | ||
| 199 | public double gate() { | |
| 200 |
1
1. gate : replaced double return with 0.0d for com/github/dakusui/symfonion/song/Stroke::gate → KILLED |
return this.gate; |
| 201 | } | |
| 202 | ||
| 203 | public List<NoteSet> noteSets() { | |
| 204 |
1
1. noteSets : replaced return value with Collections.emptyList for com/github/dakusui/symfonion/song/Stroke::noteSets → KILLED |
return this.notes; |
| 205 | } | |
| 206 | ||
| 207 | /* | |
| 208 | * Returns the 'length' portion of the string <code>s</code>. | |
| 209 | */ | |
| 210 | private String parseNotes(String s, List<Note> notes) throws SymfonionException { | |
| 211 | Matcher m = notesPattern.matcher(s); | |
| 212 | int i; | |
| 213 |
1
1. parseNotes : negated conditional → KILLED |
for (i = 0; m.find(i); i = m.end()) { |
| 214 |
1
1. parseNotes : negated conditional → KILLED |
if (i != m.start()) { |
| 215 | throw syntaxErrorInNotePattern(s, i, m); | |
| 216 | } | |
| 217 | int n_ = this.noteMap.note(m.group(1), this.strokeJson); | |
| 218 |
2
1. parseNotes : changed conditional boundary → SURVIVED 2. parseNotes : negated conditional → KILLED |
if (n_ >= 0) { |
| 219 | int n = | |
| 220 | n_ + | |
| 221 |
2
1. parseNotes : Replaced integer subtraction with addition → SURVIVED 2. parseNotes : Replaced integer addition with subtraction → SURVIVED |
Utils.count('#', m.group(2)) - Utils.count('b', m.group(2)) + |
| 222 |
4
1. parseNotes : Replaced integer multiplication with division → SURVIVED 2. parseNotes : Replaced integer subtraction with addition → SURVIVED 3. parseNotes : Replaced integer multiplication with division → SURVIVED 4. parseNotes : Replaced integer addition with subtraction → SURVIVED |
Utils.count('>', m.group(3)) * 12 - Utils.count('<', m.group(3)) * 12; |
| 223 |
1
1. parseNotes : Replaced integer subtraction with addition → SURVIVED |
int a = Utils.count('+', m.group(4)) - Utils.count('-', m.group(4)); |
| 224 | Note nn = new Note(n, a); | |
| 225 | notes.add(nn); | |
| 226 | } | |
| 227 | } | |
| 228 | Matcher n = Utils.lengthPattern.matcher(s); | |
| 229 | String ret = null; | |
| 230 |
1
1. parseNotes : negated conditional → KILLED |
if (n.find(i)) { |
| 231 | ret = s.substring(n.start(), n.end()); | |
| 232 | i = n.end(); | |
| 233 | } | |
| 234 |
1
1. parseNotes : negated conditional → KILLED |
if (i != s.length()) { |
| 235 | String msg = s.substring(0, i) + "`" + s.substring(i) + "' isn't a valid note expression. Notes must be like 'C', 'CEG8.', and so on."; | |
| 236 | throw illegalFormatException(this.strokeJson, msg); | |
| 237 | } | |
| 238 |
1
1. parseNotes : replaced return value with "" for com/github/dakusui/symfonion/song/Stroke::parseNotes → KILLED |
return ret; |
| 239 | ||
| 240 | } | |
| 241 | ||
| 242 | interface EventCreator { | |
| 243 | void createEvent(int v, long pos) throws InvalidMidiDataException; | |
| 244 | } | |
| 245 | ||
| 246 | private void renderValues(int[] values, long pos, long strokeLen, MidiCompiler compiler, EventCreator creator) throws | |
| 247 | InvalidMidiDataException { | |
| 248 |
1
1. renderValues : negated conditional → KILLED |
if (values == null) { |
| 249 | return; | |
| 250 | } | |
| 251 |
1
1. renderValues : Replaced long division with multiplication → SURVIVED |
long step = strokeLen / values.length; |
| 252 |
2
1. renderValues : negated conditional → KILLED 2. renderValues : changed conditional boundary → KILLED |
for (int i = 0; i < values.length; i++) { |
| 253 |
3
1. renderValues : Replaced long addition with subtraction → SURVIVED 2. renderValues : Replaced long multiplication with division → KILLED 3. renderValues : removed call to com/github/dakusui/symfonion/song/Stroke$EventCreator::createEvent → KILLED |
creator.createEvent(values[i], pos + step * i); |
| 254 |
1
1. renderValues : removed call to com/github/dakusui/symfonion/core/MidiCompiler::controlEventProcessed → SURVIVED |
compiler.controlEventProcessed(); |
| 255 | } | |
| 256 | } | |
| 257 | ||
| 258 | public void compile(final MidiCompiler compiler, MidiCompilerContext context) throws InvalidMidiDataException { | |
| 259 | final Track track = context.track(); | |
| 260 | final int ch = context.channel(); | |
| 261 | long absolutePosition = context.convertRelativePositionInStrokeToAbsolutePosition(Fraction.zero); | |
| 262 | long strokeLen = context.getStrokeLengthInTicks(this); | |
| 263 |
1
1. compile : negated conditional → KILLED |
if (tempo != UNDEFINED_NUM) { |
| 264 | track.add(compiler.createTempoEvent(this.tempo, absolutePosition)); | |
| 265 |
1
1. compile : removed call to com/github/dakusui/symfonion/core/MidiCompiler::controlEventProcessed → NO_COVERAGE |
compiler.controlEventProcessed(); |
| 266 | } | |
| 267 |
1
1. compile : negated conditional → KILLED |
if (bkno != null) { |
| 268 | int msb = Integer.parseInt(bkno.substring(0, this.bkno.indexOf('.'))); | |
| 269 | track.add(compiler.createBankSelectMSBEvent(ch, msb, absolutePosition)); | |
| 270 |
1
1. compile : negated conditional → KILLED |
if (this.bkno.indexOf('.') != -1) { |
| 271 |
1
1. compile : Replaced integer addition with subtraction → KILLED |
int lsb = Integer.parseInt(bkno.substring(this.bkno.indexOf('.') + 1)); |
| 272 | track.add(compiler.createBankSelectLSBEvent(ch, lsb, absolutePosition)); | |
| 273 | } | |
| 274 |
1
1. compile : removed call to com/github/dakusui/symfonion/core/MidiCompiler::controlEventProcessed → SURVIVED |
compiler.controlEventProcessed(); |
| 275 | } | |
| 276 |
1
1. compile : negated conditional → KILLED |
if (pgno != UNDEFINED_NUM) { |
| 277 | track.add(compiler.createProgramChangeEvent(ch, this.pgno, absolutePosition)); | |
| 278 |
1
1. compile : removed call to com/github/dakusui/symfonion/core/MidiCompiler::controlEventProcessed → SURVIVED |
compiler.controlEventProcessed(); |
| 279 | } | |
| 280 |
1
1. compile : negated conditional → KILLED |
if (sysex != null) { |
| 281 | MidiEvent ev = compiler.createSysexEvent(ch, sysex, absolutePosition); | |
| 282 |
1
1. compile : negated conditional → NO_COVERAGE |
if (ev != null) { |
| 283 | track.add(ev); | |
| 284 |
1
1. compile : removed call to com/github/dakusui/symfonion/core/MidiCompiler::sysexEventProcessed → NO_COVERAGE |
compiler.sysexEventProcessed(); |
| 285 | } | |
| 286 | } | |
| 287 |
1
1. compile : removed call to com/github/dakusui/symfonion/song/Stroke::renderValues → KILLED |
renderValues(volume, absolutePosition, strokeLen, compiler, (v, pos) -> track.add(compiler.createVolumeChangeEvent(ch, v, pos))); |
| 288 |
1
1. compile : removed call to com/github/dakusui/symfonion/song/Stroke::renderValues → SURVIVED |
renderValues(pan, absolutePosition, strokeLen, compiler, (v, pos) -> track.add(compiler.createPanChangeEvent(ch, v, pos))); |
| 289 |
1
1. compile : removed call to com/github/dakusui/symfonion/song/Stroke::renderValues → SURVIVED |
renderValues(reverb, absolutePosition, strokeLen, compiler, (v, pos) -> track.add(compiler.createReverbEvent(ch, v, pos))); |
| 290 |
1
1. compile : removed call to com/github/dakusui/symfonion/song/Stroke::renderValues → SURVIVED |
renderValues(chorus, absolutePosition, strokeLen, compiler, (v, pos) -> track.add(compiler.createChorusEvent(ch, v, pos))); |
| 291 |
1
1. compile : removed call to com/github/dakusui/symfonion/song/Stroke::renderValues → SURVIVED |
renderValues(pitch, absolutePosition, strokeLen, compiler, (v, pos) -> track.add(compiler.createPitchBendEvent(ch, v, pos))); |
| 292 |
1
1. compile : removed call to com/github/dakusui/symfonion/song/Stroke::renderValues → SURVIVED |
renderValues(modulation, absolutePosition, strokeLen, compiler, (v, pos) -> track.add(compiler.createModulationEvent(ch, v, pos))); |
| 293 |
1
1. compile : removed call to com/github/dakusui/symfonion/song/Stroke::renderValues → SURVIVED |
renderValues(aftertouch, absolutePosition, strokeLen, compiler, (v, pos) -> track.add(compiler.createAfterTouchChangeEvent(ch, v, pos))); |
| 294 | int transpose = context.params().transpose(); | |
| 295 | int arpegiodelay = context.params().arpegio(); | |
| 296 | int delta = 0; | |
| 297 | Fraction relPosInStroke = Fraction.zero; | |
| 298 | for (NoteSet noteSet : this.noteSets()) { | |
| 299 | absolutePosition = context.convertRelativePositionInStrokeToAbsolutePosition(relPosInStroke); | |
| 300 | long absolutePositionWhereNoteFinishes = context.convertRelativePositionInStrokeToAbsolutePosition( | |
| 301 | Fraction.add( | |
| 302 | relPosInStroke, | |
| 303 | noteSet.getLength() | |
| 304 | ) | |
| 305 | ); | |
| 306 |
1
1. compile : Replaced long subtraction with addition → KILLED |
long noteLengthInTicks = absolutePositionWhereNoteFinishes - absolutePosition; |
| 307 | for (Note note : noteSet) { | |
| 308 |
1
1. compile : Replaced integer addition with subtraction → SURVIVED |
int key = note.key() + transpose; |
| 309 | int velocity = Math.max( | |
| 310 | 0, | |
| 311 | Math.min( | |
| 312 | 127, | |
| 313 | context.params().velocitybase() + | |
| 314 |
2
1. compile : Replaced integer multiplication with division → SURVIVED 2. compile : Replaced integer addition with subtraction → SURVIVED |
note.accent() * context.params().velocitydelta() + |
| 315 |
1
1. compile : Replaced integer addition with subtraction → SURVIVED |
context.getGrooveAccent(relPosInStroke) |
| 316 | ) | |
| 317 | ); | |
| 318 |
1
1. compile : Replaced long addition with subtraction → SURVIVED |
track.add(compiler.createNoteOnEvent(ch, key, velocity, absolutePosition + delta)); |
| 319 |
3
1. compile : Replaced long addition with subtraction → SURVIVED 2. compile : Replaced double addition with subtraction → KILLED 3. compile : Replaced double multiplication with division → KILLED |
track.add(compiler.createNoteOffEvent(ch, key, (long) (absolutePosition + delta + noteLengthInTicks * this.gate()))); |
| 320 |
1
1. compile : removed call to com/github/dakusui/symfonion/core/MidiCompiler::noteProcessed → SURVIVED |
compiler.noteProcessed(); |
| 321 |
1
1. compile : Replaced integer addition with subtraction → SURVIVED |
delta += arpegiodelay; |
| 322 | } | |
| 323 |
1
1. compile : removed call to com/github/dakusui/symfonion/core/MidiCompiler::noteSetProcessed → SURVIVED |
compiler.noteSetProcessed(); |
| 324 | relPosInStroke = Fraction.add(relPosInStroke, noteSet.getLength()); | |
| 325 | } | |
| 326 | } | |
| 327 | } | |
Mutations | ||
| 56 |
1.1 |
|
| 58 |
1.1 |
|
| 60 |
1.1 |
|
| 67 |
1.1 |
|
| 70 |
1.1 |
|
| 71 |
1.1 |
|
| 72 |
1.1 |
|
| 95 |
1.1 |
|
| 100 |
1.1 |
|
| 105 |
1.1 |
|
| 110 |
1.1 |
|
| 118 |
1.1 |
|
| 122 |
1.1 |
|
| 129 |
1.1 |
|
| 134 |
1.1 2.2 |
|
| 136 |
1.1 |
|
| 138 |
1.1 2.2 |
|
| 139 |
1.1 |
|
| 140 |
1.1 |
|
| 142 |
1.1 2.2 |
|
| 143 |
1.1 |
|
| 144 |
1.1 |
|
| 149 |
1.1 |
|
| 150 |
1.1 |
|
| 154 |
1.1 |
|
| 160 |
1.1 2.2 |
|
| 161 |
1.1 2.2 |
|
| 170 |
1.1 2.2 |
|
| 171 |
1.1 |
|
| 174 |
1.1 |
|
| 175 |
1.1 2.2 |
|
| 176 |
1.1 |
|
| 183 |
1.1 2.2 3.3 |
|
| 185 |
1.1 2.2 |
|
| 186 |
1.1 |
|
| 192 |
1.1 |
|
| 196 |
1.1 |
|
| 200 |
1.1 |
|
| 204 |
1.1 |
|
| 213 |
1.1 |
|
| 214 |
1.1 |
|
| 218 |
1.1 2.2 |
|
| 221 |
1.1 2.2 |
|
| 222 |
1.1 2.2 3.3 4.4 |
|
| 223 |
1.1 |
|
| 230 |
1.1 |
|
| 234 |
1.1 |
|
| 238 |
1.1 |
|
| 248 |
1.1 |
|
| 251 |
1.1 |
|
| 252 |
1.1 2.2 |
|
| 253 |
1.1 2.2 3.3 |
|
| 254 |
1.1 |
|
| 263 |
1.1 |
|
| 265 |
1.1 |
|
| 267 |
1.1 |
|
| 270 |
1.1 |
|
| 271 |
1.1 |
|
| 274 |
1.1 |
|
| 276 |
1.1 |
|
| 278 |
1.1 |
|
| 280 |
1.1 |
|
| 282 |
1.1 |
|
| 284 |
1.1 |
|
| 287 |
1.1 |
|
| 288 |
1.1 |
|
| 289 |
1.1 |
|
| 290 |
1.1 |
|
| 291 |
1.1 |
|
| 292 |
1.1 |
|
| 293 |
1.1 |
|
| 306 |
1.1 |
|
| 308 |
1.1 |
|
| 314 |
1.1 2.2 |
|
| 315 |
1.1 |
|
| 318 |
1.1 |
|
| 319 |
1.1 2.2 3.3 |
|
| 320 |
1.1 |
|
| 321 |
1.1 |
|
| 323 |
1.1 |