• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
use of Groups...
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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.

  • Follow-Ups:
    • Re: use of Groups...
      • From: Chris Reed <email@hidden>
  • Prev by Date: Re: Hardware control surfaces (was Re: Private Parameters)
  • Next by Date: Re: Virtual Endpoint Exception in callback
  • Previous by thread: Re: Sequencing the setting of AUPresets
  • Next by thread: Re: use of Groups...
  • Index(es):
    • Date
    • Thread