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

Posted

技术标签:

【中文标题】JACK midi 事件在 64 位机器上丢失【英文标题】:JACK midi events lost on 64 bit machines 【发布时间】:2011-09-23 04:19:10 【问题描述】:

我有一个在 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】:

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

【讨论】:

以上是关于JACK midi 事件在 64 位机器上丢失的主要内容,如果未能解决你的问题,请参考以下文章

在 64 位机器上捕获的 32 位进程的调试转储

交叉编译:检查是不是可以在 64 位机器上构建 32 位

在 64 位机器上注册 C++ DLL

在 64 位机器上 QWORD 的大小是多少?

在 64 位机器上,我可以安全地并行处理 64 位四字的各个字节吗?

__int64 在 32 位机器上?