As per my example above, that you restated here, ALSA cannot dynamically shift and mix audio to multiple independent output channels on the fly where Pulse can.
It
can mix them on the fly (respectively, the default plugins shipped with ALSA can do it). What it can't do is swap the input and output targets once the application has build its routing table. You're mixing things up (pun intended).
ALSA works favorably for the simple case where you have multiple Input channels with the intent to combine them into a single (or stereo) output channel with a singular program on one or more output channels.
...if you don't want to actually change its default configuration. If offers a
lot more than what you think, you just have to adapt its configuration to use these features.
Pulse is far more complicated because it -does more-.
Oh, Pulse is actually fairly simple, as it was only designed to fix a limited amount of shortcomings for a single usage scenario - and moving your problems into a separate daemon makes them fairly trivial to solve. ALSA itself offers a lot more functionality that is not implemented in Pulse at all, you still have to somehow hack it into ALSA without breaking Pulse if you actually want to use it. This include rather simple things like remapping channels (like merging multiple intependent stereo output channels into a single 5.1 surround output), adding a lowpass filter for your LFE channel, or just changing how the additional channels are generated when upsampling a stereo signal to surround sound.
It allows for each input source and output channel to be handled fully independently, much more like a pro mixer console. This makes it annoying to use if all you want to do is the simple example where ALSA excels.
Steams, not channels. Pulse does not allow to handle audio channels individually if they are part of a multi-channel audio stream, you have to do that in ALSA - or just use JACK instead.
At the point where you have had to add plugins and tweaks and special cases to ALSA to make it do some of what Pulse does, you have made ALSA more complicated than Pulse is.
Pulse and ALSA are both designed around plugins and pretty much useless without any of them. Well, ALSA can still directly output to hardware I suppose, but Pulse uses plugins (or "modules" as they call them) to even do that simple task. You have to differentiate between plugins/modules that are an essential part of the framework itself and therefore part of its codebase, and external ones.
Now that I think about it, the whole module system of PulseAudio seems like one of the many unfinished ideas of Poettering - its documentation is basically non-existant and I have yet to see any 3rd party modules. I'm pretty sure you can do some nifty things with it - even with the default modules shipped with Pulse - but hardly anyone is able to tell you how to do it and it really does not look very intuitive.
Again, restating my point that ALSA is great for -simple- routing of sound sources into a singular program (sound engineer not software engineer version of that term) that is then output over one or more channels. If you want a differential program for each channel, that is where you need Pulse.
Actually, that is something that works quite well with ALSA. Each routing element you define in your ALSA configuration can be used as a target output, as long as your program allows to select the ALSA target entity. And even if it does not, you can adapt your configuration in a way that allows you to redirect the default interface to a different routing element on a per-program basis through an environment variable. The configuration may be static, but the routing information is recreated on each program startup, which allows at least some flexibility. You still have to do it manually, though, as messing with environment variables is not something that is easily turned into an automated background task.
I could show you the config file I'm using for my desktop PC to show you some of the advance abilities of ALSA that you are probably not even aware of, but I'm currently visiting my parents and only got my Laptop with me, so I can't access it right now.
Give me a full screen graphical mixing board interfaces with input channels on the left and output channels listed as columns across the top and an individual select knob that I can turn up/down for adding/removing each source to/from each output channel.
You just had a wet dream about JACK I guess. Pulse can't do that, either.
The reason why Pulse might be better on the Pyra is that the hardware has the ability to truly, and independently, feed separate outputs to headphone jack, speakers, bluetooth audio and maybe even sound over the HDMI - all in stereo - maybe more over the HDMI (7.1?).
Actually, that is only something that works well with Pulse if each of them is a separate audio device, as Pulse expects that all output channels of an audio device are part of a single multi-channel output (4.0, 5.1, 7.1 etc) - other output channels are pretty non-existant for Pulse. Unfortunately, we have several of them hooked up to the same audio controller - this is one of the very simple examples where leaving the ground of the average Joe's motherboard audio codec will make you hit Pulse's limitations.
That is where Pulse shines - which is an admitted niche case.
You misspelled JACK.