Ares consists of several modules to
- enable reuse for several applications or plugins
- separate concerns clearly
- provide structure
Those modules and their purpose are described here for a quick reference and overview over the Ares architecture.
Contains the data model for the Editor and Player. Persistency of the model is in a simple XML format; there are some helper functions to read and write it.
Contains the settings for the Editor and Player (what can be changed in the settings dialog). Of particular importance are the music and sound directories. The 'basic' settings store where to find the other settings. The settings are also stored in a simple XML file.
Contains the code to deal the music tags database, which is a SQLite database file located in the music root directory; the schema can be seen in the file Tags.uxf which can be viewed e.g. with UMLet. The module is also used by the online tags database since much of the logic can be shared.
Contains GUI used both by the Editor and the Player: in particular the settings dialog and the about dialog, but also some utilities.
Contains logic to share data (especially settings) between open instances of Editor and Player using shared memory.
Contains checks which test the model for errors which are shown in the Editor error window or in the Player messages.
Contains code to communicate with a web server (sourceforge) in particular for the update mechanism (new versions) and the news.
Contains a small executable to change Windows security settings (e.g. firewall) for the web server. This must be a separate executable because it needs elevated rights. It receives the input through command-line parameters and writes output (if there are errors) to a temporary file.
Contains all the logic to actually play the elements in the projects. The low-level playing of the files and applying effects to the individual files is made using the Un4Seen Bass library wrapped by Bass .Net. This module is also used in the Editor so that the user can test the elements there.
Contains common code for the players, in particular the communication with the Controller and the web server for using a browser to control the player. The web server is implemented using ServiceStack. Communication with the specialized Controllers is made through a simple custom protocol based on TCP.
Contains the Player GUI, a Windows Forms program.
Contains the command line player executable. Based on Ares.Players. Handles input (mainly command line parameters) and output (to the console).
Contains the code for the Editor to communicate with various online services to import tags. Tags can be imported from MusicBrainz and from RPGMusicTags. In both cases, the music is identified using the Chromaprint fingerprinting algorithm.
Contains most of the logic of the Editor in form of action classes which follow the command pattern. Using this pattern allows a simple implementation of undo and redo functionality.
Contains Windows Forms controls to edit the different elements of a Ares project. The actual editors are composed of these controls.
Contains the Editor executable, including the main GUI, File and Project Explorer windows, editor windows for the project elements and several dialogs. The main GUI uses the DockPanel Suite for the window management.
Contains common code for .NET based Controllers. Mainly handles the communication with the Player and the current state of the Controller.
Contains the code for the MeisterGeister plugin, which is mainly a controller GUI inside a Windows Forms UserControl.
Contains the code for the MediaPortal plugin. This is in effect a simple GUI which acts as a proxy for the Controllers: it starts a command line player in the background, receives commands through one TCP socket and puts them through to another TCP socket.
These modules are located in the subdirectory Ares.Controller.
Contains common code for the controllers. Mainly this concerns the communication with the Player and the state of the Controller.
Contains the controller GUI, which is based on Swing.
Contains the Android Controller app.
Contains the services for the web server of the online tags database. ServiceStack is used to implement the web server.
An ASP.NET project to host the web server in IIS.
An executable to host the web server locally for tests.