JACK midi事件在64位机器上丢失了

时间:2011-06-27 00:31:21

标签: linux 64-bit 32bit-64bit x86-64 jack

我在Linux下使用JACK MIDI的应用程序。它在32位机器上运行得很好,但在我的新机器上,这是64位,我总是会丢失事件。

我查了一下:

  • 来自jack_ringbuffer_read的值,它们都可以(有效的2-3个字节的MIDI信息);
  • midi_out_portclient,它们可以(非空)并出现在我的JACK端口列表中;

以下是代码的一部分:

#define MidiMessageSize 3

jack_client_t* client;
jack_port_t* midi_out_port;

char current_message[MidiMessageSize];

jack_ringbuffer_t* midi_rb;

int process (jack_nframes_t nframes, void *arg)
{
  void* output_buffer = jack_port_get_buffer(midi_out_port, nframes);

  jack_midi_clear_buffer(output_buffer);

  int read_space = jack_ringbuffer_read_space(midi_rb);

  if (read_space == 0) return 0;

  int i;

  for (i = 0; i < read_space; i += MidiMessageSize)
  {
    jack_ringbuffer_read(midi_rb, current_message, MidiMessageSize);
    jack_midi_event_write(output_buffer, i/MidiMessageSize,
               (jack_midi_data_t*)current_message, MidiMessageSize);
    if (jack_midi_get_lost_event_count(midi_out_port)) {
      printf("Lost\n"); // I get here always
    }
  }  

  jack_ringbuffer_reset(midi_rb);

  return 0;
}

可能有什么问题?

谢谢,

1 个答案:

答案 0 :(得分:2)

奇怪的是JACK(最新版本)正在发送所有midi事件,但jack_midi_get_lost_event_count总是返回我1.只是忽略它,现在我的代码正在运行。 这仍然不会发生在32位,但无论如何现在它正在发挥作用。