2

LinuxでJACKMIDIを使用するアプリケーションがあります。32ビットマシンでは完全に機能しますが、64ビットの新しいマシンでは常にイベント損失が発生します。

私がチェックしました:

  • からの値jack_ringbuffer_read、それらはOKです(有効な2〜3バイトのMIDIメッセージ)。
  • midi_out_portそしてclient、それらはOK(null以外)であり、私の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;
}

何が悪いのでしょうか?

ありがとう、

4

1 に答える 1

2

不思議なことに、JACK (最終バージョン) はすべての midi イベントを正しく送信しjack_midi_get_lost_event_countていますが、常に 1 を返しています。それを無視しただけで、私のコードは機能しています。まだこれは 32 ビットでは発生しませんが、とにかく動作しています。

于 2011-07-04T11:57:48.100 に答える