Search in sources :

Example 1 with ScoreGenerationException

use of blue.score.ScoreGenerationException 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;
}
Also used : GlobalOrcSco(blue.GlobalOrcSco) NoteList(blue.soundObject.NoteList) NoteParseException(blue.soundObject.NoteParseException) Mixer(blue.mixer.Mixer) ArrayList(java.util.ArrayList) SoundObjectException(blue.soundObject.SoundObjectException) Tables(blue.Tables) CompileData(blue.CompileData) StrBuilder(org.apache.commons.lang3.text.StrBuilder) StringChannel(blue.orchestra.blueSynthBuilder.StringChannel) Arrangement(blue.Arrangement) LinePoint(blue.components.lines.LinePoint) TempoMapper(blue.noteProcessor.TempoMapper) Tempo(blue.score.tempo.Tempo) ParameterNameManager(blue.automation.ParameterNameManager) ScoreGenerationException(blue.score.ScoreGenerationException) OpcodeList(blue.udo.OpcodeList) StringChannelNameManager(blue.orchestra.blueSynthBuilder.StringChannelNameManager) Note(blue.soundObject.Note) Instrument(blue.orchestra.Instrument) GenericInstrument(blue.orchestra.GenericInstrument) CsdRenderResult(blue.services.render.CsdRenderResult)

Example 2 with ScoreGenerationException

use of blue.score.ScoreGenerationException in project blue by kunstmusik.

the class CompileProcessor method process.

@Override
protected void process(Env env, Map<Option, String[]> optionValues) throws CommandException {
    String compileFileName = null;
    String outFileName = null;
    if (optionValues.containsKey(c)) {
        compileFileName = optionValues.get(c)[0];
    }
    if (optionValues.containsKey(o)) {
        outFileName = optionValues.get(o)[0];
    }
    if (compileFileName == null && outFileName == null) {
        return;
    }
    if (compileFileName == null && outFileName != null) {
        throw new CommandException(1, ".blue project not given as argument");
    }
    File in = new File(compileFileName);
    if (!in.exists() || !in.isFile()) {
        throw new CommandException(1, "Could not open .blue file: " + in.getAbsolutePath());
    }
    if (outFileName == null) {
        outFileName = compileFileName.substring(0, compileFileName.indexOf(".blue")) + ".csd";
    }
    OpenProjectAction.open(in);
    PrintWriter out = null;
    try {
        BlueData tempData = BlueProjectManager.getInstance().getCurrentBlueData();
        out = new PrintWriter(new BufferedWriter(new FileWriter(outFileName)));
        CsdRenderResult renderResult = CSDRenderService.getDefault().generateCSD(tempData, 0.0F, -1.0F, false, false);
        out.print(renderResult.getCsdText());
        out.close();
        throw new CommandException(0, compileFileName + " " + BlueSystem.getString("blue.compiledTo") + " " + outFileName);
    } catch (IOException | ScoreGenerationException | CommandException e) {
        if (out != null) {
            out.close();
        }
        if (e instanceof CommandException) {
            throw (CommandException) e;
        }
        throw new CommandException(1, BlueSystem.getString("message.errorLabel") + " " + BlueSystem.getString("blue.csdCompileError") + e.getMessage());
    }
}
Also used : BlueData(blue.BlueData) ScoreGenerationException(blue.score.ScoreGenerationException) FileWriter(java.io.FileWriter) CommandException(org.netbeans.api.sendopts.CommandException) IOException(java.io.IOException) File(java.io.File) PrintWriter(java.io.PrintWriter) BufferedWriter(java.io.BufferedWriter) CsdRenderResult(blue.services.render.CsdRenderResult)

Example 3 with ScoreGenerationException

use of blue.score.ScoreGenerationException in project blue by kunstmusik.

the class CommandlineRunner method render.

@Override
public void render() throws SoundObjectException {
    if (this.data == null) {
        return;
    }
    shouldStop = false;
    String command;
    try {
        // String osName = System.getProperty("os.name");
        command = ProjectPropertiesUtil.getRealtimeCommandLine(data.getProjectProperties());
        // if (command.trim().length() == 0) {
        // command = ProgramOptions.getDefaultCommandline();
        // JOptionPane.showMessageDialog(null, BlueSystem
        // .getString("message.noCommandLineSet")
        // + " " + command);
        // 
        // }
        String globalSco = data.getGlobalOrcSco().getGlobalSco();
        globalSco = TextUtilities.stripMultiLineComments(globalSco);
        globalSco = TextUtilities.stripSingleLineComments(globalSco);
        // System.out.println(tempoMapper);
        // FIXME
        // timeManager.setRootPolyObject(data.getPolyObject());
        double startTime = data.getRenderStartTime();
        double endTime = data.getRenderEndTime();
        CsdRenderResult result = CSDRenderService.getDefault().generateCSD(data, startTime, endTime, true, false);
        RenderTimeManager timeManager = Lookup.getDefault().lookup(RenderTimeManager.class);
        timeManager.setTempoMapper(result.getTempoMapper());
        String csd = result.getCsdText();
        File temp = FileUtilities.createTempTextFile("tempCsd", ".csd", BlueSystem.getCurrentProjectDirectory(), csd);
        // if (osName.indexOf("Windows") >= 0) {
        command += " \"" + temp.getAbsolutePath() + "\"";
        // } else {
        // command += " " + temp.getAbsolutePath().replaceAll(" ", "\\\\ ");
        // }
        play(command, BlueSystem.getCurrentProjectDirectory(), data.getRenderStartTime());
    } catch (SoundObjectException soe) {
        throw soe;
    } catch (ScoreGenerationException ex) {
        NotificationDisplayer.getDefault().notify("Error", NotificationDisplayer.Priority.HIGH.getIcon(), BlueSystem.getString("message.generateScore.error") + "\n" + ex.getLocalizedMessage(), null);
        System.err.println("[" + BlueSystem.getString("message.error") + "] " + ex.getLocalizedMessage());
    }
}
Also used : ScoreGenerationException(blue.score.ScoreGenerationException) RenderTimeManager(blue.services.render.RenderTimeManager) SoundObjectException(blue.soundObject.SoundObjectException) File(java.io.File) CsdRenderResult(blue.services.render.CsdRenderResult)

