Hey guys!
As the title implies I'm a JUCE newbie. This is my first time using it, and I'm only using the audio-basics library so I can read in MIDI files and convert them into a beat map for a music game I'm developing as part of a senior project in college.
When I exit my application right now, I hit a breakpoint and am informed of the following via VS2012's output window:
*** Leaked objects detected: 69 instance(s) of class MidiEventHolder JUCE Assertion failure in juce_leakedobjectdetector.h:95
The code where these 69 instances are:
std::vector<NoteGem*> MIDIManager::parseTrack(const char* filename)
{
juce::MidiFile* midi_file = new juce::MidiFile();
juce::File midi_source_file = juce::File::getCurrentWorkingDirectory().getChildFile(filename);
juce::FileInputStream* midi_source = new juce::FileInputStream(midi_source_file);
if (midi_file->readFrom(*midi_source))
{
const juce::MidiMessageSequence* note_track = midi_file->getTrack(0);
std::vector<juce::MidiMessageSequence::MidiEventHolder*> midi_events;
int num_events = note_track->getNumEvents();
std::cout << "Number of Events:: " << num_events << '\n';
for (int i = 0; i < num_events; i++)
{
midi_events.push_back(note_track->getEventPointer(i));
}
std::vector<NoteGem*> note_gems;
for (int j = 0; j < num_events; j++)
{
std::cout << "MIDIManager::ParseTrack() Note Info:\n"
<< "Note On?:: " << midi_events[j]->message.isNoteOn() << '\n'
<< "Timestamp:: " << midi_events[j]->message.getTimeStamp() << '\n'
<< "Note Number:: " << midi_events[j]->message.getNoteNumber() << '\n';
if (midi_events[j]->message.isNoteOn())
{
NoteGem* note;
switch(midi_events[j]->message.getNoteNumber())
{
case 72:
note = new Tap(A, midi_events[j]->message.getTimeStamp());
note_gems.push_back(note);
break;
case 73:
note = new Tap(B, midi_events[j]->message.getTimeStamp());
note_gems.push_back(note);
break;
case 74:
note = new Tap(X, midi_events[j]->message.getTimeStamp());
note_gems.push_back(note);
break;
};
}
}
return note_gems;
}
else
{
std::cout << "MIDIManager::ParseTrack() Error: MIDI File not read!\n";
std::vector<NoteGem*> empty_events;
return empty_events;
}
}
I'm guessing there's some sort of clean up after I've gotten the information I need. But I'm not sure what that would entail in this case. Any help would be appreciated, and apologies if this is a stupid question.
Thanks!
