My apologies for letting this sit: despite my disagreement with the 
request, it has deserved a more comprehensive response for far too long.

Adrian Bunk wrote:
> you are missing the core problem here:
> 
> wildmidi might not be useful without freepats, but I'd estimate 99% of 
> all people installing libwildmidi1 do not want to use wildmidi at all.

    I'd be surprised if even 1% of folk with libwildmidi1 installed have ever 
heard of the wildmidi GUI interface, let alone have any intention of ever using 
it.  I've nothing against the interface, but the single most common reason that 
libwildmidi1 is installed is as a handler for audio/midi, which is nearly 
always with the gstreamer libwildmidi interface.  In order to properly handle 
this MIME type, we need to have a way to determine what audio to generate given 
a MIDI sequence, which is most commonly done with the use of a soundfont, 
patchfile, or other definition of which sound corresponds with which instrument 
and note (typically for the general MIDI standard), hereafter collectively 
called "soundfont".  I believe freepats to be the smallest package in the 
archive that can meet this requirement (the next smallest is 
fluid-soundfont-gm, at 145MB, which then needs adjustment for the data to work 
with wildmidi (proper sf2 support is planned for 0.3.0), so would end up being 
even larger on disk post-install).  I have heard of some projects that generate 
audio rendering defintions at runtime, but I've not heard of any with wide 
instrument coverage (and nothing even approaching the GM instrument set), and 
many of them require fairly powerful hardware to run acceptably.  I'd be very 
happy to modify the wildmidi packaging to use a smaller soundfont, if someone 
knows of one that is or could be in the archive, or with a runtime synthesizer, 
if someone knows of one that is fast enough to run acceptably on the sort of 
hardware users are likely to be running and can provide a filesystem interface 
indistinguishable from loading a soundfont (it's probably easier to write a 
gstreamer backend for the synth than to do it this way).  My understanding of 
the current state of audio interfaces is that the chance of finding hardware 
MIDI rendering modules on a arbitrary system is becoming very low, and expected 
to become even lower in the future.  Given the power of modern computers, 
compressed rendered audio is more common than MIDI for the average user (there 
are still some games and web pages that use MIDI, but it is not as common 
outside of music production as it was in the past), and this change in media 
distribution has been noticed by the commodity hardware purveyors, who have 
frequently dropped direct hardware support.  Users who do have such hardware 
(e.g. wavetable synth on a soundcard, outboard MIDI synth connected to some 
MIDI port (from the soundcard, or a USB<->MIDI converter), etc.) would likely 
benefit from the availability of another MIDI rendering backend, with the 
default remaining that based on software synthesis on the primary processor(s) 
(yet another gstreamer backend waiting to be written).

    To make an analogy to another library that converts codepoints into 
something that humans can sense directly, let's consider libpango, which 
Depends on fontconfig, which Depends on fontconfig-config, which Depends on an 
arbitrary disjunctive set of truetype fonts.  I'm fairly sure that everyone 
would agree that installing pango without installing any fonts is a highly 
unusual use case, but conversely, I can imagine there exists at least one user 
who has an installed font set from which they would like to purge all of the 
packages representing the disjunctive set of fonts depended upon by 
fontconfig-config.  Further, there may even be a user who would prefer to use 
only out-of-archive fonts.  Given the rich variety of fonts in the archive, it 
might be nicer for the disjunctive dependency of fontconfig-config to end in a 
virtual package Provided by all the font packages in the archive, and for there 
to be documentation on how users who only want out-of-archive fonts on how they 
can achieve this.  Practically, this is not considered an issue, as there is a 
fair consensus that there are some sensible default fonts in the archive, and 
if folk need different fonts for some reason, they should install more fonts, 
and leave at least one of the fontconfig-config font dependencies installed 
anyway.  There may even be some users who never need to render text on the 
screen (for example, those running a purely iconic environment), who may be 
annoyed that they must install fonts in order to install some other package.

    Similarly, the best solution for wildmidi is for there to exist 
documentation on the best practices for packaging soundfonts (again, data 
required to convert codepoints into something that humans can sense directly), 
and for libwildmidi-config to Depend: upon freepats | gm-soundfont 
(nomenclature subject to change in the event of the creation of an actual 
soundfont packaging policy), so that users may select the appropriate soundfont 
for their needs.  Ideally there should be similar parallel documentation 
suggesting to users how they can either A) define fake packages when using an 
out-of-archive soundfont or B) quickly create data-file-only packages from 
soundfonts so that they can handle out-of-archive soundfonts as packages.  
There may also be some code to handle registration, presentation, etc. for the 
installed soundfonts, so that all soundfont consumers can benefit from a 
central soundfont repository, which would require appropriate patches to 
wildmidi.

    Despite this, the current packaging uses Recommends, rather than Depends: 
