source: trunk/src_apollo/org/apollo/ApolloSystem.java@ 345

Last change on this file since 345 was 345, checked in by bjn8, 16 years ago

Now allows for finer positioning of audio tracks via keyboard.

File size: 5.9 KB
Line 
1package org.apollo;
2
3import java.awt.Image;
4import java.awt.Toolkit;
5import java.awt.event.WindowEvent;
6import java.awt.event.WindowListener;
7import java.net.URL;
8import java.util.Collection;
9import java.util.HashSet;
10import java.util.Set;
11
12import javax.swing.SwingUtilities;
13
14import org.apollo.actions.ApolloActions;
15import org.apollo.agents.MelodySearch;
16import org.apollo.audio.ApolloPlaybackMixer;
17import org.apollo.audio.RecordManager;
18import org.apollo.audio.SampledAudioManager;
19import org.apollo.audio.util.FrameLayoutDaemon;
20import org.apollo.audio.util.MultiTrackPlaybackController;
21import org.apollo.audio.util.PlaybackClock;
22import org.apollo.audio.util.SoundDesk;
23import org.apollo.gui.FramePlaybackBarRenderer;
24import org.apollo.gui.FrameRenderPasses;
25import org.apollo.io.SampledAudioFileImporter;
26import org.apollo.util.AudioSystemLog;
27import org.expeditee.actions.Actions;
28import org.expeditee.gui.Browser;
29import org.expeditee.gui.FrameKeyboardActions;
30import org.expeditee.gui.FrameMouseActions;
31import org.expeditee.importer.FrameDNDTransferHandler;
32
33/**
34 * Provides initialization and shutdown services for the Apollo system.
35 *
36 * @author Brook Novak
37 *
38 */
39public final class ApolloSystem {
40
41 // TODO: Create actual frames
42 public static final String SYSTEM_FRAMESET_NAME = "apollosystem";
43 public static final String HELP_TOP_FRAMENAME = SYSTEM_FRAMESET_NAME + 2;
44
45// TODO: How to get good results: collection (moteef) and querry
46 // TODO: How to omit indexing on tracks
47 public static final String HELP_MELODYSEARCH_FRAMENAME = SYSTEM_FRAMESET_NAME + 3;
48
49
50 public static boolean useQualityGraphics = true;
51
52 private ApolloSystem() {
53 }
54
55 private static boolean hasInitialized = false;
56
57 /**
58 * Initializes Apollo mod for expeditee - prepares all subsystems.
59 */
60 public static void initialize() {
61
62 if (hasInitialized) return;
63
64 AudioSystemLog.println("Initializing...");
65
66 SwingUtilities.invokeLater(new Runnable() {
67 public void run() {
68
69 try {
70
71 URL url = ClassLoader.getSystemResource("org/apollo/icons/mainicon.png");
72
73 if (url != null) {
74 Image img = Toolkit.getDefaultToolkit().getImage(url);
75 Browser._theBrowser.setIconImage(img);
76 }
77
78
79
80 } catch (Exception e) {
81 e.printStackTrace();
82 }
83
84 // Ensure that resources are released before the application is closed.
85 Browser._theBrowser.addWindowListener(new WindowListener() {
86
87 public void windowActivated(WindowEvent e) {
88 }
89
90 public void windowClosed(WindowEvent e) {
91 }
92
93 public void windowClosing(WindowEvent e) {
94 ApolloSystem.shutdown();
95 }
96
97 public void windowDeactivated(WindowEvent e) {
98 }
99
100 public void windowDeiconified(WindowEvent e) {
101 }
102
103 public void windowIconified(WindowEvent e) {
104 }
105
106 public void windowOpened(WindowEvent e) {
107 }
108
109 });
110
111 Browser._theBrowser.getContentPane().removeKeyListener(FrameKeyboardActions.getInstance());
112 Browser._theBrowser.removeKeyListener(FrameKeyboardActions.getInstance());
113
114 Browser._theBrowser.getContentPane().addKeyListener(new AudioFrameKeyboardActions());
115 Browser._theBrowser.addKeyListener(new AudioFrameKeyboardActions());
116
117 // Filter out some special mouse move cases
118 Browser._theBrowser.getMouseEventRouter().removeExpediteeMouseMotionListener(
119 FrameMouseActions.getInstance());
120
121 Browser._theBrowser.getMouseEventRouter().addExpediteeMouseMotionListener(new AudioFrameMouseActions());
122 }
123 });
124
125 // Set title and icon
126 //Browser._theBrowser.etTitle("Apollo");
127
128 AudioSystemLog.println(" Preparing sub-systems...");
129
130 SampledAudioManager.getInstance();
131
132 RecordManager.getInstance();
133
134 ApolloPlaybackMixer.getInstance();
135
136 FrameLayoutDaemon.getInstance();
137
138 FrameRenderPasses.getInstance();
139
140 PlaybackClock.getInstance();
141
142 FramePlaybackBarRenderer.getInstance();
143
144 // Setup for importing audio
145 FrameDNDTransferHandler.getInstance().addCustomFileImporter(
146 new SampledAudioFileImporter());
147
148 AudioSystemLog.println(" Loading actions and agents...");
149
150 // Add apollo actions
151 Actions.LoadMethods(ApolloActions.class);
152
153 Set<String> agents = new HashSet<String>();
154 agents.add(MelodySearch.class.getName());
155
156 Collection<String> omitted = Actions.addAgents(agents);
157
158 for (String agent : omitted) {
159
160 if (agent == null || agent.length() == 0) continue;
161
162 String name = agent;
163
164 int index = agent.lastIndexOf('.');
165 if (index > 0 && agent.length() > (index - 1)) {
166 name = agent.substring(index);
167 }
168 AudioSystemLog.println(" WARNING: Failed to add agent \"" + name + "\"");
169
170 }
171
172 AudioSystemLog.println(" Loading banks...");
173 SoundDesk.getInstance(); // loads upon creation
174
175 AudioSystemLog.println("Initialized");
176
177 hasInitialized = true;
178 }
179
180
181
182
183 /**
184 * Releases all resources currently used by the SampledAudioManager.
185 */
186 private static void shutdown() {
187
188 AudioSystemLog.println("Saving banks...");
189 SoundDesk.getInstance().saveMasterMix();
190 SoundDesk.getInstance().saveMixes();
191
192 AudioSystemLog.println("Releasing resources...");
193
194 ApolloPlaybackMixer.getInstance().releaseResources();
195 RecordManager.getInstance().releaseResources(); // blocking
196 MultiTrackPlaybackController.getInstance().releaseResources();
197
198 AudioSystemLog.println("Audio subsystems shutdown");
199 }
200
201 /**
202 * @return
203 * True if has initialized.
204 */
205 public static boolean isInitialized() {
206 return hasInitialized;
207 }
208
209
210
211 /**
212 * The apollo main just ensures that apollo is initialized during startup.
213 *
214 * This may eventually become redundant once Expeditee implements a plugin system
215 * that allows a plugin / mod to initialize itself at started...
216 *
217 * @param args
218 */
219 public static void main(String[] args) {
220
221 // Run expeditee
222 Browser.main(args);
223
224 // Initialize apollo
225 SwingUtilities.invokeLater(new Runnable() {
226 public void run() {
227 ApolloSystem.initialize();
228 }
229 });
230 }
231
232}
Note: See TracBrowser for help on using the repository browser.