In either of these scenarios, `alda doctor` will now offer to install the
correct alda-player version.
I've updated the relevant user-facing error messages to recommend running `alda
doctor` to remedy the situation.
This incidentally also improves the way that we've been spawning player
processes. I realized that for _each_ of the player processes that we spawn (and
it can be up to 3 at once, I think?), we first invoke `alda-player info` to
check the `alda-player` version against the `alda` version, but we really only
need to do this once.
I haven't yet implemented the part where use the Alda API to check for versions
newer than the one installed. This commit is just the actual update mechanism.
`alda update` takes a flag that lets you specify which version you want to
install. That works, as of this commit, and hopefully I've done it in a way that
will work on Windows, macOS, and Linux. CI will tell me whether or not this is
the case when I push this commit.
There are a couple of issues here:
1. I was incorrectly checking `os.IsExist(err)`, a condition that should _never_
happen as a result of `os.Stat`, because if the file exists, then `err` is
nil.
2. It turns out that in newer versions of Go, the recommendation is to use
`errors.Is(err, os.ErrNotExist)`.
With the previous settings, I was finding it too easy during regular REPL usage
to end up with no players available and have to wait for a new one to spawn.
Increasing the number of desired players from 2 to 3 also helps a lot to ensure
that enough players are available when playing a bunch of score files in rapid
succession with `alda play`. With these new settings, I was able to go through
all of the example scores in the repo one by one and play them (overlapping)
with `alda play` and it worked out great!