Fred Gleason kirjoitti:
On Saturday 15 November 2008 07:22:16 pm Hannu
Savolainen wrote:
ALSA's design philosophy has been to expose
all aspects of the sound
hardware to the applications so that they can play with any of them.
This is all bullshit.
So the solution is to say "stupid application programmers, they can't be
expected to know any better", and then hardwire logic into the driver system
to force it to use the behavior appropriate for an MP3 player? I'm not sure
that this is a smart design tradeoff.
Programmers are not stupid. However the way how typical sound
applications are implemented is wrong.
If you look at
any kernel level subsystem such as networking or access
to ordinary disk files. None of such applications want to know anything
about the actual hardware details. I have not seen any PHP or CGI
scripts/programs that try to switch the NIC card to use 1 gigabit
signalling rate instead of the 10 mbit one supported by the network HUB.
Actually, I can think of cases where something like that could be extremely
useful -- a network analyzer or monitor, for example. It's not a common
requirement (just as altering the sample clock sync source is not a common
requirement for most audio apps), but absolutely needed for some problem
domains.
Network or disk performance analyzers/monitors/optimizers are good
tools. They are not "ordinary" applications but system tools. However
it's wrong if programs like Mozilla try to do this kind of functions.
All a web browser does is opening a TCP/IP socket to the
http/ftp/whatever server, sends the request and waits for the response.
Equally well an audio player application should just open a connection
to the audio device, set the rate/format and then just start to play.
They should not try to do things like automatic unmuting the sound card.
One of the nice things about the Un*x design paradigm
is how the goal is
consistently been "to make simple things easy, and hard things possible".
Unfortunately, in the world of audio APIs, it seems that we've fallen between
two stools: we have one API that makes simple things easy, but hard things
*impossible*, and another that makes *everything* possible, but also hard.
I would not call it as "making hard things impossible". The idea is to
make programmers to think twice before they start doing stupid mistakes.
Best regards,
Hannu