From 6bbaa9fda1d55000f3529af2003f8f6246e3566a Mon Sep 17 00:00:00 2001 From: Li REN Date: Wed, 12 Jun 2013 22:55:25 -0400 Subject: [PATCH] Add a background music player to Mage Client. Music support .mp3 or .wav files. Put the audio files under plugins\sounds\music, random song will be played sequentially when GamePane is activited. the UI to adjust background music is add to preference dialog as well. --- Mage.Client/pom.xml | 15 +++++++ .../src/main/java/mage/client/MageFrame.java | 5 +++ .../java/mage/client/constants/Constants.java | 3 +- .../mage/client/dialog/PreferencesDialog.form | 26 +++++++++--- .../mage/client/dialog/PreferencesDialog.java | 42 +++++++++++++++---- .../java/mage/client/util/MusicPlayer.java | 7 ++-- 6 files changed, 78 insertions(+), 20 deletions(-) diff --git a/Mage.Client/pom.xml b/Mage.Client/pom.xml index 8188e150752..a9c5adbce94 100644 --- a/Mage.Client/pom.xml +++ b/Mage.Client/pom.xml @@ -123,6 +123,21 @@ 7.6.3 + + com.googlecode.soundlibs + mp3spi + 1.9.5-1 + + + javazoom + jlayer + 1.0.1 + + + org.mobicents.external.tritonus + tritonus_share + 0.3.6 + diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index 7ae3188d80d..fa39240d95c 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -66,6 +66,7 @@ import mage.client.tournament.TournamentPanel; import mage.client.util.EDTExceptionHandler; import mage.client.util.SettingsManager; import mage.client.util.gui.ArrowBuilder; +import mage.client.util.MusicPlayer; import mage.components.ImagePanel; import mage.interfaces.Action; import mage.interfaces.MageClient; @@ -540,10 +541,14 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { ArrowBuilder.getBuilder().hideAllPanels(); if (frame instanceof GamePane) { ArrowBuilder.getBuilder().showPanel(((GamePane) frame).getGameId()); + MusicPlayer.playBGM(); + }else{ + MusicPlayer.stopBGM(); } } public static void deactivate(MagePane frame) { + MusicPlayer.stopBGM(); frame.setVisible(false); MagePane topmost = getTopMost(frame); if (activeFrame != frame) { diff --git a/Mage.Client/src/main/java/mage/client/constants/Constants.java b/Mage.Client/src/main/java/mage/client/constants/Constants.java index 007cb7cebab..4f5a48a0b62 100644 --- a/Mage.Client/src/main/java/mage/client/constants/Constants.java +++ b/Mage.Client/src/main/java/mage/client/constants/Constants.java @@ -80,7 +80,8 @@ public final class Constants { public static final String RESOURCE_PATH_SET = IO.imageBaseDir + "sets" + File.separator; public static final String RESOURCE_PATH_SET_SMALL = RESOURCE_PATH_SET + File.separator + "small" + File.separator; public static final String BASE_SOUND_PATH = "plugins" + File.separator + "sounds" + File.separator; - + public static final String BASE_MUSICS_PATH = "plugins" + File.separator + "sounds" + File.separator + "musics" + File.separator ; + public interface IO { String imageBaseDir = "plugins" + File.separator + "images" + File.separator; String IMAGE_PROPERTIES_FILE = "image.url.properties"; diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form index c5c0791b453..8b31b07b896 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.form @@ -1,4 +1,4 @@ - +
@@ -7,6 +7,7 @@ + @@ -25,7 +26,7 @@ - + @@ -81,7 +82,7 @@ - + @@ -443,7 +444,7 @@ - + @@ -562,7 +563,10 @@ - + + + + @@ -572,7 +576,9 @@ - + + + @@ -586,6 +592,14 @@ + + + + + + + + diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java index c1924aaa908..a42facf23c1 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java @@ -73,6 +73,7 @@ public class PreferencesDialog extends javax.swing.JDialog { public static final String KEY_CARD_IMAGES_SAVE_TO_ZIP = "cardImagesSaveToZip"; public static final String KEY_SOUNDS_ON = "soundsOn"; + public static final String KEY_MUSICS_ON = "MusicsOn"; public static final String KEY_BIG_CARD_TOGGLED = "bigCardToggled"; @@ -201,6 +202,7 @@ public class PreferencesDialog extends javax.swing.JDialog { saveToZipFiles = new javax.swing.JCheckBox(); jPanel22 = new javax.swing.JPanel(); jEnableSounds = new javax.swing.JCheckBox(); + jEnableMusics = new javax.swing.JCheckBox(); jPanel6 = new javax.swing.JPanel(); lblProxyType = new javax.swing.JLabel(); cbProxyType = new javax.swing.JComboBox(); @@ -322,7 +324,7 @@ public class PreferencesDialog extends javax.swing.JDialog { .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(84, Short.MAX_VALUE)) + .addContainerGap(92, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Main", jPanel1); @@ -537,7 +539,7 @@ public class PreferencesDialog extends javax.swing.JDialog { .addGroup(jPanel4Layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(92, Short.MAX_VALUE)) + .addContainerGap(96, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Images", jPanel4); @@ -549,13 +551,22 @@ public class PreferencesDialog extends javax.swing.JDialog { } }); + jEnableMusics.setText("enable BGM"); + jEnableMusics.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jEnableMusicsActionPerformed(evt); + } + }); + javax.swing.GroupLayout jPanel22Layout = new javax.swing.GroupLayout(jPanel22); jPanel22.setLayout(jPanel22Layout); jPanel22Layout.setHorizontalGroup( jPanel22Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel22Layout.createSequentialGroup() .addGap(19, 19, 19) - .addComponent(jEnableSounds) + .addGroup(jPanel22Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jEnableSounds) + .addComponent(jEnableMusics)) .addContainerGap(325, Short.MAX_VALUE)) ); jPanel22Layout.setVerticalGroup( @@ -563,7 +574,9 @@ public class PreferencesDialog extends javax.swing.JDialog { .addGroup(jPanel22Layout.createSequentialGroup() .addGap(24, 24, 24) .addComponent(jEnableSounds) - .addContainerGap(217, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jEnableMusics) + .addContainerGap(194, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Sounds", jPanel22); @@ -605,7 +618,7 @@ public class PreferencesDialog extends javax.swing.JDialog { } }); - jLabel11.setFont(new java.awt.Font("Tahoma", 2, 10)); + jLabel11.setFont(new java.awt.Font("Tahoma", 2, 10)); // NOI18N jLabel11.setText("Note: password won't be encrypted!"); javax.swing.GroupLayout pnlProxyLayout = new javax.swing.GroupLayout(pnlProxy); @@ -747,7 +760,7 @@ public class PreferencesDialog extends javax.swing.JDialog { .addGap(0, 100, Short.MAX_VALUE) ); - jLabel12.setFont(new java.awt.Font("Tahoma", 1, 11)); + jLabel12.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N jLabel12.setText("Choose your avatar:"); jPanel12.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); @@ -789,7 +802,7 @@ public class PreferencesDialog extends javax.swing.JDialog { .addGap(0, 100, Short.MAX_VALUE) ); - jLabel13.setFont(new java.awt.Font("Tahoma", 1, 11)); + jLabel13.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N jLabel13.setText("New avatars:"); jPanel16.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true)); @@ -975,7 +988,7 @@ public class PreferencesDialog extends javax.swing.JDialog { layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jTabbedPane1) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap(316, Short.MAX_VALUE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(saveButton) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(exitButton, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE) @@ -1028,7 +1041,7 @@ public class PreferencesDialog extends javax.swing.JDialog { // sounds save(prefs, dialog.jEnableSounds, KEY_SOUNDS_ON, "true", "false", UPDATE_CACHE_POLICY); - + save(prefs, dialog.jEnableMusics, KEY_MUSICS_ON, "true", "false", UPDATE_CACHE_POLICY); // connection save(prefs, dialog.cbProxyType, KEY_PROXY_TYPE); save(prefs, dialog.txtProxyServer, KEY_PROXY_ADDRESS); @@ -1124,6 +1137,10 @@ public class PreferencesDialog extends javax.swing.JDialog { // TODO add your handling code here: }//GEN-LAST:event_jEnableSoundsActionPerformed + private void jEnableMusicsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jEnableMusicsActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_jEnableMusicsActionPerformed + private void showProxySettings() { if (cbProxyType.getSelectedItem() == Connection.ProxyType.SOCKS) { this.pnlProxy.setVisible(true); @@ -1231,6 +1248,12 @@ public class PreferencesDialog extends javax.swing.JDialog { } else { dialog.jEnableSounds.setSelected(false); } + prop = prefs.get(KEY_MUSICS_ON, "true"); + if (prop.equals("true")) { + dialog.jEnableMusics.setSelected(true); + } else { + dialog.jEnableMusics.setSelected(false); + } } private static void loadProxySettings(Preferences prefs) { @@ -1449,6 +1472,7 @@ public class PreferencesDialog extends javax.swing.JDialog { private javax.swing.JCheckBox displayBigCardsInHand; private javax.swing.JButton exitButton; private javax.swing.JTextField imageFolderPath; + private javax.swing.JCheckBox jEnableMusics; private javax.swing.JCheckBox jEnableSounds; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; diff --git a/Mage.Client/src/main/java/mage/client/util/MusicPlayer.java b/Mage.Client/src/main/java/mage/client/util/MusicPlayer.java index 0891db61d3f..6ee743113a6 100644 --- a/Mage.Client/src/main/java/mage/client/util/MusicPlayer.java +++ b/Mage.Client/src/main/java/mage/client/util/MusicPlayer.java @@ -2,6 +2,7 @@ package mage.client.util; import java.io.File; import java.awt.List; import javax.sound.sampled.*; +import mage.client.constants.Constants; /** @@ -16,15 +17,13 @@ public class MusicPlayer { List filelist = new List(); static MusicPlayer player = null; - public static String BASE_BGM_PATH = "G:\\mp3\\东方\\TH13_-_东方神灵庙BGM\\"; - public MusicPlayer(){ open(); } //open file and add list private void open(){ - filepath = BASE_BGM_PATH; + filepath = Constants.BASE_MUSICS_PATH; filelist.removeAll(); File filedir = new File(filepath); File[] fileread = filedir.listFiles(); @@ -122,7 +121,7 @@ public class MusicPlayer { } } - + public void run(){ try { Thread.sleep(100);