I am still in the process of deciding whether to release AudioExplorer as open-source.  The success of any open-source project depends entirely on the level of interest that the user/developer community shows in the software.  This decision will be made based on feedback acquired during the public testing of AudioExplorer.

To learn more about open source software, visit www.opensource.org.

AudioExplorer is written using Microsoft's '.NET' technology.  The following tables outline AudioExplorer's organization.

 

Summary of AudioExplorer's Code Modules 

Module Name Type Description
AEHelp executable AudioExplorer's Help application.
AudioControls DLL Graphical components for display or audio and frequency data.
AudioDialogs DLL AudioExplorer's dialogs and related controls.
AudioExplorer executable Main application, including child form classes.
AudioProjects DLL Classes for managing AudioExplorer objects - Projects, AudioFiles, Spectra, and NoteMaps..
CommandHelp DLL Framework classes providing menu support, and context-sensitive tooltips and help.
Lib DLL Miscellaneous reusable classes, including support for memory-mapped files, dynamic mathematical function parsing/evaluation, and interoperability with Win32 File functions.
Lics DLL Application licensing
Midi DLL Classes representing MIDI objects - MIDI files, tracks, messages, and devices.
MidiControls DLL Graphical components and dialogs for display and manipulation of MIDI-related information.
MMSys DLL Interoperability with Windows' multimedia subsystem.
Music DLL Definitions of musical entities, such as chords, scales, and arpeggios.
Options DLL Interfaces and helper classes for managing global application configurations.
Toolbars DLL AudioExplorer toolbars.
UILib DLL Miscellaneous reusable user-interface components
WaveAnalytics DLL Classes implementing AudioExplorer's analytical functionality
WaveAudio DLL Classes implementing audio playback, record, file i/o, and access to audio sample data.
 

Download source code for all modules

 

 

Return to Module Summary

 

 AEHelp executable
File Description
App.ico Application icon
AssemblyInfo.cs .NET Assembly Information
AEHelp.cs Creation and running of main Help window.
 

download AEHelp module source code

 

 

Return to Module Summary

 

AudioControls

DLL
File Description
ACEvents.cs Event and interfaces used by several audio controls
AssemblyInfo.cs .NET Assembly Information
AudioCursor.cs An AudioCursor which indicates the current sample/time on a control displaying audio data.
FreqPanel.cs A Control class specialized for displaying signal/frequency plots.
Graphics Folder containing ProjectTree icons.
Menus.cs A set of public helper class defining command constants to which this module's controls respond.
Menus.xml XML definition of the menus used by the controls.
NoteMapPanel.cs UI component to display note maps (high-resolution bitmaps showing time, note/pitch, and signal strength over the duration of a musical selection).
PianoPanel.cs UI component to display frequency/signals on a piano keyboard.
PlotOptions.cs Base option class for plot-type panels.
ProjectTree.cs A TreeView class specialized to display and manipulate AudioExplorer project, audio file, spectrum, and notemap objects.
TimePanel.cs UI component to display
WaveFrequencyGroup.cs UI container component to manage the display of the WavePanel, FreqPanel, PianoPanel, and/or NoteMapPanel controls.
WavePanel.cs UI component for the display and navigation of multi-channel audio waveforms.
WavePanelGroup.cs UI container component for the WavePanel and associated controls.
 

download AudioControls source code

 

 

Return to Module Summary

 

AudioDialogs

