2011-06-27 10 views
2

LinuxでJACK MIDIを使用するアプリケーションがあります。 32ビットマシンでは完全に動作しますが、64ビットの新しいマシンでは、常にイベントロスが発生します。JACK MIDIイベントが64ビットマシンで失われました

は、私がチェック:

  • jack_ringbuffer_readから来る、彼らはOK(有効2-3バイトのMIDIメッセージ)です。
  • midi_out_portclientは、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; 
} 

間違っている可能性がありますか?

おかげで、

答えて

2

不思議JACK(最後のバージョン)は、右のすべてのMIDIイベントを送信しているが、jack_midi_get_lost_event_countは常に1がちょうどそれを無視して、今私のコードが動作している私を返しています。 まだこれは32ビットでは起こりませんが、とにかく今は動作しています。

関連する問題