Crossfire JXClient, Trunk
MusicManager.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 
26 import java.util.Objects;
27 import org.jetbrains.annotations.NotNull;
28 import org.jetbrains.annotations.Nullable;
29 
35 public class MusicManager {
36 
40  @NotNull
42 
47  @Nullable
48  private final DebugWriter debugSound;
49 
54  @Nullable
56 
61  @Nullable
62  private Thread thread;
63 
67  private boolean enabled;
68 
72  private boolean muted = true;
73 
78  @Nullable
79  private CharSequence name;
80 
87  public MusicManager(@NotNull final AudioFileLoader audioFileLoader, @Nullable final DebugWriter debugSound) {
88  this.audioFileLoader = audioFileLoader;
89  this.debugSound = debugSound;
90  }
91 
97  public void play(@Nullable final CharSequence name) {
98  if (Objects.equals(this.name, name)) {
99  return;
100  }
101 
102  if (debugSound != null) {
104  }
105  this.name = name;
106  restart();
107  }
108 
113  public void setEnabled(final boolean enabled) {
114  if (this.enabled == enabled) {
115  return;
116  }
117 
118  if (debugSound != null) {
119  debugSound.debugProtocolWrite("setEnabled: "+enabled);
120  }
121  this.enabled = enabled;
122  restart();
123  }
124 
129  public void setMuted(final boolean muted) {
130  if (this.muted == muted) {
131  return;
132  }
133 
134  if (debugSound != null) {
135  debugSound.debugProtocolWrite("setMuted: "+muted);
136  }
137  this.muted = muted;
138  restart();
139  }
140 
145  private void restart() {
146  if (processor != null) {
148  processor = null;
149  }
150 
151  if (enabled && !muted && name != null) {
153  thread = new Thread(processor, "JXClient:MusicManager");
154  thread.start();
155  }
156  }
157 
161  public void shutdown() {
162  if (processor != null) {
163  processor.terminate(false);
164  processor = null;
165  }
166  if (thread != null) {
167  try {
168  thread.join();
169  } catch (final InterruptedException ex) {
170  throw new AssertionError(ex);
171  }
172  thread = null;
173  }
174  }
175 
176 }
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.sound.MusicManager.setEnabled
void setEnabled(final boolean enabled)
Definition: MusicManager.java:113
com.realtime.crossfire.jxclient.sound.MusicManager.play
void play(@Nullable final CharSequence name)
Definition: MusicManager.java:97
com.realtime.crossfire.jxclient.sound.MusicManager.enabled
boolean enabled
Definition: MusicManager.java:67
com.realtime.crossfire.jxclient.sound.MusicManager.MusicManager
MusicManager(@NotNull final AudioFileLoader audioFileLoader, @Nullable final DebugWriter debugSound)
Definition: MusicManager.java:87
com.realtime.crossfire.jxclient.sound.MusicManager
Definition: MusicManager.java:35
com.realtime.crossfire.jxclient.sound.MusicManager.thread
Thread thread
Definition: MusicManager.java:62
com.realtime.crossfire.jxclient.sound.MusicManager.muted
boolean muted
Definition: MusicManager.java:72
com.realtime.crossfire.jxclient.sound.MusicManager.restart
void restart()
Definition: MusicManager.java:145
com.realtime.crossfire.jxclient.sound.MusicManager.debugSound
final DebugWriter debugSound
Definition: MusicManager.java:48
com.realtime.crossfire.jxclient.sound.MusicManager.name
CharSequence name
Definition: MusicManager.java:79
com.realtime.crossfire.jxclient.sound.MusicManager.audioFileLoader
final AudioFileLoader audioFileLoader
Definition: MusicManager.java:41
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.util
Definition: Codec.java:23
com.realtime.crossfire.jxclient.sound.MusicManager.processor
Processor processor
Definition: MusicManager.java:55
com.realtime.crossfire
com.realtime
com
com.realtime.crossfire.jxclient.util.DebugWriter
Definition: DebugWriter.java:36
com.realtime.crossfire.jxclient.sound.MusicManager.shutdown
void shutdown()
Definition: MusicManager.java:161
com.realtime.crossfire.jxclient.sound.Processor.terminate
void terminate(final boolean fadeOut)
Definition: Processor.java:96
com.realtime.crossfire.jxclient.sound.Processor
Definition: Processor.java:39
com.realtime.crossfire.jxclient.util.DebugWriter.debugProtocolWrite
void debugProtocolWrite(@NotNull final CharSequence str)
Definition: DebugWriter.java:68