Example 4 with ScoreGenerationException

use of blue.score.ScoreGenerationException in project blue by kunstmusik.

the class ProcessConsole method renderToDisk.

@Override
public void renderToDisk(DiskRenderJob job) {
    if (this.io != null) {
        try {
            this.io.getOut().reset();
        } catch (IOException ex) {
            Exceptions.printStackTrace(ex);
        }
    }
    try {
        io = IOProvider.getDefault().getIO("Csound (Disk)", false);
        IOColors.setColor(io, IOColors.OutputType.OUTPUT, Color.WHITE);
        io.select();
        String commandLine = StringUtils.join(job.getArgs(), " ");
        BlueData data = job.getData();
        double startTime = data.getRenderStartTime();
        double endTime = data.getRenderEndTime();
        if (data.getProjectProperties().diskAlwaysRenderEntireProject) {
            startTime = 0.0f;
            endTime = -1.0f;
        }
        CsdRenderResult result = CSDRenderService.getDefault().generateCSD(data, startTime, endTime, false, false);
        String csd = result.getCsdText();
        File temp = FileUtilities.createTempTextFile("tempCsd", ".csd", BlueSystem.getCurrentProjectDirectory(), csd);
        commandLine += " \"" + temp.getAbsolutePath() + "\"";
        commandLine += " -L stdin";
        execDisk(commandLine, job.getCurrentWorkingDirectory());
        process.waitFor();
        destroy(true, true);
    } catch (ScoreGenerationException | IOException | InterruptedException e) {
        throw new RuntimeException(e);
    }
}
Also used : BlueData(blue.BlueData) ScoreGenerationException(blue.score.ScoreGenerationException) IOException(java.io.IOException) File(java.io.File) CsdRenderResult(blue.services.render.CsdRenderResult)

Example 5 with ScoreGenerationException

use of blue.score.ScoreGenerationException in project blue by kunstmusik.

the class CS6DiskRendererService method generateCsd.

/**
 * @param data
 * @return the absolute path of the temp CSD file on disk
 */
protected String generateCsd(BlueData data) {
    double startTime = data.getRenderStartTime();
    double endTime = data.getRenderEndTime();
    if (data.getProjectProperties().diskAlwaysRenderEntireProject) {
        startTime = 0.0f;
        endTime = -1.0f;
    }
    CsdRenderResult result;
    try {
        result = CSDRenderService.getDefault().generateCSD(data, startTime, endTime, false, true);
    } catch (ScoreGenerationException ex) {
        Exceptions.printStackTrace(ex);
        return null;
    }
    String csd = result.getCsdText();
    File temp = FileUtilities.createTempTextFile("tempCsd", ".csd", BlueSystem.getCurrentProjectDirectory(), csd);
    return temp.getAbsolutePath();
}
Also used : ScoreGenerationException(blue.score.ScoreGenerationException) File(java.io.File) CsdRenderResult(blue.services.render.CsdRenderResult)

Aggregations

ScoreGenerationException (blue.score.ScoreGenerationException)5 CsdRenderResult (blue.services.render.CsdRenderResult)5 File (java.io.File)4 BlueData (blue.BlueData)2 SoundObjectException (blue.soundObject.SoundObjectException)2 IOException (java.io.IOException)2 Arrangement (blue.Arrangement)1 CompileData (blue.CompileData)1 GlobalOrcSco (blue.GlobalOrcSco)1 Tables (blue.Tables)1 ParameterNameManager (blue.automation.ParameterNameManager)1 LinePoint (blue.components.lines.LinePoint)1 Mixer (blue.mixer.Mixer)1 TempoMapper (blue.noteProcessor.TempoMapper)1 GenericInstrument (blue.orchestra.GenericInstrument)1 Instrument (blue.orchestra.Instrument)1 StringChannel (blue.orchestra.blueSynthBuilder.StringChannel)1 StringChannelNameManager (blue.orchestra.blueSynthBuilder.StringChannelNameManager)1 Tempo (blue.score.tempo.Tempo)1 RenderTimeManager (blue.services.render.RenderTimeManager)1