in the default case, Recommends is installed, so the package is working.  In 
special cases, such as the user who wants to use other (potentially 
out-of-archive) converted soundfonts and wants to remove freepats, or the user 
who knows they will never render MIDI to audio, but happened to be forced to 
install libwildmidi because some other package is less modular than they would 
prefer, and wants to remove freepats, freepats can safely be removed without 
overly disturbing the system: audio/midi may not be renderable by gstreamer (or 
any other libwildmidi client claiming to handle audio/midi), but as noted 
previously, some users may never encounter MIDI (or may actually prefer *not* 
to hear embedded MIDI from web pages).  Demoting what is arguably a dependency 
even further, to Suggests, may provide better support for cases where one 
expects never to use the library, but it means that the library is unable to 
perform it's function, and the implicit contract to library users is broken: 
such a change would immediately require the filing of a bug against gstreamer 
that gstreamer0.10-plugins-bad claimed to render audio/midi, and failed to do 
so without special additional configuration.  Note that hackery to blacklist 
freepats from a CD image or installation script whilst installing libwildmidi 
causes the same issue.

> When a user installs pidgin (for ICQ) or totem-plugins-dvb-daemon
> (for watching TV), then it is unavoidable that libwildmidi1
> gets installed as a dependency.
> 
> In both cases there's a dependency on gstreamer0.10-plugins-bad,
> and since libgstwildmidi is 1 of the 89 plugins there 
> gstreamer0.10-plugins-bad depends on libwildmidi1.
> 
> With apt defaulting to install recommends this implies that a user 
> usually gets the 30MB freepats installed when he installs pidgin
> for ICQ or totem-plugins-dvb-daemon for watching TV.

    If it is considered important not to install freepats (or another 
soundfont) in these cases (or have it not present on initial install), then I'd 
argue that it would be better not to claim to be able to handle audio/midi at 
all, which would mean pulling libgstwildmidi out of gstreamer0.10-plugins-bad 
and putting it somewhere else (perhaps leave a Suggests: as a hint for anyone 
who wants support for handling audio/midi).  By doing so, users will be unable 
to automatically render encountered MIDI (most commonly on web pages) by 
default and have smaller download/install requirements, which are the requests 
behind this bug, and no new bugs would be created: users who installed 
something that uses libwildmidi *would* be able to render the audio, as would 
be expected (and likely claimed) by the package depending on libwildmidi.  I 
also prefer the idea of maintaining a less commonly installed package that 
works to the idea of maintaining an extremely frequently installed package that 
fails to work (or, more precisely, a frequently installed library that fails to 
provide the services advertised in the API, such that the maintainers of the 
reverse dependencies are vocal complainants).  I'd much rather just have the 
audio/MIDI handler installed by default, since ending the long series of bugs 
complaining about how browser X, file manager Y, audio player Z, and subsystem 
G were unable to render audio/midi was my primary motivation to package 
wildmidi in the first place, but as those bugs are nigh invariably filed on 
other packages (the concerned users having never heard of wildmidi), and it is 
up to those other packages whether they want to have a dependency chain that 
installs libwildmidi, I'm willing to leave that decision to those who maintain 
those packages, and therefore receive those bug reports (which become support 
requests, given the availability of a working libwildmidi).

    Similarly, if there exists a smaller-footprint software synthesizer 
gstreamer backend that can function effectively as the default audio/midi 
handler, it may be interesting to change the default, such that 
gstreamer-wildmidi becomes a non-default choice, for folk that want specific 
characteristics of this solution.   Something might be able to be done with 
libgstlv2, but finding a GM-compatible synthesizer that doesn't use a patchset 
or softsynth may prove difficult, and then one has to worry about the effects 
of hiding the UI, etc. (it may be easier, after identifying such a synthesizer 
to bind it's library directly to gstreamer than using libgstlv2).  Runtime 
synthesis performance should probably also be tested on some of the slower 
architectures, to make sure that they can keep up with at least a single voice 
120bpm MIDI track.

    That said, if someone would like to construct a compelling argument that we 
should install a default audio/midi handler that is not capable of generating 
sound (or only generates silence), supplies a patch that causes libwildmidi to 
do this in a safe way, provides documentation to help users configure their 
systems to render audio/midi as sound, is willing to help the gstreamer, 
browser, and file manager maintainers correctly triage the "MIDI doesn't work" 
bugs, and has the agreement of the gstreamer maintainers that doing so is 
preferred to splitting the plugin out of the plugins-bad set, I'd be willing to 
upload such a modified package.  I still don't think it's a good idea, but if 
there is some really good reason (moreso than "save space" or "save bandwidth", 
both better handled with the gstreamer change mentioned above), it is more 
acceptable than demoting to suggests, which renders the package inoperative 
without providing any easy means for recovery by affected users (either end 
users or maintainers of packages that depend upon libwildmidi).

-- 
Emmet HIKORY



--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]

Reply via email to