DLL
File Description
MidiAssemblerOptionsDlg.cs A three-page dialog managing all options related to the MidiAssembler.
NoteMapOptionDlg.cs A stand-alone dialog for editing settings related to generation of NoteMaps.
OptionXmlDialog.cs The main application configuration dialog, so named for its use of XML and a pair of interfaces (IXmlOption and IOptionXmlDlg) that allow easy snap-in of new configuration editors.
PianoPanelDlg.cs A stand-alone dialog for customizing the PianoPanel display style.
SpectrumOptionDlg.cs A stand-along dialog for configuring the Power Spectrum Analyzer.
UCAudioBase.cs A UserControl base class implementing the common functionality of the Record and Playback user controls.  Implements IOptionXmlDlg.
UCAudioForm.cs UserControl for editing AudioForm display settings.  Implements IOptionXmlDlg.
UCBase.cs The base class for all UserControl components in this module, providing their common appearance.
UCFreqPanel.cs UserControl for editing the FreqPanel display settings.  Derived from UCPlotOptions.  Implements IOptionXmlDlg.
UCMidiAssembler.cs UserControl configuring the MidiAssembler.  Implements IOptionXmlDlg.
UCNoteMap.cs UserControl for defining NoteMap properties.  Implements IOptionXmlDlg.
UCNoteMapPanel.cs UserControl for customizing the NoteMapPanel appearance.  Derived from UCPlotOptions.  Implements IOptionXmlDlg.
UCNoteProcessor.cs UserControl for configuring the NoteProcessor.  Implements IOptionXmlDlg.
UCOvertoneProcessor.cs UserControl for configuring the OvertoneProcessor.  Implements IOptionXmlDlg.
UCPianoPanel.cs UserControl for customizing the appearance of the PianoPanel.  Implements IOptionXmlDlg.
UCPlay.cs UserControl for configuring audio playback.  Derived from UCAudioBase.  Implements IOptionXmlDlg.
UCPlotOptions.cs Base UserControl class implementing configuration of common plot options.
UCPresX.cs UserControl for configuration of audio cache generation.  Implements IOptionXmlDlg.
UCProjectDir.cs UserControl for setting AudioExplorer project file locations.  Implements IOptionXmlDlg.
UCRecord.cs UserControl for configuring audio recording.  Derived from UCAudioBase.  Implements IOptionXmlDlg.
UCTimePanel.cs UserControl for customizing the appearance of the TimeWindow.  Implements IOptionXmlDlg.
UCTransformOptions.cs UserControl for configuring the Power Spectrum Analyzer.  Implements IOptionXmlDlg.
UCWavePanel.cs UserControl for customizing the appearance of the WavePanel.  Implements IOptionXmlDlg.
UCWaveTransform.cs UserControl for configuring interactive analysis of audio samples.  Implements IOptionXmlDlg.
AssemblyInfo.cs .NET assembly information relevant to this assembly.
AudioProjectOptions.cs A dialog for naming Audio Projects.
NewAudioObjectDlg.cs A dialog for setting up batch generation of AudioExplorer data.
ObjPropertiesDlg.cs A dialog for displaying text lists.
ProgressDialog.cs A dialog providing feedback during lengthy operations.
 

download AudioDialogs source code

 

 

Return to Module Summary

 

AudioExplorer

executable
File Description
App.ico Application icon
AssemblyInfo.cs .NET assembly information
AudioForm.cs AudioForm MDI child form class, derived from BaseChild.  AudioForm is AudioExplorer's primary audio window.
BaseChild.cs Base class for all MDI child form classes.  Provides common appearance and functionality, and essential form-related utility methods.
DriveSpacePanel.cs A StatusBarPanel specialization to monitor and display available space for AudioExplorer data.
MainForm.cs AudioExplorer's main, MDI-parent window.  Also contains AudioExplorer's Main executable method.
Menus.cs A set of public helper class defining command constants to which this module's windows respond.
Menus.xml XML definition of the menus used by AudioExplorer windows.
MidiWindow.cs The MidiWindow form class.  Implements display, playback, and management of generated MIDI data. 
NoteMapForm.cs An MDI child window specialized for display of NoteMaps.
Options.cs Various classes for managing and persisting application state.
RFFTW2dll.dll A dynamic link library implementing (lightning!) fast fourier transforms.  This DLL is compiled from free software provided by FFTW and is distributed under the terms of the GNU General Public License.
RTAudio.cs A class managing real-time audio record and playback.
SpectrumDetails.cs A form class for graphic display of audio signal-strength histograms.
SpectrumForm.cs An MDI child form class for interactive display of AudioExplorer's spectra.
SplashForm.cs The splash window displayed when AudioExplorer starts.
SplashScreen.gif The graphic displayed in the SplashForm.
TimeWindow.cs A form class for display of the current audio time.
 

