diff options
author | Fulup Ar Foll <fulup@iot.bzh> | 2018-06-04 00:33:34 +0200 |
---|---|---|
committer | Fulup Ar Foll <fulup@iot.bzh> | 2018-06-04 00:33:34 +0200 |
commit | bbaf42c6b02ca5d1bdceb7e215807abdbf8cd61d (patch) | |
tree | 48368647ddfa11483d72a9a577cfa0a11f575d93 /conf.d/project/lua.d | |
parent | 2af80583a462fa0f71d0250bca03db5a4cf22fe8 (diff) |
Move to Dynamic Mixer API (work in progress)
Diffstat (limited to 'conf.d/project/lua.d')
-rw-r--r-- | conf.d/project/lua.d/softmixer-simple-test.lua | 217 |
1 files changed, 156 insertions, 61 deletions
diff --git a/conf.d/project/lua.d/softmixer-simple-test.lua b/conf.d/project/lua.d/softmixer-simple-test.lua index 115831b..87fb866 100644 --- a/conf.d/project/lua.d/softmixer-simple-test.lua +++ b/conf.d/project/lua.d/softmixer-simple-test.lua @@ -21,131 +21,221 @@ -- Static variables should be prefixed with _ _EventHandle={} --- Call when AlsaCore return HAL active list -function _AlsaPingCB_ (source, result, context) - AFB:notice (source, "--InLua-- PingCB: result='%s'", Dump_Table(result)) +-- make variable visible from ::OnExitError:: +local error +local result -end +local printf = function(s,...) + io.write(s:format(...)) + io.write("\n") + return +end -- Display receive arguments and echo them to caller function _mixer_simple_test_ (source, args) do - local error - local response + - -- ================== Default Alsa snd-aloop numid and subdev config - local aloop = { - ["devices"] = {["playback"]=0,["capture"]=1}, - ["ramps"] = { + -- Mixer UID is used as API name + + -- ==================== Default rate =========================== + + local audio_params ={ + defaults = { ["rate"] = 48000 }, + standard = { ["rate"] = 44100 }, + basic= { ["rate"] = 8000 }, + } + + local volume_ramps = { {["uid"]="ramp-fast", ["delay"]= 050, ["up"]=10,["down"]=3}, {["uid"]="ramp-slow", ["delay"]= 250, ["up"]=03,["down"]=1}, {["uid"]="ramp-normal", ["delay"]= 100, ["up"]=06,["down"]=2}, - }, + } + + -- ======================= Loop PCM =========================== + local snd_aloop = { + ["uid"] = "Alsa-Loop", + ["path"]= "/dev/snd/by-path/platform-snd_aloop.0", + ["devices"] = {["playback"]=0,["capture"]=1}, ["subdevs"] = { - {["subdev"]= 0, ["numid"]= 51}, - {["subdev"]= 1, ["numid"]= 57}, + {["subdev"]= 0, ["numid"]= 51, ["uid"]= "loop-legacy"}, + {["subdev"]= 1, ["numid"]= 57, ["uid"]= "loop-multimedia"}, {["subdev"]= 2, ["numid"]= 63}, {["subdev"]= 3, ["numid"]= 69}, {["subdev"]= 4, ["numid"]= 75}, {["subdev"]= 5, ["numid"]= 81}, {["subdev"]= 6, ["numid"]= 87}, {["subdev"]= 7, ["numid"]= 93}, - } + }, } - -- ==================== Default rate =========================== - - local audio_defaults = { - ["rate"] = 48000, - } - - -- ======================= Loop PCM =========================== - local snd_aloop = { - ["uid"] = "Alsa-Loop", - ["devpath"] = "/dev/snd/by-path/platform-snd_aloop.0", - ["params"] = audio_defaults, - ["ramps"] = aloop.ramps, - ["devices"] = aloop.devices, - ["subdevs"] = aloop.subdevs, - } + -- ============================= Backend (Sound Cards) =================== - -- ============================= Sound Cards =================== local snd_yamaha = { ["uid"]= "YAMAHA-APU70", - ["devpath"]= "/dev/snd/by-id/usb-YAMAHA_Corporation_YAMAHA_AP-U70_USB_Audio_00-00", - ["params"] = snd_params, + ["path"]= "/dev/snd/by-id/usb-YAMAHA_Corporation_YAMAHA_AP-U70_USB_Audio_00-00", + ["params"]= audio_params.default, ["sink"] = { - {["uid"]= "front-right", ["port"]= 0}, - {["uid"]= "front-left", ["port"]= 1}, + ["channels"] = { + {["uid"]= "front-right", ["port"]= 0}, + {["uid"]= "front-left", ["port"]= 1}, + }, } } - local snd_jabra= { - ["uid"]= "Jabra-Solemate", - ["devpath"]= "/dev/snd/by-id/usb-0b0e_Jabra_SOLEMATE_v1.34.0-00", - ["params"] = snd_params, + local snd_usb_8ch= { + ["uid"]= "8CH-USB", + ["path"]= "/dev/snd/by-id/usb-0d8c_USB_Sound_Device-00", + ["params"] = audio_params.default, ["sink"] = { - {["uid"]= "front-right", ["port"]= 0}, - {["uid"]= "front-left", ["port"]= 1}, + ["controls"]= { + ["volume"] = {["name"]= "Speaker Playback Volume", ["value"]=80}, + ["mute"] = {["name"]= "Speaker Playback Switch"}, + }, + ["channels"] = { + {["uid"]= "front-right", ["port"]= 0}, + {["uid"]= "front-left" , ["port"]= 1}, + {["uid"]= "middle-right", ["port"]= 2}, + {["uid"]= "middle-left" , ["port"]= 3}, + {["uid"]= "back-right", ["port"]= 4}, + {["uid"]= "back-left" , ["port"]= 5}, + {["uid"]= "centre-left" , ["port"]= 6}, + {["uid"]= "centre-left" , ["port"]= 7}, + }, + }, + ["source"] = { + ["controls"]= { + ["volume"] = {["name"]= "Capture Volume"}, + ["mute"] = {["name"]= "Capture Switch"}, + }, + ["channels"] = { + {["uid"]= "mic-right", ["port"]= 0}, + {["uid"]= "mic-left" , ["port"]= 1}, + }, } } -- ============================= Zones =================== + local zone_stereo={ + ["uid"] = "full-stereo", + ["sink"] = { + {["target"]="front-right",["channel"]=0}, + {["target"]="front-left" ,["channel"]=1}, + {["target"]="middle-right",["channel"]=0}, + {["target"]="middle-left" ,["channel"]=1}, + {["target"]="back-right",["channel"]=0}, + {["target"]="back-left" ,["channel"]=1}, + } + } + local zone_front= { ["uid"] = "front-seats", - ["type"] = "playback", - ["mapping"] = { + ["sink"] = { {["target"]="front-right",["channel"]=0}, {["target"]="front-left" ,["channel"]=1}, } } + local zone_middle= { + ["uid"] = "middle-seats", + ["sink"] = { + {["target"]="middle-right",["channel"]=0}, + {["target"]="middle-left" ,["channel"]=1}, + } + } + + local zone_back= { + ["uid"] = "back-seats", + ["sink"] = { + {["target"]="back-right",["channel"]=0}, + {["target"]="back-left" ,["channel"]=1}, + } + } + + local zone_driver= { + ["uid"] = "driver-seat", + ["source"] = { + {["target"]="mic-right",["channel"]=0}, + }, + ["sink"] = { + {["target"]="front-right",["channel"]=0}, + } + } + -- =================== Audio Stream ============================ local stream_music= { - ["uid"] = "multimedia", - ["zone"] = "front-seats", - ["ramp"] = "ramp-slow", + ["uid"] = "multimedia", + ["zone"]= "full-stereo", + ["source"]= "loop-multimedia", ["volume"]= 60, ["mute"] = false, + ["params"]= audio_params.standard, } local stream_navigation= { ["uid"] = "navigation", - ["zone"] = "front-seats", - ["ramp"] = "ramp-normal", - ["volume"]= 70, + ["zone"]= "front-seats", + ["volume"]= 60, ["mute"] = false, } - + local stream_emergency= { ["uid"] = "emergency", - ["zone"] = "front-seats", - ["ramp"] = "ramp-fast", + ["zone"] = "driver-seat", ["volume"]= 80, ["mute"] = false, + --["params"]= audio_params.basic, } + local stream_radio= { + ["uid"] = "radio", + ["zone"] = "full-stereo", + --["source"]= snd_usb_8ch.uid, + ["volume"]= 60, + ["mute"] = false, + } + + local stream_pulse= { + ["uid"] = "pulseaudio", + ["zone"] = "back-seats", + ["source"]= "loop-legacy", + ["volume"]= 60, + ["mute"] = false, + } + --- ================ Create Mixer ========================= - local MyMixer= { - ["uid"]="Simple_Mixer", - ["backend"] = {snd_yamaha}, - ["frontend"]= {snd_aloop}, - ["zones"] = {zone_front}, - ["streams"] = {stream_music,stream_navigation,stream_emergency}, + local MyTestHal= { + ["uid"]= "MyMixer", + ["ramps"]= volume_ramps, + ["playbacks"] = {snd_usb_8ch}, + ["captures"]= {snd_usb_8ch}, + ["loops"] = {snd_aloop}, + ["zones"] = {zone_stereo, zone_front, zone_back, zone_middle, zone_driver}, + ["streams"] = {stream_pulse, stream_music, stream_navigation }, + -- ["streams"] = {stream_pulse, stream_music, stream_navigation, stream_emergency, stream_radio }, + } - local error,response= smix:_mixer_new_ (source, MyMixer) + -- direct LUA call because controller cannot call its own API from AFB:servsync + error,result= smix:_mixer_new_ (source, {["uid"]="MyMixer"}) if (error ~= 0) then - AFB:error (source, "--InLua-- smix:_mixer_new_ fail config=%s", Dump_Table(aloop)) + AFB:error (source, "--InLua-- smix:_mixer_new_ fail config=%s", Dump_Table(result)) goto OnErrorExit else - AFB:notice (source, "--InLua-- smix:_mixer_new_ done response=%s\n", Dump_Table(response)) + AFB:notice (source, "--InLua-- smix:_mixer_new_ done\n") end + error,result= AFB:servsync(source, "MyMixer", "attach", MyTestHal) + if (error) then + AFB:error (source, "--InLua-- API MyMixer/attach fail error=%d", error) + goto OnErrorExit + else + AFB:notice (source, "--InLua-- MyMixer/attach done result=%s\n", Dump_Table(result)) + end -- ================== Happy End ============================= AFB:notice (source, "--InLua-- Test success") @@ -153,6 +243,11 @@ function _mixer_simple_test_ (source, args) -- ================= Unhappy End ============================ ::OnErrorExit:: - AFB:error (source, "--InLua-- Test fail") + local response=result["request"] + printf ("--InLua-- ------------STATUS= %s --------------", result["status"]) + printf ("--InLua-- ++ INFO= %s", Dump_Table(response["info"])) + printf ("--InLua-- ----------TEST %s-------------", result["status"]) + + AFB:error (source, "--InLua-- Test Fail") return 1 -- unhappy end -- end |