[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed)
From: |
Richard Shann |
Subject: |
Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed) |
Date: |
Mon, 14 Sep 2009 18:30:49 +0100 |
On Mon, 2009-09-14 at 11:57 -0500, Jeremiah Benham wrote:
> On Mon, 14 Sep 2009 16:51:23 +0100
> Richard Shann <address@hidden> wrote:
>
> > On Mon, 2009-09-14 at 14:39 +0100, Richard Shann wrote:
> > > There is some investigating still to do - why does it repeat noteon
> > > madly if no noteoff is given etc, but it seems usable. I don't
> > > understand all the stuff about nframes etc there is a loop which is
> > > is going thru
> > > for(n=0;n<nframes;n++){
> > > in send_midi_event which can only fire once - also i is just a
> > > synonym for 0 here...
> > >
> > OK, I have looked at this. The loop is spurious, and puts the noteon
> > message in multiple times, which is what you hear if your noteoff is
> > not scheduled for 44 seconds. The noteon is being put as having a
> > time n, by this
> >
> > buffer = jack_midi_event_reserve(port_buffers[i], n, 3);
> >
>
> I tried that but it did not work.
hmm, I have the duration reduced to 100ms though, so perhaps that is why
it is working for me. In fact I have the following now:
static void
send_midi_event(jack_nframes_t nframes){
unsigned char *buffer;
gint n;
void *port_buffer;
if (output_ports[0]){
port_buffer = jack_port_get_buffer(output_ports[0], nframes);
jack_midi_clear_buffer(port_buffer);
if (BufferEmpty==FALSE){
buffer = jack_midi_event_reserve(port_buffer, 0, 3);
if (buffer == NULL) {
warn_from_jack_thread_context("jack_midi_event_reserve failed, NOTE
LOST.");
return;
}
buffer[0] = global_midi_buffer[0];
buffer[1] = global_midi_buffer[1];
buffer[2] = global_midi_buffer[2];
BufferEmpty=TRUE;
warn_from_jack_thread_context("Setting TRUE\n");
}
}
}
This has the jack_midi_clear_buffer done regardless of whether we have
new data for it - if it still contains the old data that could explain
the repeated notes.
This is working fine for me - I haven't tried the 44 second note though.
Can you try this?
Richard
> Through trial and error I have only
> found that this works:
>
>
> static void
> send_midi_event(jack_nframes_t nframes){
> unsigned char *buffer;
> gint i=0;
>
> void *port_buffers[MAX_NUMBER_OF_TRACKS];
> if (global_midi_buffer[0] >=0){
> if (output_ports[i]){
> port_buffers[i] = jack_port_get_buffer(output_ports[i], nframes);
> jack_midi_clear_buffer(port_buffers[i]);
> buffer = jack_midi_event_reserve(port_buffers[i], 0, 3);
> buffer[0] = global_midi_buffer[0];
> buffer[1] = global_midi_buffer[1];
> buffer[2] = global_midi_buffer[2];
> global_midi_buffer[0] = 0;
> BufferEmpty=TRUE;
> }
> }
> }
>
> I have removed the loop even though it was not causing it. Was I
> believe was causing it was the BufferEmpty even though it was set to
> static volatile gboolean.
>
> > we only want to put it in at time 0.
> >
> > Shall I check something in along these lines?
>
> I would say no unless you have tested it and it works.
>
> Jeremiah
>
> > Richard
> >
> >
> >
> >
> > _______________________________________________
> > Denemo-devel mailing list
> > address@hidden
> > http://lists.gnu.org/mailman/listinfo/denemo-devel
>
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), (continued)
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Richard Shann, 2009/09/11
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Jeremiah Benham, 2009/09/12
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Richard Shann, 2009/09/12
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Richard Shann, 2009/09/14
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Jeremiah Benham, 2009/09/14
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Jeremiah Benham, 2009/09/14
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Richard Shann, 2009/09/14
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Richard Shann, 2009/09/14
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Richard Shann, 2009/09/14
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Jeremiah Benham, 2009/09/14
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed),
Richard Shann <=
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Jeremiah Benham, 2009/09/14
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Richard Shann, 2009/09/15
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Jeremiah Benham, 2009/09/15
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Jeremiah Benham, 2009/09/15
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Richard Shann, 2009/09/16
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Jeremiah Benham, 2009/09/16
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Richard Shann, 2009/09/16
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Jeremiah Benham, 2009/09/16
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Richard Shann, 2009/09/16
- Re: MIDI (was Re: [Denemo-devel] Anacrusis script needed), Jeremiah Benham, 2009/09/16