use of org.apache.commons.lang3.text.StrBuilder in project blue by kunstmusik.
the class CSDRender method getTempoMapper.
protected TempoMapper getTempoMapper(Tempo tempo) {
StrBuilder buffer = new StrBuilder();
Line line = tempo.getLine();
for (int i = 0; i < line.size(); i++) {
LinePoint lp = line.getLinePoint(i);
buffer.append(" ").append(lp.getX());
buffer.append(" ").append(lp.getY());
}
return TempoMapper.createTempoMapper(buffer.toString());
}
use of org.apache.commons.lang3.text.StrBuilder in project blue by kunstmusik.
the class CSDRender method generateCSDImpl.
@Override
protected CsdRenderResult generateCSDImpl(BlueData data, double startTime, double endTime, boolean isRealTime, boolean _usingAPI) {
ProjectPluginManager.getInstance().preRender(data);
StringChannelNameManager scnm = new StringChannelNameManager();
ParameterNameManager pnm = new ParameterNameManager();
ArrayList<StringChannel> stringChannels = getStringChannels(data.getArrangement(), scnm);
ParameterHelper.clearCompilationVarNames(data);
boolean usingAPI = isRealTime && _usingAPI;
double renderStartTime = data.getRenderStartTime();
// making copies to use for adding compileTime tables and instruments
Tables tables = new Tables(data.getTableSet());
ArrayList originalParameters;
// if (usingAPI) {
originalParameters = ParameterHelper.getAllParameters(data.getArrangement(), data.getMixer());
// } else {
// originalParameters = ParameterHelper.getActiveParameters(
// data.getArrangement(), data.getMixer());
// }
assignParameterNames(originalParameters, pnm);
Arrangement arrangement = new Arrangement(data.getArrangement());
arrangement.clearUnusedInstrAssignments();
boolean hasInstruments = arrangement.size() > 0;
CompileData compileData = new CompileData(arrangement, tables, stringChannels, originalParameters, scnm, pnm);
Mixer mixer = null;
boolean mixerEnabled = data.getMixer().isEnabled();
if (mixerEnabled) {
mixer = new Mixer(data.getMixer());
assignChannelIds(compileData, mixer);
}
NoteList generatedNotes;
try {
generatedNotes = data.getScore().generateForCSD(compileData, startTime, endTime);
} catch (ScoreGenerationException ex) {
throw new RuntimeException(ex);
}
compileData.setHandleParametersAndChannels(false);
// assignParameterNames(originalParameters);
// get parameters
// ArrayList parameters;
// if (usingAPI) {
// parameters = ParameterHelper.getAllParameters(
// arrangement, mixer);
// } else {
// parameters = ParameterHelper.getActiveParameters(
// arrangement, mixer);
// }
GlobalOrcSco globalOrcSco = new GlobalOrcSco(data.getGlobalOrcSco());
OpcodeList udos = new OpcodeList(data.getOpcodeList());
// add all UDO's from instruments and effects
arrangement.generateUserDefinedOpcodes(udos);
// adding all compile-time instruments from soundObjects to arrangement
appendFtgenTableNumbers(globalOrcSco.getGlobalOrc(), tables);
// generating ftables
arrangement.generateFTables(tables);
String ftables = tables.getTables();
// Handle Render End Instrument and Note
if (endTime > 0.0f && endTime > startTime) {
Instrument instr = createRenderEndInstrument();
int instrId = arrangement.addInstrument(instr);
double endStartTime = endTime - startTime;
try {
Note renderEndNote = Note.createNote("i" + instrId + " " + endStartTime + " 0.1");
generatedNotes.add(renderEndNote);
} catch (NoteParseException e1) {
}
}
Tempo tempo = data.getScore().getTempo();
TempoMapper tempoMapper = null;
if (tempo.isEnabled()) {
tempoMapper = getTempoMapper(tempo);
globalOrcSco.appendGlobalSco(getTempoScore(tempo, renderStartTime, endTime));
} else {
tempoMapper = getTempoMapper(globalOrcSco.getGlobalSco());
}
double totalDur = blue.utility.ScoreUtilities.getTotalDuration(generatedNotes);
// double processingStart = blue.utility.ScoreUtilities.getProcessingStartTime(
// tempPObj);
// FIXME - figure out what to do about PROCESSING_START
double processingStart = renderStartTime;
System.out.println("<TOTAL_DUR> = " + totalDur);
System.out.println("<RENDER_START> = " + renderStartTime);
System.out.println("<PROCESSING_START> = " + processingStart);
int nchnls = getNchnls(data, isRealTime);
ArrayList<Instrument> alwaysOnInstruments = new ArrayList<>();
// boolean generateMixer = mixerEnabled && (hasInstruments || mixer.hasSubChannelDependencies());
arrangement.preGenerateOrchestra(compileData, mixer, nchnls, alwaysOnInstruments);
String globalSco = globalOrcSco.getGlobalSco() + "\n";
globalSco += arrangement.generateGlobalSco(compileData) + "\n";
globalSco = preprocessSco(globalSco, totalDur, renderStartTime, processingStart, tempoMapper);
double globalDur;
try {
globalDur = getGlobalDuration(globalSco);
} catch (SoundObjectException ex) {
throw new RuntimeException(ex);
}
if (globalDur < totalDur) {
globalDur = totalDur;
}
System.out.println("Global Duration = " + globalDur);
if (mixerEnabled) {
globalDur += mixer.getExtraRenderTime();
}
for (Instrument instrument : alwaysOnInstruments) {
String sourceId = compileData.getInstrSourceId(instrument);
String noteStr;
if (StringUtils.isNumeric(sourceId)) {
int instrId = arrangement.addInstrumentAtEnd(instrument);
noteStr = "i" + instrId + " 0 " + totalDur;
} else {
String instrId = sourceId + "_alwaysOn";
arrangement.addInstrumentWithId(instrument, instrId, false);
noteStr = "i \"" + instrId + "\" 0 " + totalDur;
}
try {
Note n = Note.createNote(noteStr);
generatedNotes.add(n);
} catch (NoteParseException ex) {
ex.printStackTrace();
}
}
if (mixerEnabled) {
final String mixerId = "BlueMixer";
// globalDur += mixer.getExtraRenderTime();
clearUnusedMixerChannels(mixer, arrangement);
globalOrcSco.appendGlobalOrc(mixer.getInitStatements(compileData, nchnls) + "\n");
arrangement.addInstrumentWithId(mixer.getMixerInstrument(compileData, udos, nchnls), mixerId, false);
try {
Note n = Note.createNote("i \"BlueMixer\" 0 " + globalDur);
generatedNotes.add(n);
} catch (NoteParseException ex) {
ex.printStackTrace();
}
}
handleParameters(originalParameters, stringChannels, globalOrcSco, generatedNotes, arrangement, startTime, startTime + globalDur, isRealTime, _usingAPI);
if (isRealTime && !usingAPI) {
Instrument instr = createBlueTimePointerInstrument();
int instrId = arrangement.addInstrument(instr);
try {
Note n = Note.createNote("i" + instrId + " 0 " + globalDur);
generatedNotes.add(n);
} catch (NoteParseException ex) {
ex.printStackTrace();
}
}
String tempGlobalOrc = compileData.getGlobalOrc();
if (tempGlobalOrc != null && tempGlobalOrc.length() > 0) {
globalOrcSco.appendGlobalOrc(tempGlobalOrc);
}
StrBuilder csd = new StrBuilder();
appendProjectInfo(data, csd);
csd.append("<CsoundSynthesizer>\n\n");
appendCsInstruments(compileData, data, udos, arrangement, globalOrcSco, csd, mixer, isRealTime);
appendCsScore(globalSco, ftables, generatedNotes, totalDur, csd);
csd.append("</CsoundSynthesizer>");
CsdRenderResult renderResult = new CsdRenderResult(csd.toString(), tempoMapper, originalParameters, stringChannels);
return renderResult;
}
use of org.apache.commons.lang3.text.StrBuilder in project blue by kunstmusik.
the class CSDRender method handleParameters.
private void handleParameters(ArrayList parameters, ArrayList<StringChannel> stringChannels, GlobalOrcSco globalOrcSco, NoteList notes, Arrangement arrangement, double startTime, double endTime, boolean isRealTime, boolean _usingAPI) {
Object[] varNum = new Object[1];
StrBuilder initStatements = new StrBuilder();
StrBuilder paramScore = new StrBuilder();
boolean useAPI = isRealTime && _usingAPI;
for (StringChannel strChannel : stringChannels) {
String varName = strChannel.getChannelName();
initStatements.append(varName);
initStatements.append(" = ");
initStatements.append("\"").append(strChannel.getValue()).append("\"\n");
if (useAPI) {
initStatements.append(varName).append(" chnexport \"");
initStatements.append(varName).append("\", 3\n");
}
}
for (int i = 0; i < parameters.size(); i++) {
Parameter param = (Parameter) parameters.get(i);
varNum[0] = new Integer(i);
String varName = param.getCompilationVarName();
// param.setCompilationVarName(varName);
double initialVal;
if (param.isAutomationEnabled()) {
initialVal = param.getLine().getValue(startTime);
} else {
initialVal = param.getFixedValue();
}
// init statements
initStatements.append(varName);
initStatements.append(" init ");
initStatements.append(NumberUtilities.formatDouble(initialVal));
initStatements.append("\n");
if (useAPI) {
initStatements.append(varName).append(" chnexport \"");
initStatements.append(varName).append("\", 3\n");
} else if (param.isAutomationEnabled()) {
// gk instrument
GenericInstrument instr = getParameterInstrument(param);
int instrId = arrangement.addInstrumentAtEnd(instr);
// score for values
appendParameterScore(param, instrId, paramScore, startTime, endTime);
}
}
globalOrcSco.appendGlobalOrc(initStatements.toString());
try {
notes.addAll(ScoreUtilities.getNotes(paramScore.toString()));
} catch (NoteParseException ex) {
ex.printStackTrace();
}
// globalOrcSco.appendGlobalSco(paramScore.toString());
}
use of org.apache.commons.lang3.text.StrBuilder in project blue by kunstmusik.
the class CSDRender method getTempoScore.
protected String getTempoScore(Tempo tempo, double renderStart, double renderEnd) {
Line line = tempo.getLine();
if (line.size() == 1) {
return "t 0 " + line.getLinePoint(0).getY();
}
if (renderStart > line.getLinePoint(line.size() - 1).getX()) {
return "t 0 " + line.getLinePoint(line.size() - 1).getY();
}
StrBuilder buffer = new StrBuilder();
buffer.append("t 0 ").append(line.getValue(renderStart));
for (int i = 0; i < line.size(); i++) {
LinePoint lp = line.getLinePoint(i);
double pointBeat = lp.getX();
if (pointBeat > renderStart) {
if (renderEnd < 0 || pointBeat < renderEnd) {
buffer.append(" ").append(pointBeat - renderStart);
buffer.append(" ").append(lp.getY());
} else {
break;
}
}
}
if (renderEnd > 0) {
buffer.append(" ").append(renderEnd - renderStart);
buffer.append(" ").append(line.getValue(renderEnd));
}
buffer.append("\n");
return buffer.toString();
}
use of org.apache.commons.lang3.text.StrBuilder in project kie-wb-common by kiegroup.
the class StringEscapeUtils method unescapeJavaUTF.
/**
* Comes from org.apache.commons.lang.StringEscapeUtils
*/
public static void unescapeJavaUTF(Writer out, String str) throws IOException {
if (out == null) {
throw new IllegalArgumentException("The Writer must not be null");
}
if (str == null) {
return;
}
int sz = str.length();
StrBuilder unicode = new StrBuilder(4);
boolean hadSlash = false;
boolean inUnicode = false;
for (int i = 0; i < sz; i++) {
char ch = str.charAt(i);
if (inUnicode) {
// if in unicode, then we're reading unicode
// values in somehow
unicode.append(ch);
if (unicode.length() == 4) {
// which represents our unicode character
try {
int value = Integer.parseInt(unicode.toString(), 16);
out.write((char) value);
unicode.setLength(0);
inUnicode = false;
hadSlash = false;
} catch (NumberFormatException nfe) {
throw new RuntimeException("Unable to parse unicode value: " + unicode, nfe);
}
}
continue;
}
if (hadSlash) {
// handle an escaped value
hadSlash = false;
if (ch == 'u') {
// uh-oh, we're in unicode country....
inUnicode = true;
} else {
out.write('\\');
out.write(ch);
}
continue;
} else if (ch == '\\') {
hadSlash = true;
continue;
}
out.write(ch);
}
if (hadSlash) {
// then we're in the weird case of a \ at the end of the
// string, let's output it anyway.
out.write('\\');
}
}
Aggregations