Is the fermata working as expected?
Usually a fermata or pause mark is used to cause the corresponding note or rest to be longer by an indefinite amout which remains to the discretion of the player (and this is what several notation handbooks say, such as Gardner Read's and Elain Gould's). MuseScore implements it as a tempo reduction whose the specific proportion can be chosen from the inspector. This would be a good solution if there were only one note affected by the fermata. The problem arises in situations as the following: Consider a score with two staves, the upper one has a whole note with a fermata, and the lower, two half notes with a fermata on the second one. Current MuseScore's playback applies a tempo reduction starting from the first fermata (first beat), so the first half note from the lower staff is affected even if it doesn't carry a fermata. Then, the second fermata surprisingly applies a new tempo reduction over the first tempo reduction instead of applying the tempo reduction specified in the inspector to the original tempo. The overall effect is not a pause but a slowdown, sort of artificial ritardando. For a single note it is equivalent to a pause because there are no notated rythmical events during the time span of the note.
This behavior is awkward and, I believe, contrary to what a human player would (and has been taught to) do .
Of course there are situations where the note with a fermata is preceded by a ritardando, but it is not always the case.
In the absence of a specifically notated ritardando or tempo change (or one decided by the player), the intended result of such notation would be that the first half note keeps the original tempo of the piece, and the second one is extended to last more than notated.
I'm aware that the developers must have been confronted with a tough one when considering the problem of multiple concurrent fermatas and they opted for this straightforward solution, but I believe it can be improved.
In what follows I try to propose a possible alternative solution.
First of all, whenever a fermata appears on any note, at least one fermata should share with it part of its time span in all voices and staves of the system, i.e., on some note within the notated duration of the note, otherwise there is a contradictory and hence incompatible requirement: two simultaneous notes or rests are required to have different durations. The current solution is particular in that it allows violating this norm, since a single fermata triggers a tempo slowdown which affects all staves, thus encouraging what is really a bad practice (omitting the remaining necessary fermatas). But it does so with another bad practice: changing the tempo of what is written without any tempo change. (See attachment for examples of inconsistent and consistent fermatas.)
That said, I'll assume this notational rule is followed and let's start with the proposed algorithm.
1) Number each fermata first by initial time and in case of simultaneity, by staff order
2) Create a table or matrix containing initial MIDI time and final MIDI time for each fermata, i.e., corresponding to the note or rest it is applied to (a row per fermata)
3) For each fermata change the initial time by the initial time of the next fermata with an initial time strictly different and not greater than its final time. For instance, if there are two simultaneous notes with fermatas and then a third one starting after the other two, the initial time of all will be that of the third note (notice that no fermata can start after all the others ended because it would be alone).
4) The last step creates a set of intervals. Intersect all the intervals. The only valid places to add extra duration are the time regions where all voices have a fermata.
5) To compute the duration of the extra time, add to the previous table a column indicating the total expected duration considering the setting the user has chosen in the inspector for each fermata.
6) The settings may be incompatible if care has not been taken to devise a fully consistent group of settings, Don't care, select the greatest since it will be the one that conditions the rest.
7) Add the difference of time between the desired and the notated duration of the corresponding note or rest to the valid interval obtained in 4. If more than one, the extra time could be distributed proportionally to the duration of the subintervals.
8) Convert the combined time (original of the valid interval + maximum increment) to tempo (this is to implement the fermatas using the resources available from MIDI
9) Apply a tempo change at the beginning of the valid inteval and don't forget to restore the original tempo at the begining of the next note or rest (i.e., end of valid interval)
In the attached example a sketch of this idea is shown.
As a final comment, some check should be done that the rule for using fermatas is satisfied. Currently the user (especially the inexperinced one) has no clue that they are doing things wrong.