Все записи
13:18  /  14.05.15

1336просмотров

Покаяние

+T -
Поделиться:

Каюсь... Временно променял писанину про Козла и Примуса на С++ писанину миди-синтезатора вокала:

:-) Цитата из нового романа:============================================================================

void MIDITrackPreview::PresetTrackElementsFromMIDISequence(){    int EventsNum = TrackMIDISequence->getNumEvents();    int note = 0;    lowNoteKey = 127; highNoteKey = 0;    uint8 vel = 0; uint8 minVel = 127; uint8 maxVel = 0;    double noteStart, noteEnd;    MidiMessage msg;    MidiMessageSequence::MidiEventHolder* mh;    //Extract for draw:    int indexNoteUp = -1;    for (int i = 0; i < EventsNum; ++i)    {        mh = TrackMIDISequence->getEventPointer(i); msg = mh->message;        if (msg.isTrackNameEvent())        {            TrackName = msg.getTextFromTextMetaEvent();        }        else if (msg.isNoteOn())        {            mNote* newNote = new mNote();            MIDICh = msg.getChannel();            newNote->midiChannel = MIDICh;            note = msg.getNoteNumber();            noteStart = msg.getTimeStamp();            indexNoteUp = TrackMIDISequence->getIndexOfMatchingKeyUp(i);            if (indexNoteUp > -1)            {                //arrNotesStart.add(noteStart);                newNote->noteStart = noteStart;                //arrNotesKeys.add(note);                newNote->nKey = note;                lowNoteKey = jmin(note, lowNoteKey);                highNoteKey = jmax(note, highNoteKey);                vel = msg.getVelocity();                //arrVelocity.add(vel);                newNote->nVelocity = vel;                minVel = jmin(vel, minVel);                maxVel = jmax(vel, maxVel);                mh = TrackMIDISequence->getEventPointer(indexNoteUp); msg = mh->message;                noteEnd = msg.getTimeStamp();                newNote->noteEnd = noteEnd;                //arrNotesEnd.add(noteEnd);                arrMidiNotes.add(newNote);            }            newNote = nullptr;        }    }    String notesNames = "(" + msg.getMidiNoteName(lowNoteKey, true, true, 5) + "..." + msg.getMidiNoteName(highNoteKey, true, true, 5) + ")"; //4 = octave number for middle C    TrackInfo = "VOCAL TRACK::" + String(MIDITrackNum + 1) + ": " + TrackName                                + " Notes: " + String(arrMidiNotes.size()) //arrNotesStart.size()                                + " KeyRange: " + String(highNoteKey - lowNoteKey) + notesNames                                +" TPQ: " + String(TicksPerQuarter);