download AudioExplorer source code

 

 

Return to Module Summary

 

AudioProjects

DLL
File Description
AssemblyInfo.cs .NET assembly information
AudioFile.cs A class derived from AudioObject which provides methods for accessing and managing AudioExplorer's AudioFile object.
AudioObject.cs The base class for AudioProject, AudioFile, NoteMap, and Spectrum classes.  Implements  functionality common to all AudioExplorer objects.
AudioProject.cs A class derived from AudioObject which provides methods for accessing and managing AudioExplorer's projects.
NoteMap.cs A class derived from AudioObject which provides methods for accessing and managing the NoteMap objects.
Spectrum.cs A class derived from AudioObject which provides methods for accessing and managing the Spectrum objects.
Task.cs A class which implements multithreaded batch generation of AudioExplorer objects.
 

download AudioProjects source code

 

 

Return to Module Summary

 

CommandHelp

DLL
File Description
AssemblyInfo.cs .NET assembly information
CHBaseDlg.cs A Form-derived class implementing automatic display of tool-tips and access to context-sensitive help for all embedded controls.  Used as a base class for dialogs.
CHBaseUC.cs A UserControl-derived class implementing automatic display of tool-tips and access to context-sensitive help for all embedded controls.  Used as a base class for user controls.
CmdHelp.cs Helper class associates command ids with help text.
CmdHelp.xml Database of command ids and help text.
CommandSource.cs Definition of the ICommandSource and ICommandSink interfaces, and supporting delegates, events, and event argument classes.
ControlHelp.cs A helper class providing context-sensitive help for any control embedded in a CHBaseDlg- or CHBaseUC-derived container.
ControlHelp.xml A database associating control names and contexts with help text and help URLs.
HelpForm.cs A Form-derived class implementing WebBrowser functionality for display of web-based help files.  This is the basis of the AEHelp application.
XmlMenus.cs Defines several classes derived from Menu, ContextMenu, and MenuItem which provide support for menu generation from XML resources and integration with the ICommandSource interface.
 

Download CommandHelp source code

 

 

Return to Module Summary

 

Lib

DLL
File Description
AssemblyInfo.cs .NET assembly information
Evaluator.cs A fast mathematical expression parser featuring extensibility, support for symbolic substitution and array indexing.
FileMappedMemory.cs A C# class using the Win32 FileMapping API and Interop Services to provide file-based virtual memory.
FileUtil.cs Several classes for working with filenames.
Interfaces.cs General-purpose interfaces, delegates, and event argument classes.
Math.cs Math-related classes and static functions.  Includes class Histogram for bucketting data into histograms.
Memory.cs A class for accessing some of the useful Win32 memory functions.
StringList.cs Classes for tokenizing strings and managing lists of strings.
Strings.cs A few useful string functions.
Vector.cs A C# mockery of the C++ vector<> template. 
Win32File.cs A class providing access to the full range of Win32 File functions.
 

Download Lib source code

 

 

Return to Module Summary

 

Lics

DLL
File Description
AssemblyInfo.cs .NET assembly information
Licensing.cs LicenseProvider implementation for AudioExplorer
 

Download Lics source code

 

 

Return to Module Summary

 

Midi

