001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.actions.audio;
003
004import java.awt.event.ActionEvent;
005
006import org.openstreetmap.josm.Main;
007import org.openstreetmap.josm.actions.JosmAction;
008import org.openstreetmap.josm.tools.AudioPlayer;
009import org.openstreetmap.josm.tools.Shortcut;
010
011/**
012 * Abstract superclass of {@link AudioFasterAction} and {@link AudioSlowerAction}.
013 * @since 563
014 */
015public abstract class AudioFastSlowAction extends JosmAction {
016
017    private double multiplier;
018
019    /**
020     * Constructs a new {@code AudioFastSlowAction}.
021     *
022     * @param name the action's text as displayed on the menu (if it is added to a menu)
023     * @param iconName the filename of the icon to use
024     * @param tooltip  a longer description of the action that will be displayed in the tooltip.
025     * @param shortcut a ready-created shortcut object.
026     * @param fast {@code true} to increase speed (faster audio), {@code false} to decrease it (slower audio).
027     */
028    public AudioFastSlowAction(String name, String iconName, String tooltip, Shortcut shortcut, boolean fast) {
029        super(name, iconName, tooltip, shortcut, true);
030        multiplier = Main.pref.getDouble("audio.fastfwdmultiplier", 1.3);
031        if (! fast)
032            multiplier = 1.0 / multiplier;
033    }
034
035    @Override
036    public void actionPerformed(ActionEvent e) {
037        double speed = AudioPlayer.speed();
038        if (speed * multiplier <= 0.1)
039            return;
040        try {
041            if (AudioPlayer.playing() || AudioPlayer.paused())
042                AudioPlayer.play(AudioPlayer.url(), AudioPlayer.position(), speed * multiplier);
043        } catch (Exception ex) {
044            AudioPlayer.audioMalfunction(ex);
045        }
046    }
047}