mirror of
https://github.com/genodelabs/genode.git
synced 2025-02-11 05:31:28 +00:00
64 lines
3.1 KiB
Plaintext
64 lines
3.1 KiB
Plaintext
The mixer component implements a simple Audio_out session mixer. Input
|
|
packets from multiple sources are mixed together into one output packet.
|
|
|
|
|
|
The mixer can be tested by executing the 'repos/os/run/mixer.run' run
|
|
script.
|
|
|
|
|
|
Configuration
|
|
=============
|
|
|
|
The mixer gets its configuration via a ROM module called 'mixer.config'.
|
|
The following configuration snippet illustrates its structure:
|
|
|
|
! <config>
|
|
! <default out_volume="75" volume="25" muted="0"/>
|
|
! <channel_list>
|
|
! <channel type="input" label="client" number="0" volume="75" muted="1"/>
|
|
! <channel type="input" label="client" number="1" volume="15" muted="1"/>
|
|
! <channel type="output" label="master" number="0" volume="100" muted="0"/>
|
|
! <channel type="output" label="master" number="1" volume="100" muted="0"/>
|
|
! </channel_list>
|
|
! </config>
|
|
|
|
The '<default>' node is used to set up the initial settings for new clients.
|
|
According to this configuration every new client will start with a volume
|
|
level set to 25 and is not muted. The initial output volume level is set
|
|
to 75 (the volume level ranges from 0 to 100). The '<channel_list>' node
|
|
contains all (pre-)configured channels. Each '<channel>' node has several
|
|
mandatory attributes: 'type' specifies its type and is either 'input'
|
|
or 'output', the 'label' attribute contains the label of a client for an input
|
|
node and the label 'master' for an output node, 'number' specifies the channel
|
|
number (0 for left and 1 for right), the 'volume' attribute sets the volume
|
|
level and 'muted' marks the channel as muted. In addition, there are optional
|
|
read-only channel attributes which are mainly used by the channel list report.
|
|
|
|
|
|
Channel list report
|
|
===================
|
|
|
|
The mixer reports all available channels in its 'channel_list' report.
|
|
The report contains a `<channel_list>' node that is similar to the one
|
|
used in the 'mixer.config':
|
|
|
|
! <channel_list>
|
|
! <channel type="input" label="client0" name="left" number="0" active="1" volume="100" muted="0"/>
|
|
! <channel type="input" label="client0" name="right" number="1" active="1" volume="100" muted="0"/>
|
|
! <channel type="input" label="client1" name="left" number="0" active="0" volume="25" muted="0"/>
|
|
! <channel type="input" label="client1" name="right" number="1" active="0" volume="25" muted="0"/>
|
|
! <channel type="output" label="master" name="left" number="0" active="1" volume="100" muted="0"/>
|
|
! <channel type="output" label="master" name="right" number="1" active="1" volume="100" muted="0"/>
|
|
! </channel_list>
|
|
|
|
Each channel node features all mandatory attributes as well as a few optional
|
|
ones. The 'name' attribute contains the name of the channel. It is the
|
|
alphanumeric description of the numeric 'number' attribute. The 'active'
|
|
attribute indicates whether a channel is currently playing or not.
|
|
|
|
A 'channel_list' report may by used to create a new configuration for the
|
|
mixer. Every time the available channels change, e.g. when a new client
|
|
appears, a new report is generated by the mixer. In return this report can
|
|
then be used to configure the volume level of the new client. A new report
|
|
is also generated after a new configuration has been applied by the mixer.
|