denemo-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Denemo-devel] Mixer for midi playback?


From: Richard Shann
Subject: Re: [Denemo-devel] Mixer for midi playback?
Date: Tue, 17 Feb 2009 12:01:13 +0000

On Tue, 2009-02-17 at 11:58 +0100, jerome chabod wrote:
> Hello,
>  
> What I miss in Denemo is a mixer feature for midi playback (ability to
> mute, solo or change volume for individual tracks). Is such a feature
> planned or maybe already implemented? If not, do you think it is worth
> spending some time on trying to implement something myself (I already
> know C and gtk)?
It would be really great if a C-coder could work on live MIDI out.
Jeremiah has got MIDI out via intermediate file working (I believe, I do
not have jackmidi in my distro). I don't know whether he has plans to
work on live MIDI but I am sure he would welcome extra manpower.
I wrote up how I think it could be done some while ago  (5 Jan 2009)- 
here it is what I wrote:

> What is meant [by MIDI out] is (at a minimum) to be able to point to a
> place in the
> score and have denemo promptly start outputting MIDI to libjack. The
> MIDI events it would output would correspond to the notes from the
> pointed place onwards in the score, including the prevailing
> dynamic/crescendo, midi instrument/channel (anything else? - embedded
> MIDI commands I guess). Notes that are hanging on at the given point
> would not be sounded (so if the given point just contained notes tied
> from previous notes, nothing would be heard until a new note started).
> The tempo would be a prevailing tempo at the note concerned (so we
> would
> allow an embedded MIDI command that would change the tempo).
> 
> The actual jackmidi connection is trivial, of course, and someone on
> #denemo came up with a sample
> http://trac.jackaudio.org/browser/trunk/jack/example-clients/midiseq.c
> which shows how to do that.
> It is not intended that the user should be allowed to edit the score
> while it is being played. So the value of the gui->changecount
> variable
> is fixed for any given playback.
> 
> What would require a little design is how to create the MIDI events
> from
> the denemo data. I think I have a good idea how to do this:
> An initialization stage would be good, partly to avoid excessive
> computation while playing & also for convenience of coding. So if this
> MIDI output system has not been initialized since the last edit to the
> score the first thing that happens is INITIALIZATION: this creates a
> list of MIDI events, with links from the notes in the score to first
> event that that note triggers. (As mentioned notes that are tied to
> earlier notes have no MIDI event).
[creating a MIDI event from the Denemo objects is something for which
code already exists (for writing to file)]

> On requesting playback from a given note, the MIDI events are simply
> shovelled out to jackmidi.
> There are some extras that are easily incorporated - silencing staffs
> etc. but the real work is the INITIALIZATION task.
> 
> I think it can be done as follows:
>         INITIALIZATION: run a special version of exportmidi.c which
> instead of
> writing to a file creates a list (GList* midi_events in the
> DenemoScore
> structure) of MIDI events, putting a link from each note (etc) to the
> MIDI event which it causes.
> 
> To determine if INTIALIZATION is needed, we need to set a variable
> (gui->midichangecount) that is set to the gui->changecount when
> INITIALIZATION is run, so that if the comparison
> midichangecount==changecount fails when the play request is received
> we
> know INITIALIZATION is needed again.
> 

This may be too cryptic - but the gist is that we need the basic wiring
up to be done first, and then we could add DenemoDirectives to
mute/change track or whatever you can do with MIDI (MIDI is not my
field).

> Another feature I miss is the zooming function. I don't think I can
> help there, but I have seen something is planned.
??? zooming the Denemo display is quite a long way off, if it is
reasonably possible, which I am not sure it is. The print-preview is,
however, being developed (and may be able to meet your needs?)

Richard






reply via email to

[Prev in Thread] Current Thread [Next in Thread]