Important message! Free Software under attack! See News

Non News

Linux Audio is Dead

In early 2020, most of the world was concerned with matters of great import, myself included. But three men, Filipe Coelho, David Runge, and Nils Hilbrect had more trivial things on their minds. At this time they came to me, not announcing themselves as a formal alliance, but pretending to be separate, disconnected parties suddenly showing up all at once. Each one had a list of demands for changes that I should make to NSM. I responded politely to each of these demands in turn, inquiring about why they believed them to be necessary, important, or appropriate, and I offered detailed explanations as to how they were not. They refused to participate in a discourse and reiterated their demands. I asked them why, if these trivial matters were so important to them, did they come to me with demands instead of patches to contribute? They became irate and threatened to fork my project. But of course, because they apparently lacked either the skill or the intention to make the changes themselves (as contributions), I didn't take this threat seriously, as creating a fork would require them to actually do something.

A short while later a "new" project was excitedly announced by this three-man team, on the Linux Audio Announce mailing list. This project claimed to be a "community version" of Non Session Manager and was now "Free software, free of ads and spyware." Very bizarre statements for a supposed "fork" of an extant, actively maintained Free Software project like Non. Nowhere in this release announcement was there a justification for the fork. The name they chose, was "new session manager" as opposed to "non session manager", so they could keep the NSM acronym, and at the same time create the deceptive impression of "newness" or "recency", i..e that their version was the natural continuation of the real NSM or supplanted it somehow. In keeping the acronym, they kept the name of "nsmd" (the NSM daemon). This makes it impossible to install both NSM and fake-NSM at the same time, and it makes it difficult and confusing for distribution packagers as well. It also allowed Filipe Coelho to go all around the Internet telling people that he's the authority on NSM and dispensing a lot of false information about NSM with the neat little trick that when he says NSM he means fake-NSM (but his audience doesn't know that). He also took the time to publish many posts attacking me specifically by name, with slanderous remarks.

When I heard about the announcement, I contacted Filipe and asked him to post a retraction and desist with the deceptive naming. For nearly a year I continued to make the same request.

In early 2021, Filipe made a post to the Non mailing list which seemed conciliatory, and intimated that he would indeed submit relevant patches to the real NSM and work to clear up the mess he and his unethical friends created. This, however, turned out to be some kind of stunt and a couple of weeks later a new release of fake-NSM was announced with compatibility breaking changes, and, of course, no retraction, apology, or correction for the slander and deceptive practices.

At this point, knowing that the patches and reconciliation were not forthcoming, I went ahead with a release of Non that I had queued up.

After some beta-testing by other Non users, I attempted to post a release announcement along with project news, as usual, to the Linux Audio Announce mailing list. This post was rejected with a personalized taunting message. At this point I realized just how deep this little conspiracy went. I first assumed that Filipe Coelho was the list moderator, but it later turned out to be David Runge (the most sadistic of the three).

I immediately tried to get the post through to the Linux Audio Developer's mailing list, which I believed to be unmoderated and thought there was some chance of people seeing my announcement. The post did get through, but David Runge immediately followed it up by a post stating that he had banned me for life from the LAD mailing list (naturally), of which I had been a member in good standing for some 20 years.

Very soon there were 12 messages posted to the list on this topic, in support of my position (i.e. against the deceptive and abusive practices of Coelho, Runge, and Hilbrect).

