tomwalters@268
|
1 /*!
|
tomwalters@268
|
2 \mainpage AIM-C developer documentation
|
tomwalters@268
|
3
|
tomwalters@281
|
4 \section intro_sec Introduction
|
tomwalters@268
|
5 AIM-C is a real-time version of the the auditory image model (AIM)
|
tomwalters@268
|
6 developed at the <a href="http://www.pdn.cam.ac.uk/groups/cnbh/">
|
tomwalters@268
|
7 Centre for the Neural Basis of Hearing</a>.
|
tomwalters@268
|
8
|
tomwalters@281
|
9 The main development site for AIM-C is at http://aimc.acousticscale.org/. The
|
tomwalters@281
|
10 code is available at http://code.google.com/p/aimc/.
|
tomwalters@281
|
11
|
tomwalters@281
|
12 \section design_sec Design
|
tomwalters@268
|
13 AIM-C uses a block-based processing scheme. A mono input signal is
|
tomwalters@268
|
14 split into short segments, which are sequentially 'pushed' through the
|
tomwalters@268
|
15 processing pipeline. The pipeline consists of a number of modules in a
|
tomwalters@268
|
16 tree structure.
|
tomwalters@268
|
17
|
tomwalters@268
|
18 The basic unit of data in AIM-C is the signal bank, and the basic
|
tomwalters@268
|
19 processing unit is the module. A signal bank represents a short
|
tomwalters@268
|
20 segment, or 'frame', of an audio signal with multiple
|
tomwalters@268
|
21 channels. Modules generally take a frame (represented as a signal
|
tomwalters@268
|
22 bank) as input, and generate zero, one, or more signal bank frames as
|
tomwalters@281
|
23 output. Each module maintains a list of 'target' modules, to which
|
tomwalters@281
|
24 it 'pushes' the frames that it generates. Each module
|
tomwalters@268
|
25 performs processing on the output of the previous module, and in turn,
|
tomwalters@268
|
26 push the output that they produce to their targets.
|
tomwalters@268
|
27
|
tomwalters@281
|
28 This feed-forward, tree-like system allows modules to generate as many output
|
tomwalters@281
|
29 frames as necessary for each input frame. It also allows for easy 'rewiring'
|
tomwalters@281
|
30 of chains of modules. For example, a 'viewer' module could be temporarily
|
tomwalters@281
|
31 added as a target of another module while the user was interested in seeing
|
tomwalters@281
|
32 that module's output.
|
tomwalters@268
|
33
|
tomwalters@281
|
34 Since each module is an instance of a class, it can retain the necessary state
|
tomwalters@281
|
35 variables within the class between calls.
|
tomwalters@268
|
36
|
tomwalters@281
|
37 \section style_sec Coding style
|
tomwalters@268
|
38
|
tomwalters@268
|
39 For the most part, AIM-C now follows the <a
|
tomwalters@268
|
40 href="http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml">
|
tomwalters@268
|
41 Google C++ style guide</a>. The original (2006-2009) AIM-C codebase
|
tomwalters@268
|
42 used a different style, and so you may find some files which still
|
tomwalters@268
|
43 follow the older conventions. New code should adhere to the Google style
|
tomwalters@268
|
44 guide.
|
tomwalters@268
|
45
|
tomwalters@268
|
46
|
tomwalters@268
|
47 */
|