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