Search in sources :

Example 1 with CompileData

use of blue.CompileData in project blue by kunstmusik.

the class MixerNodeTest method testGetMixerCode4.

// public void testGetMixerCode() {
// CompileData data = CompileData.createEmptyCompileData();
// Mixer mixer = getTestMixer(1, 1);
// 
// mixer.getChannel(0).setLevel(-96.0f);
// mixer.getSubChannel(0).setLevel(-96.0f);
// 
// OpcodeList opcodeList = new OpcodeList();
// EffectManager manager = new EffectManager();
// int nchnls = 2;
// 
// MixerNode node = MixerNode.getMixerGraph(mixer);
// Send[] allSends = mixer.getAllSends();
// 
// assignChannelIds(data, mixer);
// 
// String output = MixerNode.getMixerCode(data, mixer, opcodeList, manager,
// node, nchnls);
// 
// assertEquals("", output);
// }
/**
 * Should *not* output any signals (channel must look ahead when doing sends
 * to see if it will hit master or be a dead end)
 */
// public void testGetMixerCode2() {
// 
// CompileData data = CompileData.createEmptyCompileData();
// Send send = new Send();
// send.setSendChannel("subChannel1");
// 
// Mixer mixer = getTestMixer(1, 1);
// mixer.getChannel(0).setLevel(-96.0f);
// mixer.getChannel(0).getPreEffects().addSend(send);
// mixer.getSubChannel(0).setLevel(-96.0f);
// 
// OpcodeList opcodeList = new OpcodeList();
// EffectManager manager = new EffectManager();
// int nchnls = 2;
// 
// MixerNode node = MixerNode.getMixerGraph(mixer);
// 
// assignChannelIds(data, mixer);
// 
// String out = MixerNode.getMixerCode(data, mixer, opcodeList, manager, node,
// nchnls);
// 
// assertEquals("", out);
// }
// /**
// * Should output channel1->send->subChannel1->mixer; subchannel2 is dead end
// *
// */
// public void testGetMixerCode3() {
// 
// CompileData data = CompileData.createEmptyCompileData();
// Send send = new Send();
// send.setSendChannel("subChannel1");
// 
// Mixer mixer = getTestMixer(1, 2);
// mixer.getChannel(0).getPostEffects().addSend(send);
// mixer.getChannel(0).setOutChannel("subChannel2");
// 
// mixer.getSubChannel(1).setLevel(-96.0f);
// 
// OpcodeList opcodeList = new OpcodeList();
// EffectManager manager = new EffectManager();
// int nchnls = 2;
// 
// MixerNode node = MixerNode.getMixerGraph(mixer);
// assignChannelIds(data, mixer);
// 
// String out = MixerNode.getMixerCode(data, mixer, opcodeList, manager, node,
// nchnls);
// 
// String expected = "ga_bluesub_subChannel1_0\t+=\tga_bluemix_0_0\n"
// + "ga_bluesub_subChannel1_1\t+=\tga_bluemix_0_1\n"
// + "ga_bluesub_Master_0\t+=\tga_bluesub_subChannel1_0\n"
// + "ga_bluesub_Master_1\t+=\tga_bluesub_subChannel1_1\n";
// 
// assertEquals(expected, out);
// }
public void testGetMixerCode4() {
    CompileData data = CompileData.createEmptyCompileData();
    Mixer mixer = getTestMixer(3, 2);
    mixer.getChannel(1).setOutChannel("subChannel1");
    mixer.getChannel(2).setOutChannel("subChannel1");
    OpcodeList opcodeList = new OpcodeList();
    EffectManager manager = new EffectManager();
    int nchnls = 2;
    MixerNode node = MixerNode.getMixerGraph(mixer);
    assignChannelIds(data, mixer);
    String out = MixerNode.getMixerCode(data, mixer, opcodeList, manager, node, nchnls);
    String expected = "ga_bluesub_subChannel1_0\t+=\tga_bluemix_1_0\n" + "ga_bluesub_subChannel1_1\t+=\tga_bluemix_1_1\n" + "ga_bluesub_subChannel1_0\t+=\tga_bluemix_2_0\n" + "ga_bluesub_subChannel1_1\t+=\tga_bluemix_2_1\n" + "ga_bluesub_Master_0\t+=\tga_bluemix_0_0\n" + "ga_bluesub_Master_1\t+=\tga_bluemix_0_1\n" + "ga_bluesub_Master_0\t+=\tga_bluesub_subChannel1_0\n" + "ga_bluesub_Master_1\t+=\tga_bluesub_subChannel1_1\n";
    assertEquals(expected, out);
}
Also used : OpcodeList(blue.udo.OpcodeList) CompileData(blue.CompileData)

Example 2 with CompileData

