我在Linux下使用JACK MIDI的应用程序。它在32位机器上运行得很好,但在我的新机器上,这是64位,我总是会丢失事件。
我查了一下:
jack_ringbuffer_read
的值,它们都可以(有效的2-3个字节的MIDI信息); midi_out_port
和client
,它们可以(非空)并出现在我的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;
}
可能有什么问题?
谢谢,
答案 0 :(得分:2)
奇怪的是JACK(最新版本)正在发送所有midi事件,但jack_midi_get_lost_event_count
总是返回我1.只是忽略它,现在我的代码正在运行。
这仍然不会发生在32位,但无论如何现在它正在发挥作用。