Crossfire JXClient, Trunk
SoundManager.java
Go to the documentation of this file.
1 /*
2  * This file is part of JXClient, the Fullscreen Java Crossfire Client.
3  *
4  * JXClient is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * JXClient is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with JXClient; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  *
18  * Copyright (C) 2005-2008 Yann Chachkoff
19  * Copyright (C) 2006-2017,2019-2023 Andreas Kirschbaum
20  * Copyright (C) 2010-2012,2014-2018,2020-2023 Nicolas Weeger
21  */
22 
23 package com.realtime.crossfire.jxclient.sound;
24 
29 import java.util.Collection;
30 import java.util.EnumSet;
31 import org.jetbrains.annotations.NotNull;
32 import org.jetbrains.annotations.Nullable;
33 
40 public class SoundManager {
41 
45  @NotNull
46  private final ClipManager clipManager;
47 
52  @Nullable
53  private final DebugWriter debugSound;
54 
58  @NotNull
59  private final MusicManager musicManager;
60 
64  private boolean musicEnabled;
65 
69  private boolean effectsEnabled;
70 
74  @NotNull
75  private final Collection<Sounds> mutedSounds = EnumSet.allOf(Sounds.class);
76 
80  @NotNull
82 
87  @NotNull
88  @SuppressWarnings("FieldCanBeLocal")
90 
91  @Override
92  public void start() {
93  muteMusic(true);
94  mute(Sounds.CHARACTER, true);
95  }
96 
97  @Override
98  public void metaserver() {
99  muteMusic(true);
100  mute(Sounds.CHARACTER, true);
101  }
102 
103  @Override
104  public void preConnecting(@NotNull final String serverInfo) {
105  // ignore
106  }
107 
108  @Override
109  public void connecting(@NotNull final String serverInfo) {
110  muteMusic(true);
111  mute(Sounds.CHARACTER, true);
112  }
113 
114  @Override
115  public void connecting(@NotNull final ClientSocketState clientSocketState, @NotNull final String param) {
116  // ignore
117  }
118 
119  @Override
120  public void connected() {
121  muteMusic(false);
122  mute(Sounds.CHARACTER, false);
123  }
124 
125  @Override
126  public void connectFailed(@NotNull final String reason) {
127  // ignore
128  }
129 
130  };
131 
138  public SoundManager(@NotNull final GuiStateManager guiStateManager, @Nullable final DebugWriter debugSound) {
139  final AudioFileLoader audioFileLoader = new AudioFileLoader(debugSound);
140  clipManager = new ClipManager(audioFileLoader, debugSound, soundTaskExecutor);
141  musicManager = new MusicManager(audioFileLoader, debugSound);
142  this.debugSound = debugSound;
143  guiStateManager.addGuiStateListener(guiStateListener);
144  }
145 
149  public void start() {
151  }
152 
157  public void setMusicEnabled(final boolean enabled) {
158  if (musicEnabled == enabled) {
159  return;
160  }
161 
162  musicEnabled = enabled;
164  }
165 
170  public void setEffectsEnabled(final boolean enabled) {
171  if (effectsEnabled == enabled) {
172  return;
173  }
174 
175  effectsEnabled = enabled;
176  }
177 
183  public void playClip(@NotNull final Sounds type, @NotNull final CharSequence action) {
184  if (!effectsEnabled) {
185  if (debugSound != null) {
186  debugSound.debugProtocolWrite("playClip(type="+type+", action="+action+"): sound is muted");
187  }
188  return;
189  }
190 
191  if (mutedSounds.contains(type)) {
192  if (debugSound != null) {
193  debugSound.debugProtocolWrite("playClip(type="+type+", action="+action+"): sound type is muted");
194  }
195  return;
196  }
197 
198  if (debugSound != null) {
199  debugSound.debugProtocolWrite("playClip(type="+type+", action="+action+")");
200  }
201  clipManager.play(action);
202  }
203 
209  private void mute(@NotNull final Sounds type, final boolean mute) {
210  if (mute) {
211  mutedSounds.add(type);
212  } else {
213  mutedSounds.remove(type);
214  // XXX: stop running sounds of type
215  }
216  }
217 
223  public void playMusic(@Nullable final CharSequence name) {
225  }
226 
231  private void muteMusic(final boolean muted) {
233  }
234 
240  public void shutdown() throws InterruptedException {
241  if (debugSound != null) {
242  debugSound.debugProtocolWrite("shutdown");
243  }
244  soundTaskExecutor.executeAndWait(musicManager::shutdown);
246  }
247 
248 }
com.realtime.crossfire.jxclient.sound.SoundTaskExecutor.start
void start()
Definition: SoundTaskExecutor.java:58
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.sound.Sounds
Definition: Sounds.java:31
com.realtime.crossfire.jxclient.sound.MusicManager.setEnabled
void setEnabled(final boolean enabled)
Definition: MusicManager.java:113
com.realtime.crossfire.jxclient.sound.ClipManager.shutdown
void shutdown()
Definition: ClipManager.java:171
com.realtime.crossfire.jxclient.guistate.ClientSocketState
Definition: ClientSocketState.java:30
com.realtime.crossfire.jxclient.sound.MusicManager.play
void play(@Nullable final CharSequence name)
Definition: MusicManager.java:97
com.realtime.crossfire.jxclient.sound.SoundManager.playMusic
void playMusic(@Nullable final CharSequence name)
Definition: SoundManager.java:223
com.realtime.crossfire.jxclient.sound.MusicManager
Definition: MusicManager.java:35
com.realtime.crossfire.jxclient.sound.SoundManager.soundTaskExecutor
final SoundTaskExecutor soundTaskExecutor
Definition: SoundManager.java:81
com.realtime.crossfire.jxclient.sound.SoundManager.debugSound
final DebugWriter debugSound
Definition: SoundManager.java:53
com.realtime.crossfire.jxclient.guistate.GuiStateManager
Definition: GuiStateManager.java:34
com.realtime.crossfire.jxclient.guistate
Definition: ClientSocketState.java:23
com.realtime.crossfire.jxclient.sound.SoundManager.setMusicEnabled
void setMusicEnabled(final boolean enabled)
Definition: SoundManager.java:157
com.realtime.crossfire.jxclient.sound.SoundManager.musicEnabled
boolean musicEnabled
Definition: SoundManager.java:64
com.realtime.crossfire.jxclient.sound.MusicManager.setMuted
void setMuted(final boolean muted)
Definition: MusicManager.java:129
com.realtime.crossfire.jxclient.sound.AudioFileLoader
Definition: AudioFileLoader.java:41
com.realtime.crossfire.jxclient.guistate.GuiStateListener
Definition: GuiStateListener.java:32
com.realtime.crossfire.jxclient.sound.SoundManager.start
void start()
Definition: SoundManager.java:149
com.realtime.crossfire.jxclient.sound.SoundManager.setEffectsEnabled
void setEffectsEnabled(final boolean enabled)
Definition: SoundManager.java:170
com.realtime.crossfire.jxclient.sound.SoundManager.shutdown
void shutdown()
Definition: SoundManager.java:240
com.realtime.crossfire.jxclient.sound.SoundManager.playClip
void playClip(@NotNull final Sounds type, @NotNull final CharSequence action)
Definition: SoundManager.java:183
com.realtime.crossfire.jxclient.sound.SoundManager.effectsEnabled
boolean effectsEnabled
Definition: SoundManager.java:69
com.realtime.crossfire.jxclient.util
Definition: Codec.java:23
com.realtime.crossfire.jxclient.sound.SoundManager.SoundManager
SoundManager(@NotNull final GuiStateManager guiStateManager, @Nullable final DebugWriter debugSound)
Definition: SoundManager.java:138
com.realtime.crossfire.jxclient.sound.SoundManager.clipManager
final ClipManager clipManager
Definition: SoundManager.java:46
com.realtime.crossfire.jxclient.sound.SoundManager.guiStateListener
final GuiStateListener guiStateListener
Definition: SoundManager.java:89
com.realtime.crossfire
com.realtime
com.realtime.crossfire.jxclient.sound.SoundTaskExecutor
Definition: SoundTaskExecutor.java:34
com.realtime.crossfire.jxclient.sound.Sounds.CHARACTER
CHARACTER
Definition: Sounds.java:36
com.realtime.crossfire.jxclient.sound.SoundManager.musicManager
final MusicManager musicManager
Definition: SoundManager.java:59
com
com.realtime.crossfire.jxclient.sound.SoundManager.mutedSounds
final Collection< Sounds > mutedSounds
Definition: SoundManager.java:75
com.realtime.crossfire.jxclient.sound.ClipManager.play
void play(@NotNull final CharSequence action)
Definition: ClipManager.java:105
com.realtime.crossfire.jxclient.sound.SoundTaskExecutor.execute
void execute(@NotNull final Runnable task)
Definition: SoundTaskExecutor.java:81
com.realtime.crossfire.jxclient.util.DebugWriter
Definition: DebugWriter.java:36
com.realtime.crossfire.jxclient.sound.SoundManager
Definition: SoundManager.java:40
com.realtime.crossfire.jxclient.sound.SoundManager.muteMusic
void muteMusic(final boolean muted)
Definition: SoundManager.java:231
com.realtime.crossfire.jxclient.sound.ClipManager
Definition: ClipManager.java:43
com.realtime.crossfire.jxclient.sound.SoundManager.mute
void mute(@NotNull final Sounds type, final boolean mute)
Definition: SoundManager.java:209
com.realtime.crossfire.jxclient.sound.SoundTaskExecutor.executeAndWait
void executeAndWait(@NotNull final Runnable task)
Definition: SoundTaskExecutor.java:95
com.realtime.crossfire.jxclient.util.DebugWriter.debugProtocolWrite
void debugProtocolWrite(@NotNull final CharSequence str)
Definition: DebugWriter.java:68