use of Groups...
use of Groups...
- Subject: use of Groups...
- From: Urs Heckmann <email@hidden>
- Date: Fri, 18 Jul 2003 14:32:55 +0200
Hi,
I've slightly recovered from my confusion, so I went through the latest
documentation that came with April SDK.
Now, that caused confusion again 8-)
To reset, here's my summary of the parameter driven multitimbral
MusicDevice:
- for each "part", the MD (MusicDevice...) sets up an Element in
GroupScope, with its own Parameters
- each Element in GroupScope corresponds to a MidiChannel
- Element 0 in GlobalScope handles the "Multi" and has its own
parameters
- the MD returns number of "parts" on GroupScope's GetNumberOfElements()
- for each GroupElement, the host will query Property
kAudioUnitProperty_ParameterList to make avilable multitimbral
automation
- commonly, the list of parameters will be identical for each group,
but one never knows...
- Busses != Groups. Hence the MD is free to utilize busses regardless
of Group issues
Furtherly, there are some things missing/unclear/subject to change:
- There is no way to set up bus properties (ChannelInfo) except for bus
0 - What do Busses > 0 look like?
- Relation/Consistency between Presets/State and
GroupElements/GlobalElement is in discussion at Apple
- for now, State/Presets cover all GroupElements at once
- intermediately, MDs may or may not handle load/store of GroupElement
Presets by themselves
Here are quotes from the docs followed by my questions:
in section "Audio Unit Properties"
Header file: AudioUnit/AudioUnitProperties.h
struct AudioUnitMIDIControlMapping {
UInt16 midiNRPN;
UInt8 midiControl;
UInt8 scope;
AudioUnitElement element;
AudioUnitParameterID parameter;
};
How to setup MidiChannel -> Group mapping, so that MidiChannel of
incomming MidiCCs are routed to the appropriate Group? - Or is the
element argument neglected on GroupScope? (Which means, each Group must
have identical parameters)
in section "Audio Unit State"
An AudioUnitElement specifies an element within a scope. In the input
and output scopes, the element corresponds to an I/O bus of the unit.
For example, in an effect unit, input and output elements 0 can be
thought of as the main input and output, and any additional elements
can be thought of as "side-chain" inputs or outputs. A mixer unit's
multiple inputs are represented as elements in the input scope. The
global scope always contains only one element, with index 0. Group
scope is used in more specialized situations specific to the Audio
Unit.
Please add example for Group = Part in Multitimbral MD. What other
"specialized situations" are considered?
in section "Types of Audio Units - Component Types"
chapter "Side chains or alternate busses"
There is no formal mechanism in place to tag these I/O busses, nor do
we believe that one is required, provided that audio effect-based
units adhere to the convention that bus zero is the main in and out
bus. However, there is one thing missing that will be addressed in a
revision, and that is the ability for an audio unit to publish the
name of any of its busses.
Please make different numbers of channels available for Busses
(multiple Outputs).
in section "Audio Unit Properties"
Header file: AudioUnit/AudioUnitProperties.h
kMusicDeviceProperty_InstrumentCount
Should Property kMusicDeviceProperty_InstrumentCount == Number of
Groups for a multitimbral, preset/parameter based synth? - Or would
Instruments be equivalent to (currently unspecified) GroupScope Presets?
in section "Audio Unit Properties"
Header file: AudioUnit/AudioUnitProperties.h
kMusicDeviceProperty_GroupOutputBus
Type: UInt32
The caller passes in MusicDeviceGroupID for the AudioUnitElement and
kAudioUnitScope_Group for the AudioUnitScope . The caller should
pre-assign the number of busses that are going to be assigned using
this call. Then, when this property is set, any notes
that are produced on a particular group (which can be considered as
equivalent to a MIDI Channel for the moment) will be produced on this
assigned bus. This property is implemented by the DLSMusicDevice.
Huh? - Does the host set the Bus for a Group? - Doesn't make sense, for
example when Bus1 = Mix(with internal effects), Bus2 = Mix(dry), Bus3 =
single out1, Bus4 = single out2 etc.
in section "Music Device Components"
Header file: AudioUnit/MusicDevice.h
Firstly, the extended protocol is note based. A note is started, and
when started it is assigned both an InstrumentID that the note should
be played on as well as the GroupID that this particular note should
belong to. Control messages are sent to a group, as in MIDI, but
because notes are assigned to their instrument when they are begun,
there is no strong corelation between an instrument and a group as
there is in MIDI. The GroupID that a note is assigned to is an
arbitrary value. For maximum flexibility each note can be assigned its
own GroupID, or to control a group of notes with single commands, a
collection of notes can all be assigned to the same GroupID. A note is
finished in one of two ways - the individual note can be stopped, or
all of the notes belonging to a particular group can be stopped with a
single command to that GroupID.
How does that fit in? Is GroupID == GroupElement == Part == MidiChannel
or not?
in section "Music Device Components"
Header file: AudioUnit/MusicDevice.h
Secondly, these calls can be used by specifying the
kAudioUnitScope_Group for the scope. In this usage, the ID's in the
range of 0-127 will correspond with the standard attribution of MIDI
controls, e.g. 1 is modulation wheel, 7 is volume, 9 is pan, 123 is
All Notes Off, etc. For those MIDI controls that have their own
command status (pitch bend, channel pressure), those values are used
with the channel set to zero. Thus, to apply Pitch Bend the
parameterID is 0xE0, for Channel Pressure (commonly called After
Touch), the parameterID is 0xD0. The element is the group number (0-15
would map to the 16 MIDI channels) that the control should be applied
to.
In this usage? - So in Parameter driven usage I hope this isn't MIDI
but Parameters?!?
Sorry for the bandwidth...
Cheers,
;) Urs
_______________________________________________
coreaudio-api mailing list | email@hidden
Help/Unsubscribe/Archives:
http://www.lists.apple.com/mailman/listinfo/coreaudio-api
Do not post admin requests to the list. They will be ignored.