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

标签 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;
}

可能出了什么问题?

谢谢,

最佳答案

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

关于linux - JACK midi 事件在 64 位机器上丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6487675/

相关文章:

c++ - CPP Linux : about rdtsc

linux - Android 开发人员工具 (ADT) 安装在未以 sudo 运行时会出现 GTK 错误

c - 当我运行它时,此代码不执行任何操作。为什么?

x86 - 我可以在x64 WIN7上同时安装x86/x64 windbg吗?

svn - 带有 32 位服务器和 32/64 位客户端的 Subversion

arrays - Bash 脚本和 gdal - 如何引用数组变量中的元素?

c++ - 在 Ubuntu 17.04 x64 下使用 SpiderMonkey (libmozjs-45.0.2) 的段错误

c# - .NET Core 3.1 控制台应用程序将无法在 Windows 7 上运行

Java Keytool jdk/jre 64/32bit - 有区别吗?

ios - 显式函数原型(prototype) | ios 64位架构