### Godot version

4.0-dev (master)

### System information

Win 11

### Issue description

Reported by @ExquisiterEmil on Discord

I analyzed an issue regarding the animation player - it keeps behaving weirdly when using an AudioStreamPlayer and using the AnimationPlayer. After adding a couple of debug messages and following various weird calls (up to 5 calls to animation process during _stop_internal) I narrowed the issue down to the following use-case:
- You have an AnimationPlayer
- You have an AudioStreamPlayer within the AnimationPlayer
- You position yourself somewhere "non position 0" in the timeline of the animation player (i.e. 'seek')
- You try to stop the animation player by pressing the "Stop" symbol (+ it shouldnt be playing in the first place because you haven't pressed 'Play' yet)
- The audio keeps playing but the bar resets to 0
- You press "Stop" again and it stops the audio.

From what I was able to analyze, the following process happens:
- When you click within the animation player, you trigger a _timeline_changed signal, this is being consumed by the AnimationPlayerEditor's "Seek Value changed" function, which in turn "stops" the player, seeks the position, and "starts" the player again. (See animation_player_editor_plugin.cpp:1169 -> animation_player.cpp:1984) -> Assumtion Nr. 1
![image](https://user-images.githubusercontent.com/761911/213870376-dd12d973-4e1e-483e-a24a-09e19c01a390.png)
- During the press of "Stop" you basically setting the seek value back to "0", and since this is another change of the seek valuje, it triggers another round-trip of seeking and pausing and unpausing the audioplayer.
![image](https://user-images.githubusercontent.com/761911/213870551-95d79a05-5bc3-4597-886a-ada6cca3c0c8.png)
- If you press once again, since the seek position is now "0", the round trip isn't triggered, and the animation processing isn't started, hence the audio doesn't start playing again. -> Assumtion Nr. 2

Assumtion Nr. 1:
- animation_player.cpp _stop_internal doesn't reset "is_stopping" to the proper previous state and just overrides it with "false" upon finish seeking (albeit setting "playing" to false)

Assumtion Nr. 2:
- I assume this behaviour like this, due to observing the stack trace of the calls, which only tripped my breakpoint once, here over at _stop_internal
![image](https://user-images.githubusercontent.com/761911/213870612-dfcfbe2c-c64d-41d4-ad4f-fe1e5ef6e927.png)
This, in turn, means that `frame->set_value(0);` does not trigger a seek again, which makes the audio player shut up.

Sadly, I have no idea how we could fix this, maybe instead of checking against the `if (!nc->node || is_stopping) {` block, we may also add a `|| !playing`? But maybe we are too early for this to trigger - someone with more experience in the animationplayer may be able to help out here.

If I should add anything to my analysis, let me know and I'll try to give more insight!


### Steps to reproduce

Listed above, download example project, open, click AnimationPlayer, seek somewhere, try to stop, ...

### Minimal reproduction project

[AudioPlaybackTrackIssue.zip](https://github.com/godotengine/godot/files/10472323/AudioPlaybackTrackIssue.zip)

}
				track_cache[path] = track;
			} else if (track_cache_type == Animation::TYPE_POSITION_3D) {
				TrackCacheTransform *track_xform = static_cast<TrackCacheTransform *>(track);
				if (track->_pass != _pass) {
					track_xform->loc_used = false;
					track_xform->rot_used = false;
					track_xform->scale_used = false;
				}
				switch (track_type) {
					case Animation::TYPE_POSITION_3D: {
						track_xform->loc_used = true;
					} break;
					case Animation::TYPE_ROTATION_3D: {
						track_xform->rot_used = true;
					} break;
					case Animation::TYPE_SCALE_3D: {
						track_xform->scale_used = true;
					} break;
					default: {
					}
				}
			} else if (track_cache_type == Animation::TYPE_VALUE) {
				// 
				TrackCacheValue *track_value = static_cast<TrackCacheValue *>(track);
				bool was_discrete = track_value->is_discrete;
				bool was_using_angle = track_value->is_using_angle;
				track_value->is_discrete |= anim->value_track_get_update_mode(i) == Animation::UPDATE_DISCRETE;
				track_value->is_using_angle |= anim->track_get_interpolation_type(i) == Animation::INTERPOLATION_LINEAR_ANGLE || anim->track_get_interpolation_type(i) == Animation::INTERPOLATION_CUBIC_ANGLE;
				if (was_discrete != track_value->is_discrete) {