At this point, David Runge posted a message saying that he had put the list on "emergency moderation" (also 'natch).

Then Filipe Coelho posted an uncontestable (because nobody else is allowed to post) defense, in which he continued to insult me while apologizing in half measure. There has yet to be a post to LAA correcting the previous slanderous remarks made in the earlier fake-NSM release announcements.

Clearly the adults have left the Linux Audio Consortium if these three are at the helm, and it truly appears that they are indeed the ultimate authorities at LAC.

This is as clear a case of misconduct, abuse of power, conflict of interest, etc. as there can be.

And to make matters worse, there is no technical reason for any of it, as I specifically designed NSM to be modular and extensible, designing in support for such things as alternative GUis. The whole affair appears to be purely motivated by malice and greed. And it's all able to be swept neatly under the rug because these three individuals control all of the channels of communication in the Linux Audio space (and probably also because few people care about this kind of thing until it happens to them).

I suggest that all developers of software for Linux Audio should go on strike until this gang resigns.

Release Announcement v1.3.0

Greetings, developers and users of Linux Audio of the old dispensation.

This message is to announce a new release of the Non suite containing
many changes, mostly fixes for rare bugs and theme improvements. The
release has come a bit sooner than I had planned due to changing
circumstances (I was undeceived regarding the possibility of there
being some patches forthcoming).

Just a friendly reminder, NSM stands for Non Session Manager. I am the
author, inventor, developer, and maintainer of NSM (Hi there NSM
fans!) There has been a lot of misleading information published about
NSM lately, and I don't want anyone to be deceived by it.

Some matters of note: due to frequent and continued abuse and
harassment, the GitHub issue tracker has been disabled. In light of
this, there is a new policy for bug reports/feature requests which has
been posted to the Non mailing list.

The aforementioned harassment has got me thinking about my long
history in Linux Audio, in a community that I once felt very much a
part of. I feel that there has been a sea change and the old guard is
less involved than they used to be (myself included) and the new
dispensation is a rather nasty and unfavorable one. I'm sure there are
many depressing reasons for this which I need not go into as they
extend far beyond the context of Linux Audio. Anyway, after reflecting
on how I was presently being treated, it occurred to me that it's
unlikely that I'm the only one, so I want to take a moment to offer my
thanks and pay my respects to the great men of Linux Audio.

To Fons Adriaensen: your work, particularly your LADSPA plugins and
Ambisonics tools has enabled and inspired my own work. The neatness
and low dependency count of your code is something we should all
aspire to. Your sage advice has always been helpful and
instructive.There is much I couldn't have done without you. Thank you.

To Paul Davis: By inventing JACK, you enabled not only me, but a whole
community/generation of developers to think in terms of cooperation
and interoperability rather than monolithism, competition, and
lock-in. Even though you may have lost interest in JACK yourself, I
will always be grateful for your contribution, no matter how badly
JACK is defaced by its present maintainers or undermined by those who
desire to take from you that seat of honor. Thank you.

To Dave Griffiths: Your unrestrained creativity and originality have
been truly inspiring to me, and your SpiralSynthModular and Pawfaliki
software have been directly useful to me. Nobody may have noticed, but
both the Non website and my personal blog run on heavily modified
versions of Pawfaliki. Your work deserves much more attention than it
gets. Thank you.

To Paul Nasca: ZynAddSubFX has been a near constant companion to me
throughout my time in Linux Audio. It is truly a masterpiece, and
exemplifies the same set of standards that I have tried to adhere to
in my own projects (fast, light, powerful). Thank you.

To J.P Mercury: Freewheeling was a stroke of brilliance and I'm sure I
only scratched the surface of what it could do. You are an
inspiration. Thank you.

To Mark McCurry: You have been an excellent and upstanding maintainer
of ZynAddSubFX and truly improved it over the years. Your dedication
to tooling and automation is exemplary---I don't know how you find the
time to work on the tooling so much and still make progress on the
project itself. I have very much enjoyed our conversations and have
felt privileged to be a contributor to ZynAddSubFX. I am also grateful
to you for your contributions to Non, chiefly the plugin frequency
response visualizer, which is a constant help to me in my work. You
have pushed the technology forward with RtOSC, and I hope to someday
integrate that stack into Non's OSC::Signal framework. What's more
you've been a friend, and friendly people are so very hard to find in
this world. Thank you.

To Harry van Harren: It was a great pleasure to provide to you
whatever mentorship that I could. Your youthful exuberance has always
been an inspiration to me. I was very pleased that you took some of
the ideas from FLTK/Non to heart and decided to take the path less
travelled in your projects rather than, as far more commonly happens,
taking the easy way out. I look forward to seeing more great
accomplishments from you in the future.

Thanks also goes out to Rui Capela, David Robillard, Nedko Arnaudov,
Bill Spitzak, Shawn Betts, all the authors of the precious LADSPA
plugins that are RT-safe and don't just blast and crash. While I may
have had disagreements with some of these men over technical or
philosophical matters, I have always respected them and their work and
appreciated the fact that we could disagree on some things, agree on
others, and still get the work done. I'm afraid that this level of
maturity now exists only in a culture past. I'm sure there are some
who were left out of this list unintentionally, and if so I apologize
for that oversight. Others were left out intentionally and I'm sure
they will know who they are and why they don't deserve to be included
in a list of honorable men.

On that note, despite the slanderous statements made recently by a
certain gang of thugs regarding NSM, I would like to formally clarify,
since they flatly refuse to do so, and state that NSM (nor any of my
software) has never contained ads or spyware, that it is indeed and
has always been Free Software, and that this gang, who purport to
represent this community, never offered to contribute to NSM or
participate in its development. The leader of this gang, Filipe
Coelho, has abused his position as a distro maintainer to attempt to
take over development of NSM and other projects which represent
critical subsystems in Linux Audio. This is quite obviously bad news
for the community (as all power/control is being concentrated in the
hands of obvious bad-actors). Who knows what will come of this, but I
doubt it will be good. For myself, this event together with the
campaign of harassment and abuse has put me in a position of being
very reluctant to publish my continuing development or to begin any
new free-software projects (for which I have many, many ideas),
knowing, as I now know, that the consequences for me will be wholly
negative. I hope this hasn't also been the experience of all of the
other developers that I mentioned. I know at least one of them has
been compensated well for his work, but I'm sure he had to put up with
plenty of abuse too. The others, I fear, have probably, like myself,
been repaid primarily with abuse.

I worry about us as a community and us as a culture when I see that we
act to stamp out creativity, invention, standards of quality, etc. To
the people who stand by and say nothing while this happens: what kind
of future will you have to look forward to? Linux Audio is already a
shrinking niche. We need more creativity and invention, not less. If
you keep punishing and abusing people for dedicating their lives to
giving you free stuff, then wherever are you going to get more free

I implore everyone to consider the effects of their inactions as well
as their actions, not only in this context but in life in general.

And a special message to Filipe Coelho, who has a made it something of
a personal mission to defame me and my work (and probably the work of
others I'm unaware of):

I forgive you. I forgive you for slandering me and my project. I
forgive you for making unreasonable demands of me. I forgive you for
not contributing code or documentation. I forgive you for harassing me
and encouraging others to do the same. I forgive you for never having
created anything that was useful to me, as I have clearly done
repeatedly for you. I forgive you for violating my friendship. I
forgive you for deceiving the LA community. I forgive you for creating
disruption, schism, and incompatibility in a sphere where there was
before (finally!) only harmony and unity. I sincerely hope that you
can one day find some source of joy in your life that does not involve
harming others, maybe even an original project of your own---something
that you could really take pride in.

My thanks goes to Olivier Humbert and John Rigg who were the two
people besides myself who contributed code for this release.

And to anyone who was thinking of submitting a patch to my project or
anyone else's, or who was thinking of donating, or just saying
"thanks," what are you waiting for? None of us lives forever, you
know. For every one "thank you" email this developer gets, he gets at
least a hundred insults. I have no idea whether or not that's a
typical figure, but it's probably in the same order of magnitude.

A brief interlude for the Parable of the Free Software Developer and
the Imposing Stranger (may the developers who read this know that they
are not alone in their trials, and may the users who read this take a
brief stroll in a developer's shoes).

A man builds a lodging house from the ground up with his own two
hands. One evening he is sitting in the house, in front of the
fireplace, enjoying the fruits of his labor, wondering if it was all
worthwhile---worth the broken leg, the battered thumb, the lost
comfort of the wife that left him---, when a stranger bursts through
the front door without knocking, bringing into the room with him a
small flurry of snowflakes.

"Hello?" the man says.

"There should be a window here," says the stranger, pointing at the
space above the fireplace.

The man is too baffled by this statement to ask the stranger why he
has barged into his house.

"But that's where the chimney is. I can't put a window there."

"You refuse to put in a window? A very impudent fellow you are. I've
seen houses that had a window just there. It was a mansion in the
hills, designed by an exceedingly famous and eccentric architect, and
was built by a crew of a hundred men in 20 days. If they could do it
so can you."

"I built this house myself, with my own two hands, and it took me 20
years. The best years of my life, they were---my very youth was spent
on this house. I put everything in its right place, including that
chimney and every brick in it! I like to sit here in front of the fire
and warm my tired old bones which still ache from my labors."

"Nevertheless, it would be better with a window there."

"But I explained to you, the chimney must go there. You can't have a
fireplace without a chimney; there would be nowhere for the smoke to

"That isn't my concern. Don't be difficult. A house simply isn't
worthwhile without a window over the fireplace. Why, I once saw a
mansion that---"

"---excuse me, but do these mansions have to do with me and my humble
lodging house? I don't need a window there and none of my guests have
ever needed one either. Furthermore, those mendicants over there
stitching up their robes were very grateful for this fire and that
hall to sleep in."

"I say! Won't you just make me a window?"

"By God! It's the dead of winter! Who needs a window now? And why
should I make a window for you in my own house? You, who neither offer
to help nor to pay for the work, and when there are other things in
need of attention like that spongy board in the floor over which
you're standing, or that drip in the corner of the loft whenever there
is a heavy rain?"

"Because, old man, I am the one who wants, and you are the one who
provides. This shabby little house that you built was meant to be a
delight for me---for my pleasure and enjoyment---, but I find it to be
a very shabby house indeed. That hideous chimney will surely have to
go. The window is only the beginning. I have many grand ideas for
improvements. Wheels on the eaves, a skating rink in the kitchen, a
king sized bed on the rooftop! I'm full of brilliant ideas. Why I've
just had another one: we'll turn the bathtub into one of those little
pissing imp fountains! What jolly fun! I've traveled the world and
seen many wondrous mansions built by eccentric and famous architects.
So surely I must know what is good and what isn't."

"And have you ever built a house yourself?"

"Why no."

"And have you ever seen a house being built?"

"Of course not, you old dolt!"

"Then what expertise do you have regarding the way that a house should be made?"

"Expertise is for doers like you. Doing is beneath me. I entertain
myself with the works of lesser beings. I'm an idea man, you see.
Ideas come to men like me, brilliant, inspired ideas, but not to men
such as yourself. An idea man doesn't trouble himself with petty
questions of how or why. He can't slow down, he's got too many grand
ideas for that! Now either you get to work, old man, or I'm going to
tell the whole world what a difficult little personality you have!
I'll tell them you violated the Code of Conduct (signed by yours
truly, natch). The Community owns this building, you are merely our
free labor. We owned it from the moment you opened the door, out of
your pathetic 'kindness' and 'goodwill' and let someone sleep here for
free. I saw the shingle on the door, with the silhouette of the Holy
Beast of the Resplendent Horns. This place is Community property,
mister. So what's it going to be? Will you make for me my pleasure

"I will not. It doesn't make sense. Everyone would freeze to death
without the fireplace and that chimney. What good is a house with a
pleasure window to a dead man? Nothing you say makes sense. It's as
though you're living in a dream, with no concept of the forethought
and effort that goes into such things as building houses. I know the
community. I feed the community. I shelter the community. I've never
turned away a man in need. And I've never seen your face before today,

"Difficult! Hard to work with! Totally unreasonable! I say! I'm
telling on you! You should have known what to expect when you built
this house and when you hung that shingle by the door pledging with a
sacred oath that you would accept all comers. By denying me my exalted
whims you have spurned me, old man, and for that you will be cursed.
The ruling is forthcoming. You shall rue this day!"

(This scene repeats the next night with a different imposing
stranger---sometimes alone and sometimes together in gangs---, and the
night after that, and forever thereafter, until the old man dies.)


When you look into your heart, which character in this story are you?
The old man who built the house? A kind young man who offers to help
him fix the leaky roof or to build a gazebo (these being too few and
far between to have appeared on this night)? The person who merely
accepts the kindness of a free meal and a warm bed without complaint?
One of the priests of the Order of the Holy Beast of the Resplendent
Horns? Or are you the imposing stranger whose existence consists of
delighting in the creations (and suffering) of others, whom he
considers beneath him?

Of course, as complex as human existence is, one might play each of
these roles in turn in life, or several simultaneously. The important
thing is to know what you're doing in the moment, and ask yourself,
will this bring peace and happiness, or will this bring grief and

Shortlog for this release

Jonathan Moore Liles (94):
      nonlib/OSC: Don't try to send feedback to non-existent path.
      Upgrade waf to 2.0.9
      Update NTK submodule.
      wscript: Fix install error caused by upgrade to waf 2.0.9.
      Upgrade waf to 2.0.18
      Mixer: Fix crash when closing project containing certain
configurations of modules.
      Session-manager: Work around for clients with stupidly large icons.
      Mixer: Tweak module colors. Show LADSPA plugins in a different color.
      Mixer: Show strip number at top of each strip (eases mentally
mapping onto hardware control surface).
      Sequencer: Save file to tmp file before overwriting original.
      Sequencer: Fix casting/sign related bug which could cause a hang
during SMF writing.
      Timeline: Tweak style of audio regions.
      Timeline: Tweak style of measure lines.
      Sequencer: Fix off-by-one bug preventing notes from being
inserted ahead of other notes.
      Sequencer: Fix configuration bug causing error message "Couldn't
open instrument directory".
      Timeline: Make clocks look more contrasty with light color scheme.
      Sequencer: Add some missing items to GM Drum note map.
      Mixer: Fix off by one bug in strip autoconnect affecting Auxes.
      Mixer: Remove superfluous semicolon.
      Mixer: Improve contrast with light color scheme.
      Mixer: Fix osc/midi by-number mode control for strips with names
containing punctuation and spaces.
      Mixer: Give better visual feedback in control OSC/MIDI learning mode.
      Sequencer: Tweak appearance to look better with different color schemes.
      Sequencer: Just use theme UP_BOX for note shape...
      Midi-Mapper: Don't get confused if user neglects to operate all
controls on the first run.
      Sequencer: Don't crash when user picks the branch instead of the
leaf in scale chooser.
      MIDI-Mapper: Preserve mapping creation order when
loading/saving. This makes it possible to fiddle controls in a defined
order and then edit the file to give them useful names.
      MIDI-Mapper: Require controls to be actuated/moved twice before
mapping signal in order to detect whether value has 14, 7 or 1
significant bits. Also, support non-motirzed faders/endless encoders
by not transmitting control change until value of controller comes
within 5% of value of signal. Also, change file format (backwards
compatible). Also, fix some issues with NRPN decoding.
      nonlib/MIDI: Cleanup some type signatures.
      Timeline: Improve error message for sf_open create.
      Timeline: Fix rare segfault which occurred when region loop
point is just beyond the end of a region and at the beginning of a
      Timeline: Redraw right hand child region on split.
      Mixer: Show strip number at top of each strip (eases mentally
mapping onto hardware control surface).
      Timeline: Tweak styling of selected regions.
      Mixer: Allow Mono Pan module to be added a stereo chain. This
converts the signal to mono and then pans the result. Useful for
auditioning a mix in mono.
      Mixer: Dezipper spatializer azimuth and elevation automation.
      Mixer: Make panner points more opaque.
      Sequencer: Fix bug in fitting scale to viewport.
      Mixer/Module_Parameter_Editor: Increase font sizes, tweak boxtypes.
      FL/Fl_Sometimes_Input: Allow user to abort edit with Escape key.
      Timeline,Mixer: Tweak colors for light themes.
      Mixer: Tweak meter appearance to look better with light color schemes.
      Mixer/Module_Parameter_Editor: Tweak slider appearance.
      Mixer/DPM: Quick hack to add smoothing to meter values.
      nonlib/OSC/Endpoint: Work around for liblo/UDP layer dropping
packets on bulk signal listing.
      Timeline: Split OSC send and receive functionality into different threads.
      Mixer: Tweak meter appearance.
      Mixer: Avoid some unnecessary redraws when opening project.
      Timeline: Add "Disabled" fade type to disable both fade and
declicking for cases where regions need to be abutted perfectly.
      Timeline: Don't forget to log changing takes after the fact.
      Mixer: Tweak meter appearance.
      Mixer: Tweak strip highlighting.
      Mixer/Module_Parameter_Editor: Tweak layout so that 4-Band
Parametric Filter plugin is more legible.
      Sequencer: Fix crash in event editor.
      Sequencer: Use a 3 break gradient for velocity colors.
      Mixer: Make meters more efficient.
      Mixer,Timeline: Fix port connection drag and drop between applications.
      Mixer: Tweak appearance.
      Timeline: Acquire sequence lock for region split.
      Mixer: Implement slow fall off for meters.
      Mixer: Fix crash when disabling strip auto output.
      Mixer: Fix crash if user messes with the window while project is loading.
      Timeline: Don't send the same OSC control sequence value twice
and so avoid messing with OSC learning in non-mixer when transport is
      Mixer: Try to better cope with parameter feedback feedback cycles.
      Timeline: fix crash when removing a track.
      dsp: code style tweak.
      wscript: Use -mtune=native by default for performance boost
benefiting those who build from source, packagers can disable.
      Mixer: Fix glitch in redrawing of meter scales when scrolling.
      Partially revert "Mixer: Avoid some unnecessary redraws when
opening project."
      Mixer: Fix settings menu layout issue.
      Mixer: Fix JACK port disconnection when Auto Input/Output mode is changed.
      Mixer: Automatically run in "noui" mode if DISPLAY environment
variable unset (i.e. X11 not available).
      Mixer: Make port autoconnection during startup and shutdown more
      Timeline: Don't assert if peakfile contains no blocks---it's
probably just because it was just opened and hasn't been written into
      Mixer: Because disconnecting/connecting JACK ports is slow, when
handling a change of strip auto input setting, avoid disconnecting a
port and then reconnecting it later.
      Mixer/DPM: Fix bug where peaks are sometimes not drawn.
      Mixer: Fix meter falloff in chain view.
      Mixer: fix size of SM blinker.
      Mixer: Fix crash on save after group removal.
      Mixer: Enforce stability of module OSC path over close/open cycles.
      Timeline: Fix rare issue where moving the mouse over a region
while recording at just the right moment could cause a spurious SET
action to be written to the history.
      Timeline: Fix region DND onto last track that was a connection DND source.
      Mixer: Re-transmit the minimum amount of OSC/MIDI feedback
messages when strips are rearranged.
      Update NTK.
      Mixer: Fix export strip function.
      Update NTK.
      Revert "Add 128x128 hicolor as possible icon path"
      Mixer: Cope with some plugins having insane numbers of parameters.
      Timeline: Tweak style of loop point indicator.
      Mixer: Avoid some unnecessary reallocations when changing channel count.
      Update NTK
      Bump versions.

Olivier Humbert (4):


Jonathan Moore Liles (10):
      Upgrade to waf 2.0.9.
      Upgrade waf to 2.0.18.
      Tweak themes for more color consistency.
      Workaround for zynaddsubfx.
      More theme tweaks.
      ntk-chtheme: Add new color scheme.  Save/restore selection color.
      Clean up some inconsistencies in themes.
      fl_contrast: Return FL_FOREGROUND or FL_BACKGROUND rather than
      Adjust color schemes.
      Tweak themes.

John Rigg (1):
      themes: Workaround for bug where a background color of RGB 0,0,0
in Black color scheme is sometimes drawn as green.

And just for kicks, here's the all time shortlog leaderboard. Keep
those PRs coming!

Jonathan Moore Liles (2068):
Nedko Arnaudov (4):
Olivier Humbert (4):
Roy Vegard Ovesen (4):
Robert Wruck (2):
Mathias Buhr (2):
Daniel Appelt (1):
Hanspeter Portner (1):
James Morris (1):
Juuso Alasuutari (1):
Peter Nelson (1):
Mark McCurry (1):
martin (1):
non25 (1):
John Rigg (1):

New icons and web design!

You're looking at it.

Release Announcement v1.1.0

Non DAW and Non Mixer 1.1.0 (now with NSM)

I'm pleased to announce the release of Non-DAW and Non-Mixer version 1.1.0. It's been a while since the last release. But, I assure you, the project is still alive and well.

This release includes a number of fixes and some minor improvements to the build system. The big changes are:

  • Enhancements to the spatialization controls (which are automatically provided for Ambisonics plugins).
  • Support for the Non Session Manager.
  • Enhancements to Control Sequences, OSC control signals can be sent from Non-DAW to Non-Mixer. These connections will be preserved in the session.
  • Non-Mixer accepts input for all Module/Plugin controls via OSC.
  • Non-Mixer can now import and export individual strips (including the chain of modules and all their parameters!) This allows a workflow on a higher level than presets.
  • Updated visual styles for both Non-Mixer and Non-DAW. The 'Flat' style has been greatly improved.
  • New knob styles for Non-Mixer and knob style is a configuration option rather than requiring editing the source.
  • New icons in an assortment of sizes.

Additionally, Non now supports a robust new session management protocol called NSM. A session management daemon is provided along with a graphical interface called Non-Session-Manager. NSM represents a significant leap forward for session management in Linux audio.

History of NSM

Way back in 2008, I became frustrated with the state of the art of session management on Linux (a situation which has improved only incrementally since that time). I ditched support for LASH, wrote a lengthy post about Non-DAW's session management requirements to the LAD mailing list, and started managing my sessions with shell scripts and jack_snapshot. This eventually evolved into a session manager written in Unix shell and using Unix FIFOs and regular files for client control/communication. This system of session management was tentatively called NASH (Non Audio Session Handler) and was never released. In 2010, shortly after the release of Non-Mixer, I devised a prototype version of the NSM OSC API and have been using it, still unreleased and in prototype form, since then. The 2010 implementation did not have a user interface and was controlled via shell scripts using the `send_osc` command included in the distribution. Then, in 2012 (4 years later!), I was contacted by an enthusiastic power-user regarding implementing OSC support in Non-Mixer. Since NSM uses OSC for server<->client communication, I already had much of the OSC work done and figured I might as well release it--and, while I was at it, NSM. I then endeavored to simplify and document the NSM API, discussing it at length with, and taking many suggestions from, Nedko Arnaudov, the LADISH author. After implementing the Non-Session-Manager FLTK GUI to control the session management daemon, a new release became inevitable.

Bullet Points for NSM:

  • Extremely fast and responsive control mechanism and user interface.
  • The only dependency for clients and server is an OSC library (I use liblo).
  • Smart clients are able to switch projects without restarting.
  • Clients can provide real-time status feedback to the server, and therefor the user.
  • The server stores all session data in per-session directories under a configurable session root.
  • Clients are forbidden to save or open files outside of the per-session directory.
  • The server provides simple template support in the form of whole-session duplication.
  • The Session management daemon is fully controllable via OSC.
  • Strict user interface guidelines for a uniform and predictable experience.
  • The abstract session management API has no architectural requirement for JACK, Xorg or any other subsystem (other than UDP networking). This means that both headless daemons and programs which are not JACK clients can be managed together in the same session.
  • A single session can be distributed across multiple machines on a network.
  • Multiple, independent, sessions can be opened on one machine at the same time.

More About the NSM API

The latest NSM API documentation can be found at:

NSM is included in the Non-DAW/Non-Mixer repository.

Ongoing and Future Development

Features that are in development for future releases include an auto-learning and graphically re-mappable JACK MIDI<->OSC gateway program tentatively named Non-OSC-MIDI-Mapper, which will simplify the connection of bidirectional control surfaces such as the BCF2000 to Non-Mixer. This program relies on Non's generic Control Signal layer on top of OSC. So it's not necessarily generally useful (although, in the future, it may be possible to use the `libmapper` library to provide the same functionality in a somewhat standard way).

LV2 support is a frequently asked question. For various reasons, I currently have no plans to host LV2 plugins in Non-Mixer. But if anyone can come up with a compelling argument for LV2, or name one existing (libre) LV2-only plugin which couldn't be ported to LADSPA in a few hours that I couldn't live without having in Non-Mixer--I'd love to hear about it.

I plan to re-factor Non-Sequencer to use the `nonlib` library common to Non-DAW and Non-Mixer. This will eliminate some duplicated code and allow for some of the user interface improvements seen in Non-DAW to be implemented for Non-Sequencer. It will also enable various forms of MIDI support in Non-DAW/Non-Mixer (it's not clear yet what forms this support might take.)

Similarly, by using nonlib, OSC will be available in Non-Sequencer, probably taking the form of OSC control for pattern triggers and possibly pattern input. Also, with NSM's 'broadcast' capability, the holy grail of a shared tempomap is closer than ever.

Another long-term goal for Non-Sequencer is to make the interface more compatible with touchscreen use, which I am better equipped to tackle now that I have a tablet like computer to play with.

A near term goal for Non-Mixer is to add an option to that causes all mixer strips to run in a single JACK client. Conceptually, this is a horrible idea, but due to some practical performance limitations of JACK which affect users with hundreds of mixer strips, it may be a necessary evil. Leave it to JACK to design and advertise a feature (multiple clients per process) and then turn around and antagonize the people who actually use it.

Project Notes

Please keep in mind that the Non project is a one man show. I designed and implemented all of this stuff by my self, and at a considerable cost in time, sleep and energy. I make it available to you so that you can be free of the enormous burden of having to solve these complex problems yourself. I see chatter on various forums about forking the project, the project being dead, etc. Unlike some of the more heavyweight projects out there, Non has no corporate sponsor, and I have a complicated and turbulent existence which does not always allow me to devote my attention to purely intellectual pursuits. I welcome any and all contributions, whether they be in the form of code, documentation, testing, package maintenance, chocolate, roses, precious metals, priceless relics--whatever. If those who bring up the issue of forking really had the skill and energy required to do something better with Non-*, you'd think they'd at least try submitting a few patches to me first...

I run Debian GNU/Linux and Non-* use a made-from-scratch custom build system which relies on accurate information from pkg-config. I cannot test on, or anticipate the quirks of, the hundreds of other Linux distributions out there. I have a policy of never committing code to the Non git repositories which does not build. Thus, if you are having a problem building Non on your system, chances are it's just because of some silly/simple quirk of the distribution you're using that could easily be fixed. However, I'm not going to scour the web looking for these reports. Unless you send a report to the appropriate Non-* mailing list, expect that your issue will never be resolved. As always, the best and fastest way to get anything fixed is to just fix it yourself and sent me the patch--preferably with a thorough explanation in the commit message of why it is needed and how it works, as the less time I have to spend reviewing a patch, the quicker it will be applied.

And finally, a note to packagers: If you feel that there's something about Non's build system that you don't understand or feel like you have to hack around, please consider discussing it with me. I'm more than willing to make changes to the build system which make life easier for packagers and improve the quality of packages. Having flaky builds of Non-* in a distribution's packages isn't good for anybody. I've seen comments in distributions' packaging bugtrackers saying that Non is a dead project, that the "developers" (plural) are unresponsive etc. But I've never heard from these people. If they actually took the time to email me, they might have different opinions.


I do not recommend linking Non-DAW against FLTK 1.3.0. FLTK 1.3.0 introduced a number of bugs, one of which seriously impairs Non-DAW's graphics performance. Non-Sequencer and Non-Mixer do not use the features of FLTK that have become buggy, so if you only plan to use them 1.3.0 should be fine. 1.1.10, 1.1.9, and 1.1.7 work fine, however.

In the future, I'll be maintaining a known-working version of FLTK along with the Non repository so that Non-* can be statically linked to the custom FLTK and avoid problems like this--and also allow many workarounds used by the Non-* programs to be removed in preference to fixing them at their source.

If you decide to build FLTK yourself, don't forget to use the following configure options:

--enable-threads --enable-shared --enable-xft --enable-xdbe

Non-DAW and Non-Mixer (and Non-Sequencer) can be acquired via git from the URLs listed on the Non website:

The shortlog from v1.0.0 to v1.1.0 follows:

Jonathan Moore Liles (114):
      Mixer: Don't use Fl_Group::clip_children(), which was only made public in FLTK 1.1.10.
      Fix a 64-bit bug in LADSPAInfo.
      Fix another 64-bit bug in Module insertion.
      Fix a mismerge that caused meter indicators not to be updated.
      FL: Clip drawing of value of FL_Sometimes_Input when in non-input mode.
      Mixer: Set minimum size for main window.
      Mixer: Fix automatic row layout logic.
      Mixer: Don't die if user picks a submenu node in module context menu.
      Mixer: Destroy a module's parameter editor window when the module itself is destroyed.
      FL: Get rid of unnecessary call to clip_children().
      Move non-daw scripts into timeline/ tree.
      Mixer: Save/load the control mode status of the gain controller as part of the mixer strip's state.
      Mixer: Improve spatializer appearance.
      Mixer: Report azimuth and elevation of panner points.
      Mixer/Module_Parameter_Editor: Automatically show panner control for module parameter pairs named Azimuth and Elevation.
      Mixer/Panner: Vary width of latitude lines.
      Module Parameter Editor: Don't use local allocation to store label.
      Mixer: Further improve the appearance of the Panner widget.
      Mixer: Fix azimuth/elevation reporting. Load current values in Module_Parameter_Editor.
      FL/Fl_Scalepack: Give scalepack the ability contain a resizable() child.
      Mixer/Mixer: Cleanup.
      Mixer: Auto-connect spatializer controls to spatialization plugins.
      Mixer: Cleanup.
      Mixer/Panner: Fix azimuth assignment.
      Make spatialization mode of controller_module more robust.
      Mixer/Module_Parameter_Editor: Don't point widow label at stack allocation.
      Mixer/Module_Parameter_Edtior: Silence compiler warnings.
      Mixer: Raise (arbitrary) maximum number of channels of JACK module from 6 to 16.
      Mixer: Fix callback delivery by Controller Module.
      Timeline: Fix 64-bit bug in interactive region trimming.
      Fix 64-bit bug in peakfile handling.
      Mixer: Explicitly link to libdl.
      Fix build being broken by some include defining a preprocessor macro for 'None'
      Mixer: Don't segfault when removing a module.
      Mixer: Don't segfault during teardown upon WM initiated exit.
      Mixer: Handle WM main window close event just like Quit menu comment (confirm save).
      Some distributions put --as-needed in pkg-config and fltk-config results. *See you in /dev/null*
      Some distributions put --as-needed in pkg-config and fltk-config results. *See you in /dev/null*
      Really. I do.
      Don't rely on 'Fl' symlink which only exists on Debian.
      Mixer: Add basic OSC support.
      Mixer: Add basic OSC control to Controller_Module.
      Mixer: Add commandline option for specifying the OSC port to use.
      Mixer: Allow clients to query for available OSC paths.
      Mixer: Ensure that JACK_Module passes chain_name_changed event to its Controllers.
      Mixer: OSC enhancements. Responsd to both exact (range limited) and Control Voltage (0.0-1.0 on */cv) input.
      Mixer: Make OSC ports a property of Module::Port, not Controller_Module. Therefore, all plugin parameters will be accessible via OSC.
      Mixer: Create unique OSC paths even when multiple instances of a module/plugin with the same name exist in a chain.
      OSC: Don't swallow up all parameterless messages.
      Mixer: Feedback control values to OSC senders.
      Mixer: Default OSC paths are CV. Use /unscaled for exact input.
      Mixer: Don't create/destroy OSC ports more often than necessary.
      Mixer: Update OSC paths upon chain/strip name change.
      Mixer: Add OSC section to documentation.
      Mixer: Display realtime parameter changes (initiated via automation or GUI) in Module_Parameter_Editor
      Mixer: Cleanup OSC value scaling/clamping behavior.
      Mixer: Fix behavior issues of Toggle controls.
      Mixer: Don't allow ',' in OSC paths.
      Mixer: Fix mirroring and OSC automation of Spatialization controls.
      Implement the Non-Session-Manager (NSM)
      Mixer: Fix GUI update on Controller_Modules being controlled via JACK CV.
      Mixer: Destroy instances of Controller_Module when the connected modules are removed.
      NSM: Process more than one message per wait cycle!
      NSM: Detect death of clients whose processes are not children of NSMD.
      NSM: Update documentation.
      NSM: Fix logic when waiting for clients to load.
      NSM: Support sessions spread across multiple servers.
      OSC: Process all available events in one wait cycle.
      Give Non-DAW the ability to detect Non-Mixer OSC servers via NSM broadcast handshake.
      OSC: Implement generic signal model with path auto discovery through NSM.
      NSM: Mutli-server fixes.
      Timeline: Don't die when not running under NSM.
      Mixer: Don't die when not running under NSM.
      FL: Fix an uninitialized value.
      Mixer: Fix an invalid read on strip destruction due to a missing lock.
      Don't poll NSM as frequently.
      NSM: Clients must use the same protocol (UDP,TCP) as NSM server.
      Timeline/Track: Avoid unnecessary drawing of occluded track box.
      Timeline: Add interpolation mode choice of Linear and None to Control Sequences.
      OSC: Save and restore OSC signal connections outgoing from Non-DAW.
      Timeline: Run OSC output in a dedicated thread.
      Timeline: Clock cleanup.
      OSC: Signal cleanups.
      OSC: Improvements to signal routing.
      Add libsigc++ as a dependency.
      Big OSC signal cleanups
      NSM: Add --detach option to nsmd.
      NSM: Add session locking to nsmd.
      NSM: Minor GUI enhancements.
      NSM: Don't forget to inform GUI of the removal of stopped clients when closing a session.
      OSC: Fix signal creation notification.
      Cleanup compiler warnings.
      NSM: Time client responses.
      Update documentation.
      Mixer: Document spatialization control for Ambisonics plugins.
      Mixer: Update documentation.
      scripts: Allow suggested packages.
      Everybody gets new icons! Also, .desktop files.
      Use getopt_long for processing command line arguments to Non-DAW and Non-Mixer.
      NSM: For lack of a better place to put it, add 'jackpatch' program to the repository.
      NSM: Minor cleanup.
      NSM: Update documentation.
      Add notes to packagers.
      Add 'gleam' inspired boxtypes to replace the ones in the gtk+ theme. Also, tweak crystal boxtypes.
      Mixer: Add new 'plastic' knob type. Make knob type to display configurable.
      GUI tweaks.
      Mixer: Try harder to avoid drawing meters more than necessary.
      Timeline: Work around bug in FLTK 1.3 when drawing a string containing only symbols.
      Mixer: Make slider types optional too.
      Timeline: Warn about buggy FLTK version.
      Mixer: Try to fix some weirdness with Controller Module knob display.
      Mixer: Implement mixer Strip import/export
      Update Non-DAW screenshot in documentation.
      Bump versions.

Release Announcement v1.0.0

Non DAW and Non Mixer 1.0.0

I'm pleased to announce the release of Non-DAW and Non-Mixer version 1.0.0. Some version numbers have been skipped, as a lot time as gone without an official release. Those who have followed Non-DAW via git will only notice a few changes, most of them pushed very recently.

The chief advancement provided by this release is the long overdue inclusion of the Non-Mixer. This completes the Non triad and should cover the needs of many, some in ways I haven't yet imagined (it covers my needs almost completely).

Non-Mixer is a stand-alone modular mixer application for JACK. It hosts several internal modules, one of which hosts LADSPA plugins. All parameters can be controlled through the GUI or externally via Control Voltage signals [the native control sequence output of Non-DAW] (but a MIDI<->CV gateway program exists, for other uses). It has the unique feature of each strip having its own JACK client, which has promising implications for parallel processing. Non Mixer also has a fast, light FLTK GUI, which finds no problem in rendering hundreds of strips. I have plans to add support for DSSI plugins.

Currently, Non-DAW and Non-Mixer are kept in the same repository, even though they are entirely independent applications. I have already begun to restructure the repository and build system and I plan to split the repositories for the two projects out completely, as time allows.

This release is dedicated to Deanna, whose untimely demise, in addition to the rumors of my own death, has reminded me of my mortality and the necessity of realizing my dreams while I still have the opportunity. I will not be discouraged, so don't bother trying. I will resist blind adherence to the status quo, as I always have--but now even more fiercely. Progress will not happen on its own. It must be forced along by individuals of power, wisdom, and vision; which we should all aspire to become. But I digress.

Non-DAW and Non-Mixer (and Non-Sequencer) can be acquired via git from the URLs listed on the Non website:

A shortlog from v0.5.0 to v1.0.0 follows:

Jonathan Moore Liles (224):
      Remove dependence on FLTK >= 1.1.8.
      Make mute and solo buttons more colorful.
      Fix offset error in selection rectangle.
      Don't lose track of timeline focus when window loses focus.
      Provide a keybinding/menu entry for track renaming.
      Add action to set range from region position and length.
      Handle very long port names.
      Make normalization work properly with looped regions.
      Improve the appearance of rec/mute/solo buttons.
      Add solo and record blinkers to TLE.
      Oops. Fix order of reference in track destructor.
      Use exact JACK client name in LASH initialization.
      Add module information to debugging output.
      Don't quit on escape key.
      Show disk usage in TLE.
      Take fades into consideration when splitting regions.
      Formally disconnect from JACK at exit.
      Properly handle removal of a track's active sequence.
      Add option to remove all but the current take.
      Remove extraneous inclusions of const.h
      Oops. Write journal entries in proper order when generating snapshot.
      Set value of 'show all takes' toggle correctly when updating menus.
      Fix log entry parser for values containing ":" (colons).
      Use timestamps (of creation) for take names instead of sequential numbers.
      Add total MB free'd to output of 'remove-unused-sources' script.
      Oops. Remove debugging noise from console output.
      remove-unused-sources: Include peak files in deletion and size calculation.
      Draw inactive takes in a darker hue.
      remove-unused-sources: Fix source detection regex and add -m (move) option (now the default)
      Fix occasional segfault upon loading snapshots.
      Clean up sequence widget label drawing behavior.
      Don't make an assertion when drawing empty regions.
      Add 'Denormalize' to Audio_Region context menu.
      Disable some Audio_Region context menu items when appropriate.
      Display Y-axis value for control points on mouse over.
      Fix selection bug for Control Points.
      Cleanup capture code and eliminate off-by-one-buffer bug when bouncing tracks.
      Clean up signedness problems in Loggable ID treatment.
      Add LASH connection indicator to GUI along with --no-lash command line option.
      Implement storage and loading of unjournaled state for Loggable objects.
      Use a hash instead of an array for indexing loggables.
      Add some error checking to unjournaled state save/load.
      Remove unnecessary code from unjournaled state loader.
      Use a single hash table for storing loggables and unjournaled state.
      Remove unnecessary debugging output.
      Don't leak memory in handling of unjournaled state.
      Implement capture-offset latency compensation.
      Give newly created track the focus.
      Save unjournaled state on LASH save file event.
      Don't lose timeline settings on LASH save event...
      Clean up region trimming code.
      Clean up region splitting code.
      Clean up journal transaction buffer code to avoid overflow.
      Assert whenever an invalid journal entry is encountered.
      Don't allow transport relocation while recording.
      Check for makedepend command in configure script.
      Add 'ar' to required commands in configure script.
      Fl_Arc_Dial: Don't forget to execute callback for mousewheel events
      Soften the glare effect in FL_BURNISHED_OVAL_BOX
      Fl_Arc_Dial: Draw value over face of dial
      Implement Fl_Flowpack.
      Implement Fl_Labelpad_Group
      Fl_Sometimes_Input: Draw a box.
      Refactor common components of Timeline and Mixer into nonlib/
      Makefile: disable function inlining when building for debugging.
      Timeline: Try to make the window fill the screen at startup.
      Make boxtype drawn on Fl_Sometimes_Input's up mode configurable.
      Configure: Don't forget to eval result of 'ask' function.
      Make optimized drawing of timeline canvas a compile-time option.
      Make doublebuffering of the timeline sub-window a compile-time option.
      Make use of a sub-window for the timeline a compile-time option.
      Update some copyright years.
      LASH_Engine: Add missing include.
      Timeline: Add blinker to indicate that one or more sequence widgets is selected.
      Timeline: Don't forget to journal edits to time and tempo points!
      Fl_Sometimes_Input: Add omitted include.
      Fl_Labelpad_Group: Measure using actual font of widget instead of always FL_HELVETICA.
      Timeline: Always resize tracks Fl_Pack.
      Don't die if user picks a popup menu item with no callback set (e.g. a submenu node).
      Timeline: Don't die if the user cancels a Track's manual channels set dialog.
      Add some profiling output for project loading.
      Attempt to fix sign error in declicking logic for 64-bit systems.
      Timeline: Attempt to constrain main window to size of screen, but don't automatically fill the screen.
      Don't allow process callback to be invoked between Engine and JACK::Client destruction.
      Control Sequences should output control voltage values between 0.0 and 1.0, not -1.0 and 1.0.
      Allow the removal of annotation sequences via a context menu.
      User can temporarily disable snapping by holding down 's'.
      Make it optional (Options/Behavior/...)  wether or not stopping the transport disables global record.
      Ignore events with modifiers in Timeline::handle() to avoid eating keyboard event for global rec enable.
      Add context menu entries (with keybindings) to Track for record, mute, and solo.
      Add FL_Menu keybinding to popup Track context menu.
      Assign a shortcut to 'Transport' submenu.
      Add entries (with keybindings) for size to Track context menu.
      Properly set default color scheme.
      Remove (deprecated) LASH support.
      Implement Mixer.
      Mixer: Fix memory error and fill newly allocated chain buffers with silence.
      Mixer: Properly handle multiple plugin instances in one Plugin module..
      Mixer: Fix orientation of vertical sliders in Module_Parameter_Editor
      Mixer: Make main scrollbar work again.
      Mixer: Hide panner widget until it's ready to be connected to something...
      Mixer: Teach modules how to serializer their input port settings.
      Mixer: Share (reuse) buffers between all chains.
      Mixer: Fix optimized meter drawing.
      Mixer: Don't redraw mixer strips unnecessarily.
      Mixer: Clean up some compiler warnings.
      Mixer: Allow peaks to be reset on mouse click in Meter_Module
      Mixer: Improve the mousewheel behavior of Fl_Arc_Dial and add Fl_Value_SliderX.
      Mixer: Don't forget to remove timeouts in destructors!
      Mixer: Changes to support project saving/loading.
      Split New_Project_Dialog out into FL/ to share with mixer.
      JACK_Module: Don't forget to shutdown input ports in destructor.
      Mixer: Add menubar.
      Mixer: GUI Cleanups. Also, permit moving of strips to the left/right.
      Mixer: Implement "quit" command.
      Mixer: Gain_Module now accepts gain in dB.
      Timeline: Add blinker to indicate that one or more sequence widgets is selected.
      Mixer: Fix one-off in vertical position of DPM.
      Mixer: Clip module labels.
      Module_Parameter_Editor: Use Fl_Menu_Button instead of Fl_Choice to improve layout.
      Mixer/Module: Save/restore 'active' state.
      Mixer_Strip: Don't forget strip's color.
      Mixer: Don't forget to save and load controllers.
      Module_Parameter_Editor: Hide the module name label because it rarely fits in the window.
      Mixer: Fix race condition causing invalid read in process thread of Meter_Indicator_Module.
      Mixer/Plugin_Module: Properly manage number of plugin instances.
      Mixer: Rearrange so that each mixer strip runs as its own JACK client.
      Add hack to support 'renaming' of JACK::Client.
      Mixer: Fix plugin loading chicken/egg problem.
      Mixer/Plugin_Module: Don't die because user picks a category instead of a plugin.
      Fix bug in plugin input configuration.
      When recreating ports after 'renaming' a jack client, sort by mode, then alpha.
      Timeline: Always resize tracks Fl_Pack.
      Mixer: Add a Mono Panner module.
      Silence warnings about asprintf return value.
      Mixer: Allow user to add internal modules as well as plugins to a chain.
      Mixer: Improve chain insert debugging messages.
      Mixer/Chain: Avoid renaming JACK clients unnecessarily.
      Mixer: Fix invalid read in module picker.
      Mixer: GUI Tweaks.
      Mixer: Use doublebuffering for main window.
      Mixer: Fix box type of strip name widgets.
      Mixer: Draw inactive modules in darker colors.
      Mixer: Don't require a connected control input for processing audio in Gain_Module.
      Make the interval of Fl_Blinker configurable.
      JACK doesn't like it if you set a slow-sync callback and don't act like a slow-sync client...
      Timeline: Add a blinker for pending seek.
      Mixer: Put chian modules inside an Fl_Scroll.
      Mixer: Decrease the default height of Plugin_Module's.
      Add option to tile mixer strips into 1, 2, or 3 rows.
      Mixer: Scan for plugins in a background thread.
      Mixer: Add context menu for Controllers. Save/load control mode.
      Mixer: Make chain background color match mixer strip.
      Mixer: Explicitly destroy chian when tearing down mixer strip.
      Mixer: Show peak value in tooltip on DPMs.
      Disable mouse-over highlighting of mixer strip name fields.
      Implement Fl_Packscroller, an alternative to Fl_Scroll better suited to containing vertical Fl_Packs.
      Use Fl_Packscroller for modules in Chain.
      Don't bother drawing a DPM if it's clipped.
      Mixer: Define minimum height for mixer strips.
      Mixer: Make spatialization control visible again (but it's still not connected to anything)
      Mixer: Add some stuff to the menubar.
      Mixer: Implement Project/Open menu option.
      Mixer: Add stuff to Options/ menu. Save and load options.
      Mixer: Apply appropriate change required by 66daa1.
      Split About Dialog off into FL/
      Fix the new project dialog.
      Mixer: Make sure process queue is rebuilt upon binding of controls.
      Mixer: Add Help/Manual option to menubar.
      Mixer: Make insert-before work for meter indicator module.
      Mixer: Cleanup.
      Mixer: Allow the WM to kill the mixer window.
      Mixer: Attempt to improve the behavior of single-row display mode.
      Prevent Timeline and Mixer from attempting to open each other's project formats.
      Mixer: Add context menu to mixer strips.
      Fl_Packscroller: Let children have a go at events...
      FL/menu_popup: Call menu's callback if menu item lacks one.
      Mixer: Add context menus for modules.
      Mixer: Clean up event handling.
      Mixer: Respond appropriately to JACK buffer size callback.
      Attempt to cope with failure to create JACK clients and ports.
      Add documentation for mixer and restructure supporting tree.
      Mixer: Add color chooser to mixer strip context menu.
      Add section on control voltages to mixer doc.
      Centralize color schemes.
      Mixer: Middle click toggles module activation state.
      Mixer: Add click-to-focus for mixer strips.
      Mixer: Fix restrip rename menu option.
      Update mixer documentation.
      Enforce JACK client name length restrictions.
      Mixer: Separate out public project commands.
      Mixer: Don't allow any strips to be created without an open projcet.
      Make logo used in About_Dialog an option.
      Makefile: Remove some noise from dependency generation output
      Fix syntax error in TLE.fl
      Mixer: Implement cut/copy/paste for modules.
      Mixer: Improve keyboard focus.
      Mixer: Add more keybindings to modules.
      Mixer: Use a toggle in module context menu for bypass instead of separate activate/deactivate items.
      Update mixer documentation.
      Mixer: Make chains look better in the Light scheme.
      Fl_Flowpack: Flow mode should default to on!
      Mixer: tweak the size of GUI elements.
      Mixer: Don't show mixer strip label.
      Mixer: Show project name on menubar.
      Mixer: Set X class of main window.
      Mixer: Warn if user attempts to quit without saving.
      Mixer: Don't show label for Meter module...
      Mixer: Fix "Help" menu item.
      Update mixer screenshots.
      Mixer: Support specifying an instance name on the command line (--instance)
      Prefix main window titles with "Non DAW : "
      Mixer: Clean up some compiler warnings.
      Massively reoganize tree.
      Timeline: Hide seek blinker, which may not be particularly useful.
      Mixer: Don't show module context menu for Meter_Indicator_Module.
      Fl_Packscroller: Don't eat unwanted FL_PUSH events.
      Bump version.
      Tweak build system.
      New logo for Non-DAW.
      Improve logo for Non-Mixer.
      FL: Make About_Dialog more dynamic.
      Last minute documentation updates.

Peter Nelson (1):
      Don't silence input ports.


This work is licensed under a Creative Commons License