DLL
File Description
AssemblyInfo.cs .NET assembly information
EventList.cs A time-ordered list of MIDI events, providing event searching and lookup, and management of MIDI timing.  Base class for MidiTrack.
Midi.cs A set of utility classes defining MIDI constants and note names.
MidiBuffer.cs Classes providing support for buffered multimedia i/o.
MidiChunk.cs Classes providing i/o of header data in standard MIDI files.
MidiDevice.cs Classes implementing MIDI recording and playback.
MidiEvt.cs Classes encapsulating MIDI messages, including channel, meta, and sysex messages.
MidiFile.cs A class implementing the standard MIDI file.
MidiTrack.cs Classes encapsulating MIDI tracks and metatracks.
Timing.cs Classes and structures for working with MIDI times, tempos, and time signatures.
 

Download Midi source code

 

 

Return to Module Summary

 

MidiControls

DLL
File Description
AssemblyInfo.cs .NET assembly information
ChannelMsgFilterDlg.cs A dialog allowing selection of filtering criteria for MIDI channel messages.
MBTControl.cs A UserControl for the display and setting of MIDI timing in measure:beat:tick format.
Menus.cs A set of public helper class defining command constants to which this module's controls respond.
Menus.xml XML definition of the menus used by the controls.
MidiListView.cs A ListView-derived class for display of MIDI EventLists.
MidiNoteComboBox.cs A ComboBox-derived class for selection of MIDI notes.
MidiNotePanel.cs A piano-roll style display of MIDI messages supporting note editing and optimization of timing.
MidiNoteUpDown.cs A DomainUpDown-derived class for selection of MIDI notes.
MNPControls.cs A toolbar-style UserControl which interacts with the MidiNotePanel.
NoteEditDlg.cs A dialog for editing MIDI  note messages.
NoteTimingListView.cs A ListView-derived class presenting note/timing statistics.
OptimizeProgressDlg.cs A progress dialog displayed during lengthy optimization loops.
OptimizerDlg.cs A dialog for configuring the timing optimizer.
OptimizerResultForm.cs A Form-derived class displaying the results of a timing optimization.
ORFControls.cs A toolbar-style UserControl which interacts with the OptimizerResultForm.
 

Download MidiControls source code

 

 

Return to Module Summary

 

MMSys

DLL
File Description
AssemblyInfo.cs .NET assembly information
Errors.cs Classes defining multimedia error constants, and exception classes.
MIDI.cs Structures classes implementing interoperability with Windows multimedia midi functions.
MMIO.cs Structures classes implementing interoperability with Windows multimedia mmio functions.
WAVE.cs Structures classes implementing interoperability with Windows multimedia wave functions.
 

Download MMSys source code

 

 

Return to Module Summary

 

Music

DLL
File Description
AssemblyInfo.cs .NET assembly information
Music.cs Definition of classes encapsulating properties of scales, "Keys", chords, and other musical entities.
NoteFreq.cs Static classes for converting MIDI note numbers to frequencies, and vice versa.
 

Download Music source code

 

 

Return to Module Summary

 

Options

DLL
File Description
AssemblyInfo.cs .NET assembly information
Options.cs Definition of the IXmlOption and IXmlDlgControl interfaces for persistence and editing of global application preferences.  Definition of helper classes to support this framework.
 

Download Options source code

 

 

Return to Module Summary

 

ToolBars

DLL
File Description
AssemblyInfo.cs .NET assembly information
FileOps.png Graphics for file-related toolbar buttons.
Images.cs A class which generates ImageList objects from single bitmap resources.
MidiBarImages.png Images used in the MidiWindow toolbar.
MidiOptionBar.cs A toolbar-style UserControl used in the MidiWindow.
ToolBars.xml XML definitions of toolbars.
Transport32.png 32-pixel images used in the TimeWindow.
TransportBar.cs The XmlToolBar  used in the TimeWindow.
WavePanel.png Images for toolbar buttons related to the WavePanel.
XmlToolBar.cs A ToolBar-derived class which can be created from an XML definition, implementing the ICommandSource interface.
 

Download ToolBars source code

 

 

Return to Module Summary

 

UILib