use of blue.CompileData in project blue by kunstmusik.

the class ClojureSoundObjectTest method testGenerateForCSD.

/**
 * Test of generateForCSD method, of class ClojureObject.
 */
@Test
public void testGenerateForCSD() throws Exception {
    CompileData compileData = null;
    float startTime = 0.0F;
    float endTime = 2.0F;
    ClojureObject instance = new ClojureObject();
    instance.setClojureCode("(def score \"i1 0 2 3 5\")");
    NoteList result = instance.generateForCSD(compileData, startTime, endTime);
    assertEquals(result.get(0).getPField(5), "5");
}
Also used : NoteList(blue.soundObject.NoteList) CompileData(blue.CompileData) Test(org.junit.Test)

Example 3 with CompileData

use of blue.CompileData in project blue by kunstmusik.

the class PatternLayerTest method testGenerateForCSD.

/**
 * Test of generateForCSD method, of class PatternLayer.
 */
@Test
public void testGenerateForCSD() throws SoundObjectException {
    CompileData compileData = null;
    float startTime = 0.0F;
    float endTime = 0.0F;
    int patternBeatsLength = 4;
    PatternLayer instance = new PatternLayer();
    GenericScore score = new GenericScore();
    score.setTimeBehavior(SoundObject.TIME_BEHAVIOR_NONE);
    score.setText("i1 0 .25 1 2\ni1 1 .25 1 2");
    instance.setSoundObject(score);
    instance.getPatternData().setPattern(0, true);
    instance.getPatternData().setPattern(1, true);
    instance.getPatternData().setPattern(2, true);
    NoteList result = instance.generateForCSD(compileData, startTime, endTime, patternBeatsLength);
    System.out.println(result.toString());
    assertEquals(6, result.size());
    assertEquals("1.0", result.get(1).getPField(2));
    assertEquals("8.0", result.get(4).getPField(2));
    result = instance.generateForCSD(compileData, 4.0f, endTime, patternBeatsLength);
    assertEquals(4, result.size());
}
Also used : NoteList(blue.soundObject.NoteList) GenericScore(blue.soundObject.GenericScore) CompileData(blue.CompileData)

Example 4 with CompileData

use of blue.CompileData in project blue by kunstmusik.

the class PatternsLayerGroupTest method testGenerateForCSD.

/**
 * Test of generateForCSD method, of class PatternsLayerGroup.
 */
@Test
public void testGenerateForCSD() throws ScoreGenerationException {
    CompileData compileData = null;
    float startTime = 4.0F;
    float endTime = 0.0F;
    PatternsLayerGroup instance = new PatternsLayerGroup();
    int patternBeatsLength = 4;
    instance.newLayerAt(-1);
    PatternLayer patternLayer = instance.get(0);
    GenericScore score = new GenericScore();
    score.setTimeBehavior(SoundObject.TIME_BEHAVIOR_NONE);
    score.setText("i1 0 .25 1 2\ni1 1 .25 1 2");
    patternLayer.setSoundObject(score);
    patternLayer.getPatternData().setPattern(0, true);
    patternLayer.getPatternData().setPattern(1, true);
    patternLayer.getPatternData().setPattern(2, true);
    NoteList result = instance.generateForCSD(compileData, startTime, endTime, false);
    assertEquals(4, result.size());
    assertEquals("1.0", result.get(1).getPField(2));
    assertEquals("5.0", result.get(3).getPField(2));
}
Also used : NoteList(blue.soundObject.NoteList) GenericScore(blue.soundObject.GenericScore) CompileData(blue.CompileData)

Example 5 with CompileData

use of blue.CompileData 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)

Aggregations

CompileData (blue.CompileData)7 NoteList (blue.soundObject.NoteList)6 OpcodeList (blue.udo.OpcodeList)4 Arrangement (blue.Arrangement)3 GlobalOrcSco (blue.GlobalOrcSco)3 Tables (blue.Tables)3 ParameterNameManager (blue.automation.ParameterNameManager)2 LinePoint (blue.components.lines.LinePoint)2 Mixer (blue.mixer.Mixer)2 TempoMapper (blue.noteProcessor.TempoMapper)2 GenericInstrument (blue.orchestra.GenericInstrument)2 Instrument (blue.orchestra.Instrument)2 StringChannel (blue.orchestra.blueSynthBuilder.StringChannel)2 StringChannelNameManager (blue.orchestra.blueSynthBuilder.StringChannelNameManager)2 CsdRenderResult (blue.services.render.CsdRenderResult)2 GenericScore (blue.soundObject.GenericScore)2 ArrayList (java.util.ArrayList)2 StrBuilder (org.apache.commons.lang3.text.StrBuilder)2 BlueData (blue.BlueData)1 Parameter (blue.automation.Parameter)1