denemo-devel
[Top][All Lists]
Advanced

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

Re: [Denemo-devel] GSoC proposal to improve MIDI and audio capabilities


From: Dominic Sacré
Subject: Re: [Denemo-devel] GSoC proposal to improve MIDI and audio capabilities
Date: Mon, 11 Apr 2011 01:31:53 +0200
User-agent: KMail/1.13.5 (Linux/2.6.32-31-generic; KDE/4.4.5; i686; ; )

Hi Richard,

On Thursday 07 April 2011 18:45:58 Richard Shann wrote:
> On Thu, 2011-04-07 at 15:07 +0200, Dominic Sacré wrote:
> > I didn't mean to imply that Denemo is full of broken features, just
> > that my proposal is mainly about restructuring and cleanup, not
> > about removing things.
> 
> yes, I didn't take offence, I understood that, my question is would
> the re-structuring you propose allow the adjustment of the MIDI
> timing during feedback, as exemplified by the Tempo slider. That is
> if you could describe the sequence of events that would happen when
> someone moves the tempo slider during playback then I would be more
> confident that we weren't getting ourselves into a trap.

I'm not sure if I can describe the sequence of events that would happen, 
as I'm still struggling to understand how the current codebase works, or 
more importantly why it was written the way it is.
What I can tell you is that things like the tempo slider would just keep 
working like they do now. With the changes I'm proposing, during 
playback all MIDI events would still be read one by one from the SMF 
structure (see fluidsynth_play_smf_event() and 
jackmidi_play_smf_event()). The difference would just be that currently 
it's up to FluidSynth to create its own output ports (or access the 
soundcard, depending on the underlying audio API), while I'm proposing 
to do that by ourselves in Denemo. Nevertheless, the way MIDI events are 
fed from the SMF structure to the FluidSynth engine would remain more or 
less the same.

That said, there's of course also the timing issue that Philipp 
described. Now that I'm thinking about it, this is probably what 
prompted the suggestion of "making midi/audio output realtime-capable" 
as a GSoC project. Having written some JACK clients I automatically read 
that as "make JACK support realtime-safe", but bad MIDI timing is 
actually a different issue that has nothing to do with realtime-safety 
per se.

As far as I can see, both the FluidSynth and JACK MIDI backends use 
g_idle_add() to queue MIDI events for playback. It's pretty obvious that 
timing-wise this is a terrible idea. Could anyone explain why the code 
was written that way?
A proper multi-threaded model seems to be the way to solve this, and 
again, Philipp explained this much better than I did (in fact, I didn't 
mention in at all...). I still believe the best approach is to tackle 
all these problems at once in one major overhaul.

> > It has also been suggested that audio input is only semi-usable
> 
> I use it every week to tune my harpsichord. But I have not heard
> reports of people using it for inputting notes to Denemo - it
> certainly still does that - due to noises in the room I usually get
> a few notes inserted before I hit the Tuning button - but it will
> surely have some bit rot by now - it has lots of fancy pattern
> following features ... (I got a MIDI keyboard a couple of years ago
> and have never looked back).
> 
> > and
> > should not be a high priority. I'm not so sure about that, and
> > would rather fix it than remove it, as it's a pretty nifty
> > feature. Incidentally, I haven't been able to test it yet. At the
> > moment all my usable hardware audio inputs are JACK-only
> > (firewire), and audio input in Denemo only works with PortAudio.
> > Did I mention I was planning to fix that? ;)
> 
> yes you did, and I only mentioned that if you needed to cut corners
> to achieve the goal audio input could be left untouched, it would
> not break anything and would not be broken if it was left untouched.

Fortunately, removing the PortAudio dependency from the audio input code 
doesn't look very difficult. It may even be easier to just do that, 
rather than working around this part of the code just to be able to 
leave it untouched, while the rest of the audio/MIDI I/O code is turned 
upside down...

As for cutting corners, in the latest (final) version of my GSoC 
proposal I de-emphasized support for Windows and OS X. I wouldn't 
consider my work finished until those are supported (as they are now), 
but building and testing Denemo on all these different platforms is a 
can of worms I'd rather not open while I'm on such a tight schedule.


Best regards,

Dominic



reply via email to

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