From 7028c914d6bf70e615f407aa08f2f243cf014c0c Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Mon, 17 Feb 2020 20:01:20 +0100 Subject: [PATCH] Some preliminary work on Sound Shark theming. --- generic/microphone.png | Bin 0 -> 19203 bytes generic/microphone.svg | 392 ++++++++++++++++++++++++++++++++++++++++ nageru/ultimate.lua | 24 +++ nageru/ultimate.mapping | 10 +- score.html | 4 + score.js | 21 +++ 6 files changed, 450 insertions(+), 1 deletion(-) create mode 100644 generic/microphone.png create mode 100644 generic/microphone.svg diff --git a/generic/microphone.png b/generic/microphone.png new file mode 100644 index 0000000000000000000000000000000000000000..06ca56114f36f067a49bf7561c6829efc98eaf8b GIT binary patch literal 19203 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nageru/ultimate.lua b/nageru/ultimate.lua index 0c2fe32..4fff536 100644 --- a/nageru/ultimate.lua +++ b/nageru/ultimate.lua @@ -61,6 +61,7 @@ local iptv_video = VideoInput.new(futatabi_server, Nageru.VIDEO_FORMAT_YCBCR) iptv_video:change_rate(10.0) local static_image = ImageInput.new(cef_path .. "/nageru/dsn-bg.png") +local first_frame = true function reload_cef() cef_input:reload() @@ -689,6 +690,25 @@ function fetch_input_resolution(signals, signal_num) return res end +function update_volume() + if Nageru.get_num_audio_buses() < 3 or + Nageru.get_audio_bus_name(2) ~= 'Sound Shark' then + -- We haven't loaded the right audio mapping. + return + end + + if first_frame then + Nageru.set_audio_bus_fader_level_db(2, -math.huge) + first_frame = false + end + + local volume_db = Nageru.get_audio_bus_fader_level_db(2) + if Nageru.get_audio_bus_mute(2) or volume_db < -100.0 then + volume_db = -100.0 + end + cef_input:execute_javascript_async("set_sound_shark_volume_db(" .. volume_db .. ")") +end + local last_rate = 0.0 -- API ENTRY POINT @@ -708,6 +728,10 @@ local last_rate = 0.0 -- want to set (through set_int() etc.). The parameters will be snapshot -- at return time and used during rendering. function get_scene(num, t, width, height, signals) + if num == 0 then + update_volume() + end + local input_resolution = {} for signal_num=0,(NUM_CAMERAS-1) do input_resolution[signal_num] = fetch_input_resolution(signals, signal_num) diff --git a/nageru/ultimate.mapping b/nageru/ultimate.mapping index 98c5585..b13b88f 100644 --- a/nageru/ultimate.mapping +++ b/nageru/ultimate.mapping @@ -6,7 +6,9 @@ device { alsa_info: "USB Audio" num_channels: 18 address: "hw:1,0" - extra_delay_ms: 0 +} +device { + type: SILENCE } bus { name: "Ambience mic" @@ -20,3 +22,9 @@ bus { source_channel_left: 2 source_channel_right: 2 } +bus { + name: "Sound Shark" + device_index: 1 + source_channel_left: -1 + source_channel_right: -1 +} diff --git a/score.html b/score.html index c4cdc5a..c55523c 100644 --- a/score.html +++ b/score.html @@ -102,6 +102,10 @@ show carousel table out

+

+ sound shark off + sound shark on +

diff --git a/score.js b/score.js index 394bb55..1d30924 100644 --- a/score.js +++ b/score.js @@ -188,6 +188,27 @@ function hidelowerthird() lowerthird_visible = false; } +function set_sound_shark_volume_db(volume_db) +{ + let img = document.getElementById('lowerthird-img'); + let should_enable = (volume_db > -40.0); + let currently_enabled = (img.style.display === 'inline' && img.src.match(/microphone\.png$/)); + + if (should_enable === currently_enabled) { + return; + } + + if (should_enable) { + img.style.display = 'inline'; + img.src = 'generic/microphone.png'; + document.getElementById('lowerthird-picture').className = 'lowerthird-picture lowerthird-picture-animate-in'; + document.getElementById('lowerthird-picture-content').className = 'lowerthird-picture-content lowerthird-picture-content-animate-in'; + } else { + document.getElementById('lowerthird-picture').className = 'lowerthird-picture lowerthird-picture-animate-out'; + document.getElementById('lowerthird-picture-content').className = 'lowerthird-picture-content lowerthird-picture-content-animate-out'; + } +} + function time_elapsed_raw(num) { let elapsed = (Date.now() - clocks[num].origin) * 1e-3; -- 2.39.2