/** * Xtreme Media Player a cross-platform media player. * Copyright (C) 2005-2010 Besmir Beqiri * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package xtrememp; import java.awt.BorderLayout; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.HashMap; import java.util.Map; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.JToolBar; import javax.swing.SwingConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import xtrememp.util.Utilities; import static xtrememp.util.Utilities.tr; /** * * @author Besmir Beqiri */ public class EqualizerDialog extends JDialog implements ActionListener { private final Logger logger = LoggerFactory.getLogger(EqualizerDialog.class); private String[] sliderLabels = {"60", "170", "310", "600", "1K", "3K", "6K", "12K", "14K", "16K"}; private String[] presetsLabels = {"Normal", "Classical", "Club", "Dance", "Full Bass", "Full Bass & Treble", "Full Treble", "Laptop", "Live", "Party", "Pop", "Reggae", "Rock", "Techno"}; private int[] gainValue = {50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50}; private int[] PRESET_NORMAL = {50, 50, 50, 50, 50, 50, 50, 50, 50, 50}; private int[] PRESET_CLASSICAL = {50, 50, 50, 50, 50, 50, 70, 70, 70, 76}; private int[] PRESET_CLUB = {50, 50, 42, 34, 34, 34, 42, 50, 50, 50}; private int[] PRESET_DANCE = {26, 34, 46, 50, 50, 66, 70, 70, 50, 50}; private int[] PRESET_FULLBASS = {26, 26, 26, 36, 46, 62, 76, 78, 78, 78}; private int[] PRESET_FULLBASSTREBLE = {34, 34, 50, 68, 62, 46, 28, 22, 18, 18}; private int[] PRESET_FULLTREBLE = {78, 78, 78, 62, 42, 24, 8, 8, 8, 8}; private int[] PRESET_LAPTOP = {38, 22, 36, 60, 58, 46, 38, 24, 16, 14}; private int[] PRESET_LIVE = {66, 50, 40, 36, 34, 34, 40, 42, 42, 42}; private int[] PRESET_PARTY = {32, 32, 50, 50, 50, 50, 50, 50, 32, 32}; private int[] PRESET_POP = {56, 38, 32, 30, 38, 54, 56, 56, 54, 54}; private int[] PRESET_REGGAE = {48, 48, 50, 66, 48, 34, 34, 48, 48, 48}; private int[] PRESET_ROCK = {32, 38, 64, 72, 56, 40, 28, 24, 24, 24}; private int[] PRESET_TECHNO = {30, 34, 48, 66, 64, 48, 30, 24, 24, 28}; private Map<String, int[]> presetMap; public static final int LINEARDIST = 1; public static final int OVERDIST = 2; private float[] bands = null; private int[] eqgains = null; private int eqdist = OVERDIST; private JCheckBox activateCheckBox; private JComboBox<String> presetComboBox; private JSlider panSlider; private JSlider[] sliders; public EqualizerDialog(JFrame mainFrame) { super(mainFrame, false); setLayout(new BorderLayout()); setTitle(tr("Equalizer")); initComponents(); Utilities.closeOnEscape(this); pack(); setResizable(false); setLocationRelativeTo(mainFrame); setVisible(true); } private void initComponents() { Container container = getContentPane(); JToolBar toolBar = new JToolBar(); toolBar.setFloatable(false); activateCheckBox = new JCheckBox("Activate"); toolBar.add(activateCheckBox); toolBar.addSeparator(); JPanel panPanel = new JPanel(new BorderLayout()); panSlider = new JSlider(-100, 100, 0); panPanel.add(new JLabel("L"), BorderLayout.WEST); panPanel.add(panSlider, BorderLayout.CENTER); panPanel.add(new JLabel("R"), BorderLayout.EAST); toolBar.add(panPanel); toolBar.addSeparator(); presetMap = new HashMap<String, int[]>(); presetMap.put(presetsLabels[0], PRESET_NORMAL); presetMap.put(presetsLabels[1], PRESET_CLASSICAL); presetMap.put(presetsLabels[2], PRESET_CLUB); presetMap.put(presetsLabels[3], PRESET_DANCE); presetMap.put(presetsLabels[4], PRESET_FULLBASS); presetMap.put(presetsLabels[5], PRESET_FULLBASSTREBLE); presetMap.put(presetsLabels[6], PRESET_FULLTREBLE); presetMap.put(presetsLabels[7], PRESET_LAPTOP); presetMap.put(presetsLabels[8], PRESET_LIVE); presetMap.put(presetsLabels[9], PRESET_PARTY); presetMap.put(presetsLabels[10], PRESET_POP); presetMap.put(presetsLabels[11], PRESET_REGGAE); presetMap.put(presetsLabels[12], PRESET_ROCK); presetMap.put(presetsLabels[13], PRESET_TECHNO); presetComboBox = new JComboBox<String>(presetsLabels); presetComboBox.setSelectedIndex(Settings.getEqualizerPresetIndex()); presetComboBox.addActionListener(this); toolBar.add(presetComboBox); container.add(toolBar, BorderLayout.NORTH); sliders = new JSlider[10]; int sLength = sliders.length; JPanel centerPanel = new JPanel(new GridLayout(0, sLength)); sliders = new JSlider[10]; for (int i = 0; i < sLength; i++) { JPanel sliderPanel = new JPanel(new BorderLayout()); sliders[i] = new JSlider(SwingConstants.VERTICAL, 0, 100, 50); sliders[i].setMajorTickSpacing(50); sliders[i].setMinorTickSpacing(5); sliders[i].setPaintTicks(true); sliderPanel.add(sliders[i], BorderLayout.CENTER); JLabel sliderLabel = new JLabel(sliderLabels[i]); sliderLabel.setHorizontalAlignment(JLabel.CENTER); sliderPanel.add(sliderLabel, BorderLayout.SOUTH); centerPanel.add(sliderPanel); } container.add(centerPanel, BorderLayout.CENTER); } /** * Set bands array for equalizer. * * @param bands */ public void setBands(float[] bands) { System.arraycopy(this.bands, 0, bands, 0, bands.length); } /** * Update sliders from gains array. * * @param gains */ public void updateSliders(int[] gains) { if (gains != null) { for (int i = 0, len = gains.length; i < len; i++) { gainValue[i + 1] = gains[i]; sliders[i].setValue(gainValue[i + 1]); } } } @Override public void actionPerformed(ActionEvent e) { Object source = e.getSource(); if (source == activateCheckBox) { } else if (source == presetComboBox) { Settings.setEqualizerPresetIndex(presetComboBox.getSelectedIndex()); String currentPreset = String.valueOf(presetComboBox.getSelectedItem()); updateSliders(presetMap.get(currentPreset)); logger.info("Equilazer: new preset selected: {}", currentPreset); } } }