+ /* If all (non-music) channels are active, stop the channel that has
+ played its sound sample most completely (in percent of the sample
+ length). As we cannot currently get the actual playing position
+ of the channel's sound sample when compiling with the SDL mixer
+ library, we use the current playing time (in milliseconds) instead. */
+
+ if (mixer_active_channels ==
+ audio.num_channels - (mixer[audio.music_channel].active ? 0 : 1))
+ {
+ unsigned long playing_current = Counter();
+ int longest = 0, longest_nr = audio.first_sound_channel;
+
+ for (i=audio.first_sound_channel; i<audio.num_channels; i++)
+ {
+#if 1
+ int playing_time = playing_current - mixer[i].playing_starttime;
+ int actual = 1000 * playing_time / mixer[i].data_len;
+#else
+ int actual = 100 * mixer[i].playing_pos / mixer[i].data_len;
+#endif
+
+ if (!IS_LOOP(mixer[i]) && actual > longest)
+ {
+ longest = actual;
+ longest_nr = i;
+ }
+ }
+
+ Mixer_StopChannel(longest_nr);
+ }
+