DLL
File Description
AssemblyInfo.cs .NET assembly information
Axes.cs Class with static functions for calculating optimal tick intervals on linear and logarithmic axes.
BaseDialog.cs Form-derived class customized to serve as a base class for dialogs.
CharsetTextBox.cs A TextBox-derived class limiting entry to specific character sets, including filtering for numeric types.
ColorComboBox.cs A ComboBox-derived class for selection of colors.
ColorTools.cs A utility class providing color-related functions, such as "lightening", "darkening", or "contrasting". 
ControlDragger.cs A helper class which implements "dragging" of a control by tracking coordinate changes and drawing a tracking rectangle.
DataPlot.cs A custom control class for plotting (X,Y) data using symbol- or line-styles.
FileListBox.cs A ListBox-derived class specialized for display of file paths.
FolderBrowser.cs Classes providing access to Window's SHBrowseForFolder function.
GrStringFormat.cs A utility class bundling Graphics-related objects and methods for drawing strings.
HistPanel.cs A custom control specialized to plot histograms.
LockButton.cs A custom control "button" drawn in the shape of a padlock which toggles between locked and unlocked states.
MouseTracker.cs A helper class which provides drag-selection and zooming functionality to an associated control.
ProgressBar.cs A custom control serving as a progress indicator.
Win32GDI.cs A class providing interoperability with GDI.
 

Download UILib source code

 

 

Return to Module Summary

 

WaveAnalytics

DLL
File Description
AssemblyInfo.cs .NET assembly information
AudioActivity.cs Definition of the IAudioActivity interface used in all of AudioExplorer's realtime audio functions, and two classes implementing this interface, Recorder and Player.  In addition to their obvious record/playback functionality, these classes implement full spectral analysis of the incoming or outgoing audio stream, as required by the IAudioActivity interface.
FFT.cs Classes for interoperability with RFFTW2dll, and classes to use this basic FFT functionality to support and perform power-spectrum analysis.
RTMidiAssembler.cs The RTMidiAssembler class, implementing real-time MIDI generation from timed frequency spectra.
NoteMap.cs A class for generating and managing NoteMaps, high-resolution maps of pitch vs. signal strength of the duration of a musical selection.
SpectralFile.cs A class for generating, storing to disk, and accessing AudioExplorers "Spectrum" object.  This object represents a collection of frequency spectra sampled at regular time intervals over the duration of a musical selection.
SpectrumAnalyzer.cs A class which performs batch-style spectral analysis of data from an audio source.
TimedMusic.cs A pair of classes which provide "time-stamped" frequency and MIDI data, allowing synchronization of all of AudioExplorer's displays with the real-time incoming or outgoing audio.
TransformQueue.cs Essential utility classes for real-time audio analysis, including a circular buffer for efficient storage of transient audio data, and a class performing "just in time" analysis of this transient data. 
WaveTransform.cs Classes for configuring, describing, and generating frequency spectra from audio data.
 

download WaveAnalytics source code

 

 

Return to Module Summary

 

WaveAudio

DLL
File Description
AssemblyInfo.cs .NET assembly information
Audio.cs A static class providing general support for AudioExplorer's audio functions (e.g., tests for valid audio formats, methods for loading audio, etc.).
AudioInterfaces.cs Delegates and interface related to audio, especially the IAudioFormat and IAudioSource interfaces used throughout AudioExplorer.
Tools.cs General audio tools, e.g., a class for formatting audio times.
WaveBuffer.cs Classes for managing the audio buffers used during multimedia operations.
WaveDevice.cs Classes implementing audio recording, playback, and random access to audio files.
WaveFile.cs Classes specialized for efficient access and streaming of WAV format audio files.
WaveHeader.cs Classes encapsulating RIFF headers.
WavePresX.cs Classes for generating and accessing audio cache files, statistical descriptions of audio waveforms which allow fast display at any zoom level.
 

Download WaveAudio source code

 

Return to Module Summary