Index: src/org/openstreetmap/josm/actions/audio/AudioBackAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/audio/AudioBackAction.java	(revision 12561)
+++ src/org/openstreetmap/josm/actions/audio/AudioBackAction.java	(working copy)
@@ -10,7 +10,6 @@
 import java.io.IOException;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
 import org.openstreetmap.josm.io.audio.AudioPlayer;
 import org.openstreetmap.josm.io.audio.AudioUtil;
@@ -20,7 +19,7 @@
  * Jump the audio backward 10 seconds and start playing if paused.
  * @since 547
  */
-public class AudioBackAction extends JosmAction {
+public class AudioBackAction extends BaseAudioAction {
 
     /**
      * Constructs a new {@code AudioBackAction}.
@@ -35,7 +34,7 @@
     public void actionPerformed(ActionEvent e) {
         try {
             if (AudioPlayer.playing() || AudioPlayer.paused())
-                AudioPlayer.play(AudioPlayer.url(), AudioPlayer.position()
+                AudioPlayer.play(AudioPlayer.url().orElse(null), AudioPlayer.position()
                 - Main.pref.getDouble("audio.forwardbackamount", 10.0));
             else
                 MarkerLayer.playAudio();
@@ -43,4 +42,4 @@
             AudioUtil.audioMalfunction(ex);
         }
     }
-}
+}
\ No newline at end of file
Index: src/org/openstreetmap/josm/actions/audio/AudioFastSlowAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/audio/AudioFastSlowAction.java	(revision 12561)
+++ src/org/openstreetmap/josm/actions/audio/AudioFastSlowAction.java	(working copy)
@@ -5,7 +5,6 @@
 import java.io.IOException;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.io.audio.AudioPlayer;
 import org.openstreetmap.josm.io.audio.AudioUtil;
 import org.openstreetmap.josm.tools.Shortcut;
@@ -14,7 +13,7 @@
  * Abstract superclass of {@link AudioFasterAction} and {@link AudioSlowerAction}.
  * @since 563
  */
-public abstract class AudioFastSlowAction extends JosmAction {
+public abstract class AudioFastSlowAction extends BaseAudioAction {
 
     private double multiplier;
 
@@ -41,9 +40,9 @@
             return;
         try {
             if (AudioPlayer.playing() || AudioPlayer.paused())
-                AudioPlayer.play(AudioPlayer.url(), AudioPlayer.position(), speed * multiplier);
+                AudioPlayer.play(AudioPlayer.url().orElse(null), AudioPlayer.position(), speed * multiplier);
         } catch (IOException | InterruptedException ex) {
             AudioUtil.audioMalfunction(ex);
         }
     }
-}
+}
\ No newline at end of file
Index: src/org/openstreetmap/josm/actions/audio/AudioFwdAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/audio/AudioFwdAction.java	(revision 12561)
+++ src/org/openstreetmap/josm/actions/audio/AudioFwdAction.java	(working copy)
@@ -9,7 +9,6 @@
 import java.io.IOException;
 
 import org.openstreetmap.josm.Main;
-import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
 import org.openstreetmap.josm.io.audio.AudioPlayer;
 import org.openstreetmap.josm.io.audio.AudioUtil;
@@ -19,7 +18,7 @@
  * Jump the audio forward 10 seconds.
  * @since 547
  */
-public class AudioFwdAction extends JosmAction {
+public class AudioFwdAction extends BaseAudioAction {
 
     /**
      * Constructs a new {@code AudioFwdAction}.
@@ -33,7 +32,7 @@
     public void actionPerformed(ActionEvent e) {
         try {
             if (AudioPlayer.playing() || AudioPlayer.paused())
-                AudioPlayer.play(AudioPlayer.url(), AudioPlayer.position()
+                AudioPlayer.play(AudioPlayer.url().orElse(null), AudioPlayer.position()
                 + Main.pref.getDouble("audio.forwardbackamount", 10.0));
             else
                 MarkerLayer.playAudio();
@@ -41,4 +40,4 @@
             AudioUtil.audioMalfunction(ex);
         }
     }
-}
+}
\ No newline at end of file
Index: src/org/openstreetmap/josm/actions/audio/AudioNextAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/audio/AudioNextAction.java	(revision 12561)
+++ src/org/openstreetmap/josm/actions/audio/AudioNextAction.java	(working copy)
@@ -7,7 +7,6 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 
-import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -16,7 +15,7 @@
  * Play from the first such Marker if none has been played, or repeat the last marker if at the end.
  * @since 547
  */
-public class AudioNextAction extends JosmAction {
+public class AudioNextAction extends BaseAudioAction {
 
     /**
      * Constructs a new {@code AudioNextAction}.
@@ -30,4 +29,4 @@
     public void actionPerformed(ActionEvent e) {
         MarkerLayer.playNextMarker();
     }
-}
+}
\ No newline at end of file
Index: src/org/openstreetmap/josm/actions/audio/AudioPlayPauseAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/audio/AudioPlayPauseAction.java	(revision 12561)
+++ src/org/openstreetmap/josm/actions/audio/AudioPlayPauseAction.java	(working copy)
@@ -9,7 +9,6 @@
 import java.io.IOException;
 import java.net.URL;
 
-import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.gui.layer.markerlayer.AudioMarker;
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
 import org.openstreetmap.josm.io.audio.AudioPlayer;
@@ -23,7 +22,7 @@
  * If fast forwarding or slow forwarding, resume normal speed.
  * @since 547
  */
-public class AudioPlayPauseAction extends JosmAction {
+public class AudioPlayPauseAction extends BaseAudioAction {
 
     /**
      * Constructs a new {@code AudioPlayPauseAction}.
@@ -35,7 +34,7 @@
 
     @Override
     public void actionPerformed(ActionEvent e) {
-        URL url = AudioPlayer.url();
+        URL url = AudioPlayer.url().orElse(null);
         try {
             if (url != null && AudioPlayer.paused()) {
                 AudioPlayer.play(url);
@@ -58,4 +57,4 @@
             AudioUtil.audioMalfunction(ex);
         }
     }
-}
+}
\ No newline at end of file
Index: src/org/openstreetmap/josm/actions/audio/AudioPrevAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/audio/AudioPrevAction.java	(revision 12561)
+++ src/org/openstreetmap/josm/actions/audio/AudioPrevAction.java	(working copy)
@@ -7,7 +7,6 @@
 import java.awt.event.ActionEvent;
 import java.awt.event.KeyEvent;
 
-import org.openstreetmap.josm.actions.JosmAction;
 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
 import org.openstreetmap.josm.tools.Shortcut;
 
@@ -16,7 +15,7 @@
  * Play from the first such Marker if none has been played or already at the first marker.
  * @since 547
  */
-public class AudioPrevAction extends JosmAction {
+public class AudioPrevAction extends BaseAudioAction {
 
     /**
      * Constructs a new {@code AudioPrevAction}.
@@ -30,4 +29,4 @@
     public void actionPerformed(ActionEvent e) {
         MarkerLayer.playPreviousMarker();
     }
-}
+}
\ No newline at end of file
Index: src/org/openstreetmap/josm/actions/audio/BaseAudioAction.java
===================================================================
--- src/org/openstreetmap/josm/actions/audio/BaseAudioAction.java	(nonexistent)
+++ src/org/openstreetmap/josm/actions/audio/BaseAudioAction.java	(working copy)
@@ -0,0 +1,63 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.actions.audio;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.actions.JosmAction;
+import org.openstreetmap.josm.gui.layer.LayerManager;
+import org.openstreetmap.josm.gui.layer.markerlayer.AudioMarker;
+import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer;
+import org.openstreetmap.josm.tools.Shortcut;
+
+/**
+ * Base class for every action related to audio content.
+ */
+public abstract class BaseAudioAction extends JosmAction {
+
+    public BaseAudioAction(String name, String iconName, String tooltip, Shortcut shortcut, boolean registerInToolbar) {
+        super(name, iconName, tooltip, shortcut, registerInToolbar);
+
+        // initial check
+        setEnabled(isAudioMarkerPresent());
+
+        // reevaluate presence of audio markers each time layouts change
+        Main.getLayerManager().addLayerChangeListener(getLayerChangeListener());
+    }
+
+    /**
+     * Checks if there is at least one {@link AudioMarker} is present in the current layout.
+     * @return {@code true} if at least one {@link AudioMarker} is present in the current
+     * layout, {@code false} otherwise.
+     */
+    protected boolean isAudioMarkerPresent() {
+        return Main.getLayerManager().getLayers().stream()
+                .filter(l -> l instanceof MarkerLayer)
+                .map(ml -> (MarkerLayer) ml)
+                .flatMap(ml -> ml.data.stream())
+                .anyMatch(m -> m instanceof AudioMarker);
+    }
+
+    /**
+     * Creates {@link LayerManager.LayerChangeListener} that disabled/enables the audio
+     * actions depending if there is at least one {@link AudioMarker} present in the
+     * current layout.
+     * @return An instance of {@link LayerManager.LayerChangeListener}.
+     */
+    private LayerManager.LayerChangeListener getLayerChangeListener() {
+        return new LayerManager.LayerChangeListener() {
+            @Override
+            public void layerAdded(LayerManager.LayerAddEvent e) {
+                setEnabled(isAudioMarkerPresent());
+            }
+
+            @Override
+            public void layerRemoving(LayerManager.LayerRemoveEvent e) {
+                setEnabled(isAudioMarkerPresent());
+            }
+
+            @Override
+            public void layerOrderChanged(LayerManager.LayerOrderChangeEvent e) {
+                // nothing
+            }
+        };
+    }
+}
Index: src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
===================================================================
--- src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(revision 12561)
+++ src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java	(working copy)
@@ -303,7 +303,7 @@
 
         // make our new marker
         AudioMarker newAudioMarker = new AudioMarker(coor,
-                null, AudioPlayer.url(), this, time, offset);
+                null, AudioPlayer.url().orElse(null), this, time, offset);
 
         // insert it at the right place in a copy the collection
         Collection<Marker> newData = new ArrayList<>();
@@ -570,4 +570,4 @@
             invalidate();
         }
     }
-}
+}
\ No newline at end of file
Index: src/org/openstreetmap/josm/io/audio/AudioPlayer.java
===================================================================
--- src/org/openstreetmap/josm/io/audio/AudioPlayer.java	(revision 12561)
+++ src/org/openstreetmap/josm/io/audio/AudioPlayer.java	(working copy)
@@ -3,6 +3,7 @@
 
 import java.io.IOException;
 import java.net.URL;
+import java.util.Optional;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.tools.JosmRuntimeException;
@@ -154,11 +155,11 @@
 
     /**
      * To get the Url of the playing or recently played audio.
-     * @return url - could be null
+     * @return url The Url of the playing or recently played audio.
      */
-    public static URL url() {
+    public static Optional<URL> url() {
         AudioPlayer instance = AudioPlayer.getInstance();
-        return instance == null ? null : instance.playingUrl;
+        return Optional.ofNullable(instance == null ? null : instance.playingUrl);
     }
 
     /**
@@ -167,7 +168,7 @@
      */
     public static boolean paused() {
         AudioPlayer instance = AudioPlayer.getInstance();
-        return instance == null ? false : (instance.state == State.PAUSED);
+        return instance != null && (instance.state == State.PAUSED);
     }
 
     /**
@@ -176,7 +177,7 @@
      */
     public static boolean playing() {
         AudioPlayer instance = AudioPlayer.getInstance();
-        return instance == null ? false : (instance.state == State.PLAYING);
+        return instance != null && (instance.state == State.PLAYING);
     }
 
     /**
@@ -311,4 +312,4 @@
     public void playing(URL playingURL) {
         this.playingUrl = playingURL;
     }
-}
+}
\ No newline at end of file
