Ejemplo n.º 1
0
	void Proc::trace(const Trace &trace) {
		if (!interactive_) {
			return;
		}

		Word num = trace.size();

		writeTrace(wrapTraceData(t_));
		writeTrace(wrapTraceData(num));

		for (Trace::const_iterator i = trace.begin(); i != trace.end(); ++i) {
			Word portNum = i->first;

			writeTrace(wrapTraceData(portNum));
			writeTrace(wrapTraceData(i->second));
		}
	}
Ejemplo n.º 2
0
	void Proc::openTrace() {
		if (!interactive_) {
			return;
		}

		std::ostringstream scenarioIdStream;
		scenarioIdStream << scenarioId_;
		std::string traceFn = "trace" + scenarioIdStream.str() + ".osf";

		trace_ = std::fopen(traceFn.c_str(), "w");

		assert(trace_ != NULL);

		writeTrace(wrapTraceData(magicId));
		writeTrace(wrapTraceData(teamId));
		writeTrace(wrapTraceData(scenarioId_));

		Trace trc = Trace();

		trc.push_back(PortAction(scenarioInPort, scenarioId_));

		trace(trc);
	}
Ejemplo n.º 3
0
//==============================================================================
RemoteGoatVstAudioProcessor::RemoteGoatVstAudioProcessor()
{
	writeTrace("Goat Trace!");

	_repaintTimer = new RepaintTimer(this);

	for (const String& sampleName : SAMPLE_NAMES)
	{
		_samples[sampleName] = Sample(this, sampleName);
	}

	_filesystemTimer = new FilesystemTimer(this);

	for (int i = 0; i < SAMPLE_NAMES_COUNT; ++i)
		_noteNumberSampleNameMap[i] = SAMPLE_NAMES[i];
}
int main(int argc, char** argv)
{
    char *inputFile;
    char *traceFileName = NULL;
    int len;

    if (parseOptions(argc, argv) || argc - optind != 2) {
        fprintf(stderr, "Usage: %s [-v version] input_file trace_prefix\n",
                argv[0]);
        exit(1);
    }

    inputFile = argv[optind++];
    parseInputFile(inputFile);
    traceFileName = argv[optind++];

    writeTrace(traceFileName);

    return 0;
}
Ejemplo n.º 5
0
AudioProcessorEditor* RemoteGoatVstAudioProcessor::createEditor()
{
	writeTrace("Create editor");
	return new RemoteGoatVstAudioProcessorEditor(this);
}
Ejemplo n.º 6
0
void RemoteGoatVstAudioProcessor::processBlock(AudioSampleBuffer& buffer, MidiBuffer& midiMessages)
{
	//if (!midiMessages.isEmpty())
	//{
	//	String trace;
	//	trace << "MIDI:";
	//	for (int i = 0; i < midiMessages.data.size(); ++i)
	//	{
	//		trace << String::formatted(" %02X", midiMessages.data[i]);
	//	}
	//	writeTrace(trace);
	//}

	// For each sample name,
	// a sorted collection of "note on" event sample positions.
	std::map<String, std::set<std::pair<int, bool>>> noteOnSets;

	MidiBuffer::Iterator it(midiMessages);
	MidiMessage midiMessage;
	int samplePosition;
	while (it.getNextEvent(midiMessage, samplePosition))
	{
		// Check note number, map to sample name.
		int note = midiMessage.getNoteNumber();
		auto itt = _noteNumberSampleNameMap.find(note);
		if (itt != _noteNumberSampleNameMap.end())
		{
			String sampleName = itt->second;

			if (midiMessage.isNoteOn())
				// Save note on sample position for sample.
				noteOnSets[sampleName].insert(std::make_pair(samplePosition, true));
			else if (midiMessage.isNoteOff())
				noteOnSets[sampleName].insert(std::make_pair(samplePosition, false));
		}
	}

	midiMessages.clear();

	buffer.clear(0, 0, buffer.getNumSamples());
	buffer.clear(1, 0, buffer.getNumSamples());

	for (auto& samplePair : _samples)
	{
		Sample& sample = samplePair.second;
		auto noteOnSetsIterator = noteOnSets.find(sample.getName());
		if (noteOnSetsIterator != noteOnSets.end())
		{
			const std::set<std::pair<int, bool>>& noteOns = noteOnSetsIterator->second;
			int offset = noteOns.begin()->first;
			sample.read(buffer, 0, offset, false);
			for (auto noteOnIterator = noteOns.begin(); noteOnIterator != noteOns.end(); ++noteOnIterator)
			{
				int noteOn = noteOnIterator->first;
				bool onOrOff = noteOnIterator->second;
				writeTrace(String() << "Triggered " << sample.getName() + " (" << (int)onOrOff << ")");
				auto nextNoteOnIterator = noteOnIterator;
				++nextNoteOnIterator;
				if (nextNoteOnIterator != noteOns.end())
				{
					int nextNoteOn = nextNoteOnIterator->first;
					int diff = nextNoteOn - noteOn;
					if (onOrOff)
						sample.read(buffer, offset, diff, true);
					else
						sample.noteOff();
					offset += diff;
				}
				else
				{
					if (onOrOff)
						sample.read(buffer, offset, buffer.getNumSamples() - offset, true);
					else
						sample.noteOff();
				}
			}
		}
		else
		{
			sample.read(buffer, 0, buffer.getNumSamples(), false);
		}
	}
}