[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Denemo-devel] Jackmidi Status?
Re: [Denemo-devel] Jackmidi Status?
Fri, 28 Aug 2009 11:37:57 +0100
On Thu, 2009-08-27 at 16:52 -0500, Jeremiah Benham wrote:
> What is the status of jackmidi? What needs done? I have not kept up with
> this. Richard didn't you say you had real time output working.
hmm, IIRC what I did was to create the smf structures with links from
each DenemoObject to the smf event(s) it gives rise to (in fact, did I
create a list of smf events in each DenemoObject? I think I would have,
only that would make sense).
AFAIK there are currently several ways noises can come out of Denemo:
Sounds made when a note is entered
* if the open of /dev/sequencer has succeeded a midi message is
generated by some hard-wired code and sent to that device
* otherwise a tone is generated from evaluating sin() function and
via to portaudio routines [audiocapture.c]
Sounds made by hitting Play
* if built with JACK midi data is generated for the whole (?)
movement (cached) as smf_tracks/smf_events and then the
smf_events are sent to the jack ports, starting with the one
attached to the current DenemoObject [exportmidi.c, jackmidi.c]
* if not built with JACK the smf midi data is generated for the
selection and written to disk as a MIDI file. Then an external
MIDI player is spawned with the filename [exportmidi.c,
Sounds made by entering a duration (audible feedback checked)
* tone generated from evaluating sin() function and via to
portaudio routines [audiocapture.c]
* no other code is currently wired to this, I suspect.
* There is an option under the Playback menu called CSound
playback. I have never tried it.
* The gdk_beep() function is called (e.g. on measure change with
audible feedback checked), this operates a built-in speaker
usually (O/S dependent action).
I have just pasted the above onto the denemo.org website as it occurs to
me that we could start collecting together our understanding of how
Denemo is working.
So, I think it is a trivial step to do functions that
* creation of the MIDI data (the smf_events attached to objects)
without going on to playback (ie just a cut down version of the
current playback function)
* outputting the MIDI data of the DenemoObject at the cursor
The last one may not be quite trivial, e.g. for cases such as tied notes
- you might just get the noteon without the noteoff. And then there
would be "play everything that starts at the time the current object
starts" command, which again might be quite trivial.
I am fairly sure I haven't done these. However, the other day I had a
few moments to spare and thought I would finish off the lyrics, actually
printing multiple verses in LilyPond, so I opened up exportlilypond.c
and found the code already there. I suppose it was me wot did it.
What I think you may remember me writing was that I had got real time
input working. I.E. The response of the MIDI via direct reading
of /dev/midi1 up to the standard of the input via JACK, just by tweaking
the rate of checking for new data. The upshot is that for my purposes I
can just startup denemo without jack and transcribe a piece of music
using the pc-keyboard for entering rhythms the MIDI keyboard for
entering pitches and listening to the result by spawning timidity.
Before, the MIDI-in would miss notes if I played in too fast. But if it
was something else, dig out the email and remind me!
But this is not to say that I don't have any interest in the jack
possibilities - this idea that you can add information to a score to
produce an output that has actual musical merit - could be used for a
film score etc - is intriguing.
> Where is this code. I looked at jackmidi.c and it did not pop out to me.
> The reason I ask was becuase I was going to work on some ear training
> and thought the current portaudio output does not really sound very good for
> doing ear training.
Yes, I agree, sine waves are not entirely relevant to the question of
listening to, and judging, the pitch of real instruments. Especially
judging the intervals in chords. And it would be so easy to do much
better. I think it is just a matter of #if JACK send
currentobject->smf_event to jack midi port. #endif
> Denemo-devel mailing list