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}