Browse Source

Merge branch 'newer-midi'

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@4355 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.9.8
sletz 14 years ago
parent
commit
705058b04a
2 changed files with 37 additions and 10 deletions
  1. +10
    -9
      linux/alsarawmidi/JackALSARawMidiPort.cpp
  2. +27
    -1
      windows/winmme/JackWinMMEOutputPort.cpp

+ 10
- 9
linux/alsarawmidi/JackALSARawMidiPort.cpp View File

@@ -36,20 +36,20 @@ JackALSARawMidiPort::JackALSARawMidiPort(snd_rawmidi_info_t *info,
char device_id[32]; char device_id[32];
snprintf(device_id, sizeof(device_id), "hw:%d,%d,%d", card, device, snprintf(device_id, sizeof(device_id), "hw:%d,%d,%d", card, device,
subdevice); subdevice);
const char *alias_prefix;
const char *alias_suffix;
const char *error_message; const char *error_message;
snd_rawmidi_t **in; snd_rawmidi_t **in;
const char *name_prefix;
snd_rawmidi_t **out; snd_rawmidi_t **out;
const char *name_suffix;
if (snd_rawmidi_info_get_stream(info) == SND_RAWMIDI_STREAM_OUTPUT) { if (snd_rawmidi_info_get_stream(info) == SND_RAWMIDI_STREAM_OUTPUT) {
alias_prefix = "system:midi_playback_";
alias_suffix = "out";
in = 0; in = 0;
name_suffix = "out";
name_prefix = "system:midi_playback_";
out = &rawmidi; out = &rawmidi;
} else { } else {
alias_prefix = "system:midi_capture_";
alias_suffix = "in";
in = &rawmidi; in = &rawmidi;
name_suffix = "in";
name_prefix = "system:midi_capture_";
out = 0; out = 0;
} }
const char *func; const char *func;
@@ -113,9 +113,10 @@ JackALSARawMidiPort::JackALSARawMidiPort(snd_rawmidi_info_t *info,
func = "CreateNonBlockingPipe"; func = "CreateNonBlockingPipe";
goto close; goto close;
} }
snprintf(alias, sizeof(alias), "%s%d", alias_prefix, index + 1);
snprintf(name, sizeof(name), "system:%d-%d %s %d %s", card + 1, device + 1,
snd_rawmidi_info_get_name(info), subdevice + 1, name_suffix);
snprintf(alias, sizeof(alias), "system:%d-%d %s %d %s", card + 1,
device + 1, snd_rawmidi_info_get_name(info), subdevice + 1,
alias_suffix);
snprintf(name, sizeof(name), "%s%d", name_prefix, index + 1);
this->io_mask = io_mask; this->io_mask = io_mask;
return; return;
free_params: free_params:


+ 27
- 1
windows/winmme/JackWinMMEOutputPort.cpp View File

@@ -145,16 +145,42 @@ JackWinMMEOutputPort::Execute()
LARGE_INTEGER due_time; LARGE_INTEGER due_time;


// 100 ns resolution // 100 ns resolution
due_time.QuadPart = - ((frame_time - current_time) * 10);
due_time.QuadPart =
-((LONGLONG) ((frame_time - current_time) * 10));
if (! SetWaitableTimer(timer, &due_time, 0, NULL, NULL, 0)) { if (! SetWaitableTimer(timer, &due_time, 0, NULL, NULL, 0)) {
WriteOSError("JackWinMMEOutputPort::Execute", WriteOSError("JackWinMMEOutputPort::Execute",
"ChangeTimerQueueTimer"); "ChangeTimerQueueTimer");
break; break;
} }


// Debugging code
jack_log("JackWinMMEOutputPort::Execute - waiting at %f for %f "
"milliseconds before sending message (current frame: %d, "
"send frame: %d)",
((double) current_time) / 1000.0,
((double) (frame_time - current_time)) / 1000.0,
GetFramesFromTime(current_time), event->time);
// End debugging code

if (! Wait(timer)) { if (! Wait(timer)) {
break; break;
} }

// Debugging code
jack_time_t wakeup_time = GetMicroSeconds();
jack_log("JackWinMMEOutputPort::Execute - woke up at %f.",
((double) wakeup_time) / 1000.0);
if (wakeup_time > frame_time) {
jack_log("JackWinMMEOutputPort::Execute - overslept by %f "
"milliseconds.",
((double) (wakeup_time - frame_time)) / 1000.0);
} else if (wakeup_time < frame_time) {
jack_log("JackWinMMEOutputPort::Execute - woke up %f "
"milliseconds too early.",
((double) (frame_time - wakeup_time)) / 1000.0);
}
// End debugging code

} }
jack_midi_data_t *data = event->buffer; jack_midi_data_t *data = event->buffer;
DWORD message = 0; DWORD message = 0;


Loading…
Cancel
Save