2 Copyright (C) 2010 Devin Anderson
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU Lesser General Public License as published by
6 the Free Software Foundation; either version 2.1 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU Lesser General Public License for more details.
14 You should have received a copy of the GNU Lesser General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 #include "JackEngineControl.h"
21 #include "JackFrameTimer.h"
22 #include "JackGlobals.h"
23 #include "JackMidiUtil.h"
27 Jack::ApplyRunningStatus(size_t *size
, jack_midi_data_t
**buffer
,
28 jack_midi_data_t running_status
)
31 // Stolen and modified from alsa/midi_pack.h
33 jack_midi_data_t status
= **buffer
;
34 if ((status
>= 0x80) && (status
< 0xf0)) {
35 if (status
== running_status
) {
39 running_status
= status
;
41 } else if (status
< 0xf8) {
44 return running_status
;
48 Jack::ApplyRunningStatus(jack_midi_event_t
*event
,
49 jack_midi_data_t running_status
)
51 return ApplyRunningStatus(&(event
->size
), &(event
->buffer
),
56 Jack::GetCurrentFrame()
58 jack_time_t time
= GetMicroSeconds();
59 JackEngineControl
*control
= GetEngineControl();
61 control
->ReadFrameTime(&timer
);
62 return timer
.Time2Frames(time
, control
->fBufferSize
);
66 Jack::GetFramesFromTime(jack_time_t time
)
68 JackEngineControl
* control
= GetEngineControl();
70 control
->ReadFrameTime(&timer
);
71 return timer
.Time2Frames(time
, control
->fBufferSize
);
77 return GetEngineControl()->fFrameTimer
.ReadCurrentState()->CurFrame();
81 Jack::GetMessageLength(jack_midi_data_t status_byte
)
83 switch (status_byte
& 0xf0) {
94 switch (status_byte
) {
115 Jack::GetTimeFromFrames(jack_nframes_t frames
)
117 JackEngineControl
* control
= GetEngineControl();
119 control
->ReadFrameTime(&timer
);
120 return timer
.Frames2Time(frames
, control
->fBufferSize
);