CORTEX documentation index
 
 
release   dr2.0.2
maintained by   Eric Moon, The Mead Group, Inc.
last updated   21 October, 1999
For current project info, visit http://www.meadgroup.com/cortex

Installation
Release Notes
 

 
1)    Overview & General Usage
 
[up] [down]
the routing
window

When started, Cortex displays a main routing window and a palette of available add-on nodes (as well as one or more floating windows called "inspectors.") The routing window shows all the currently active media nodes (these are referred to as 'Live Nodes'.) Each node is shown as a gray tile, with the node's name and ID number displayed at the bottom (if there isn't room for the full name, hold the mouse over it for a moment and it will be displayed in a pop-up tip.) The node's connection points -- inputs and outputs -- are displayed as rectangular notches in the tile: inputs on the left, outputs on the right. Connection points in use are shaded gray; available (unconnected) ones are green. Hold the mouse over a point for a moment and a pop-up tip will display the name of the point and its format (the format is currently displayed in a rather unfriendly form.)

Connections between nodes are represented by 'wires': blue lines connecting an input on one node to an output on another. Node tiles and wires can be selected by a single mouse click; when a node is selected, all its outbound wires are selected as well.

Node tiles can be dragged around in the routing window: you may wish to rearrange them to clarify the relationships between nodes you're interested in. Cortex tries to position the nodes in an intuitive way: producers are placed in the leftmost row, consumers in the rightmost, and filters somewhere in the middle.

making
connections

New connections can be made by dragging between two connection points (it doesn't matter if you drag from an input or an output.) The point you dragged from will blink red; when the mouse is over a possible destination point, it will be filled in solid red. (This doesn't necessarily mean the connection will succeed, just that you've picked an input and an output.) Release the mouse button to attempt the connection: a new wire will appear if it worked, or an alert window will pop up if it failed.

To disconnect two nodes, click on a wire and press the <delete> key.

(!) new in dr2: Cortex now locks the connection between the system mixer and the audio output. The Media Server doesn't look kindly upon apps that break that connection.

dormant
nodes

Now for a look at the second window: labeled 'Media Add-Ons', it displays all the media nodes available in add-ons (these are also known as 'Dormant Nodes'.) The type(s) of media that each node can produce or consume are indicated by the presence of one or more icons, which from left to right mean:

  • audio producer
  • video producer
  • audio consumer
  • video consumer

To create, or instantiate, a new copy of a given dormant node, drag from its entry to a spot in the routing window. If Cortex was able to successfully create a new instance of the node, a corresponding tile will appear in the routing window.

Danger! Cortex currently allows you to instantiate any dormant node you want. Some add-on nodes, such as sound-card inputs and outputs, can't be created more than once, and instantiating a new copy will break the existing one. If this happens, the 'Restart Media Services' in the Media preferences panel should return the system to a usable state.

(!) new in dr2: to create a node capable of playing a given media file (audio or video), drag it into the routing window. Note that if you create a video-producer in this fashion, it can't be hooked straight up to a raw video output, since it produces compressed video. You can use the "Decoder Node" add-on to produce raw video that can be directly displayed in the Video Window (and hopefully a video output as well -- but I don't have one to test with, so no guarantees!) Note as well that the Video Window must be started manually before it'll display anything.

