aboutsummaryrefslogtreecommitdiffstats
path: root/conf.d/alsa/asoundrc.sample
blob: 1786c46d7c9cc94dd744702665775f5a7e20bad1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# 
# Author: Fulup Ar Foll
# Object: PCM hook type 
#
# Test  :  Note: Jabra_USB=hw:v1340
#  Check SoundCard  speaker-test -Dhw:v1340 -c2 -twav
#  Check MixerPCM   speaker-test -DMyMixerPCM -c2 -twav 
#  Check HookPCM    speaker-test -DMyNavigationHook -c2 -twav 
#  Check NavPCM     speaker-test -DMyNavPCM -c2 -twav
#  MultiMedia aplay -DDMyNavPCM /usr/share/sounds/alsa/test.wav
#
# Bug/Feature: when softvol control is initialised from plugin and not
#    from AGL binding. At 1st run ctl has invalid TLV and cannot be
#    use. Bypass Solution: 
#     * start audio-binder before playing sound (binding create control before softvol plugin)
#     * run a dummy aplay -DMyNavPCM "" to get a clean control
#
# References: https://www.spinics.net/lists/alsa-devel/msg54235.html
# --------------------------------------------------------------------

# Mixer PCM allow to play multiple stream simultaneously
# ------------------------------------------------------
pcm.MyMixerPCM { 
    type dmix 
    ipc_key 1024
    ipc_key_add_uid false
    ipc_perm 0666   # mixing for all users

    # Define target effective sound card (cannot be a plugin)
    slave { 
        pcm "hw:v1340"  #Jabra Solmate 
        period_time 0 
        period_size 1024 
        buffer_size 8192
        rate 44100
    }

    # DMIX can only map two channels
    bindings { 
        0 0 
        1 1 
    } 
} 

# Define a Hook_type with a private sharelib
# -------------------------------------------
pcm_hook_type.MyHookPlugin {
    install "AlsaInstallHook" 
    lib "/home/fulup/Workspace/AGL-AppFW/audio-bindings-dev/build/Alsa-Plugin/Alsa-Policy-Hook/policy_hook_cb.so"
}

# Define a HookedPCM that point to Hook_type sharelib
# ----------------------------------------------------
pcm.MyNavigationHook {
    type hooks
    slave.pcm "MyMixerPCM"

    # Defined used hook sharelib and provide arguments/config to install func
    hooks.0 {
        type "MyHookPlugin"
        hook_args {
            verbose true # print few log messages (default false);

            # Every Call should return OK in order PCM to open (default timeout 100ms)
            uri   "ws://localhost:1234/api?token='audio-agent-token'"
            request {
                # Request autorisation to write on navigation 
                RequestNavigation {
                    api   "polctl"
                    verb  "navigation"
                } 
                # subscribe to Audio Agent Event
                SubscriveEvents {
                    api   "polctl"
                    verb  "monitor"
                }
                TestAutoStop {
                    api   "polctl"
                    verb  "event_test"
                    query "{'label':'stop', 'delay':10000}"
                }
                TestAutoStart {
                    api   "polctl"
                    verb  "event_test"
                    query "{'label':'stop', 'delay':20000}"
                }
                # start a test pause/resume not supported by every hardware
                TestPauseResume {
                    api   "polctl"
                    verb  "event_test"
                    query "{'label':'pause', 'delay':3000, 'count':10}"
                } 
            }
        }
    }
}

# If hardware does not support mixer emulate it with softvol
# -----------------------------------------------------------
pcm.MyMultimediaPCM {
    type        softvol

    # Point Slave on HOOK for policies control
    slave.pcm   "MyNavigationHook"

    # resolution=HAL(valMax+1) (default=256)
    resolution 256

    # name should match with HAL but do not set card=xx
    control.name    "Playback Navigation"

    # Make this plugin visible from aplay -L
    hint {
      show on
      description "Navigation SolftVol PCM"
    }    
}

# If hardware does not support mixer emulate it with softvol
# -----------------------------------------------------------
pcm.MyNavPCM {
    type        softvol

    # Point Slave on HOOK for policies control
    slave.pcm   "MyNavigationHook"

    # resolution=HAL(valMax+1) (default=256)
    resolution 256

    # name should match with HAL but do not set card=xx
    control.name    "Playback Navigation"

    # Make this plugin visible from aplay -L
    hint {
      show on
      description "Navigation SolftVol PCM"
    }    
}

# If hardware does not support mixer emulate it with softvol
# -----------------------------------------------------------
pcm.MyAlarmPCM {
    type        softvol

    # Point Slave on HOOK for policies control
    slave.pcm   "MyNavigationHook"

    # resolution=HAL(valMax+1) (default=256)
    resolution 256

    # name should match with HAL but do not set card=xx
    control.name    "Playback Navigation"

    # Make this plugin visible from aplay -L
    hint {
      show on
      description "Navigation SolftVol PCM"
    }    
}