This page contains obsolete information, as the OSC functionality is no longer present in FFADO. It is retained for your inspiration only :-D

GenericMixer Osc Path

This allows basic control of the BeBoB internal mixer.

This description is for the current code (r462). It is a work in progress.

Note

The idea is that the OSC space exposed would be device independant, something you can't really say about this. This is more an experimentation thing to see how we're going to do it.

The GenericMixer? has 4 subpaths:

 /GenericMixer/Selector/[id]/
 /GenericMixer/Feature/[id]/
 /GenericMixer/Processor/[id]/
 /GenericMixer/Codec/[id]/

Note: The only subfunction implemented for the Feature FB is the volume subfunction.

Note: The Processor and Codec paths are not implemented yet.

Note: id's start from 1.

Global commands

list

Will return the function blocks detected in the device as child paths.

Example: ListOscSpaceExamplePhase88

Selector

Selectors select between multiple signal inputs. They have one output and multiple inputs and connect one of the inputs to the output. Currently you need a-priori knowledge of what selector controls what device function.

Note: port indexing starts from 0

params

Request:

 Arg1 (string): "params"

Response:

 Arg1 (string): param 1 name
 ...
 Argn (string): param n name

get value

Request:

 Arg1 (string): "get"
 Arg2 (string): "value"

Response:

 Arg1 (int)   : current selector value

set value

Request:

 Arg1 (string): "set"
 Arg2 (string): "value"
 Arg3 (int)   : selected input index

Response:

 Nothing

Example:

This switches the Phase88 input 7/8 to the backside line inputs:

 /devicemanager/dev0/GenericMixer/Selector/10/ set value 0

This switches the Phase88 input 7/8 to the front mic inputs:

 /devicemanager/dev0/GenericMixer/Selector/10/ set value 1

Feature

params

Request:

 Arg1 (string): "params"

Response:

 Arg1 (string): param 1 name
 ...
 Argn (string): param n name

get volume

Request:

 Arg1 (string): "get"
 Arg2 (string): "volume"
 Arg3 (int)   : audio channel

Response:

 Arg1 (int)   : current volume value

set volume

Request:

 Arg1 (string): "set"
 Arg2 (string): "volume"
 Arg3 (int)   : audio channel
 Arg4 (int)   : volume level

Response:

 Nothing

The channel argument seems to signify the following: (Phase88, QuataFire)

 0 = Left+Right
 1 = Left
 2 = Right

The volume argument is a 16bit 2's complement integer value:

 ( 32766) 0x7FFE =  127.9922 dB
          ...
 (     2) 0x0002 =    0.0078 dB
 (     1) 0x0001 =    0.0039 dB
 (     0) 0x0000 =    0.0000 dB
 (    -1) 0xFFFF = -  0.0039 dB
 (    -2) 0xFFFE = -  0.0078 dB
          ...
 (-32766) 0x8002 = -127.9922 dB
 (-32767) 0x8001 = -127.9961 dB

          0x8000 = -    inf  dB