To delete a node, click on it (to select the node), then press the <delete> key. You can also click the right mouse button on the node to pop up a menu of operations, and pick 'Release' (which is so far the only item in the menu.

the group
inspector

(!) new in dr2: The transport controls (start/stop) are now located in a separate floating window called the "group inspector". When one or more nodes are connected, Cortex binds them together into a group, allowing you to control the nodes in unison. The group inspector can be shown or hidden via the "Window/Group Inspector" menu option in the main routing window.

The upper-left quadrant of the group inspector lists information on the currently selected group, if any. Selecting a node in the routing window causes its group -- if it has one -- to be selected in the inspector. You can click on the group name to edit it; there's not much reason to do so yet, but future Cortex revisions may allow you to save and restore groups of add-on nodes, in which case names will come in quite handy. The bottom of this status display may be used to show error information in a future release.

In the upper-right are the transport controls: pretty self-explanatory except for the "Preroll" button. This tells all the nodes in the group to get ready to play -- a properly implemented media node should be able to do as much pre-processing as it needs to start instantly.

The rest of the group inspector is devoted to settings. The "Roll from" and "to" values allow you to set a range over which the group will play. If the "to" setting is less than or equal to the "from" setting, the group will play unhindered until you stop it. If you do specify a valid range, playback will stop when the "to" position is released, unless one or more nodes in the group have "cycle" enabled; read more about that below.

The "Run Mode" control lets you tell the nodes how to cope when they fall behind (or, if "Offline", to ignore the concept of real time altogether.) This setting may be overridden on a node-by-node basis in the node inspector.

Note: offline mode isn't yet supported. This is a high priority for the next release!

The "Time Source" control lets you set where the nodes in the group get their sense of time.

the node
inspector

(!) new in dr2: double-clicking a node now brings up a floating window called the "node inspector". This allows you to change settings specific to that node, including its parameters (if the node has any.)

As in the group inspector, the upper-left quadrant shows information on the node -- sorry, you can't change a node's name. Also as in the group inspector, the error display isn't implemented yet.

To the right of the status display is a checkbox labeled "Cycle". When checked, the node will repeatedly play the region defined by the group manager's "Roll to/from" controls. The loop won't be perfectly accurate at short loop lengths, but cycle mode is useful for stress-testing a node's "seek" abilities, or for keeping a file-player node running. The "Roll to/from" controls are live while cycling nodes are running, although Cortex gives up trying to cycle a node if the loop length is too small (less than one millisecond.)

The "Preroll" button behaves just like the group inspector button: the node is asked to prepare to start running, but it's not actually started.

The "Run Mode" control behaves like the group inspector control of the same name. The default option is to use the group's run mode.

At the bottom-left of the node inspector are two toggle buttons. The first is labeled "Lock": it determines whether or not the node inspector will "follow" the routing window's selection. If "Lock" is turned off, selecting a node in the routing window will also select it in the node inspector. If "Lock" is on, you'll need to double-click a node in the routing window to open an inspector window for it. You may open as many node inspector windows as you want; if more than one has "Lock" disabled, they'll all follow the selection in the routing window.

The second toggle button is labeled "Parameters". If the node has no user-controllable settings, the button will be grayed out. If parameters are available, clicking this button will expand the inspector window to display the controls for the node. With "Lock" turned off and "Parameters" on, the effect is a live control panel that updates to follow your node selection in the Routing Window.

sample
nodes

Cortex comes with several sample add-on nodes. Two of them, LoggingConsumer and ToneProducer, are based on sample code from the Be Developer Newsletter. I've made a few changes to them to implement add-on support, and to make them a bit more flexible. Since they are very useful testbed nodes, future Cortex releases will likely include further improved versions of them.

Also included is a sample audio filter, Flanger. It is somewhat limited: only floating-point audio is supported (the same is true of ToneProducer.) It does include a control panel. Try instantiating ToneProducer and Flanger, connecting them together, then connecting Flanger's output to the system mixer. This is a simple example of the Media Kit's flexibility. (For truly warped sounds, try connecting a few Flangers in a row!)

(!) new in dr2: to help ease format-conflict pains, AudioAdapter converts from one raw audio format to another on the fly. In most cases you can simply connect nodes to either side of it. If you get a "Bad media format" error, you may need to help AudioAdapter decide the format: in the Parameters section of the node inspector, you can pick format requirements. (Note that currently you HAVE to fully specify the output format to get it to connect to the system mixer; I'm working on a fix for this inconvenience.)


 
2)    Known Bugs (& Missing Features)
 
[up] [down]

back-end (NodeManager)

  • no support for offline mode
routing window
  • the workspace doesn't autoscroll as nodes are dragged.

add-on palette
  • icons are nonintuitive

  • no access to add-on info, detailed input/output format info, etc.

  • empty status bar

AudioAdapter
  • format negotiation needs some work (can't connect output to the system mixer without help from the user.)

  • needs a LOT of buffers (>16) if input is connected to a system audio-player node that's being cycled (looped). probably a bug with the file-player node, but I need to do some more research...

ToneProducer
  • only floating-point output supported.

LoggingConsumer
  • . . .
Flanger
  • weird noise (aliasing?) given high-pitched tones as input.

  • only floating-point output supported.


 
3)    Notes for Developers
 
[up] [down]

See "Cortex DEVELOPER NOTES" (provided in Gobe Productive and HTML format) for up-to-date information on reusable program components, and other developer tidbits.

Comments/questions?
Let me know: eamoon@meadgroup.com
 




Copyright © 1999, The Mead Group, Inc.
All rights reserved.