class EL_AUDIO_SIGNAL_LEVEL_METER
Audio signal level meter
note
	description: "Audio signal level meter"
	author: "Finnian Reilly"
	copyright: "Copyright (c) 2001-2022 Finnian Reilly"
	contact: "finnian at eiffel hyphen loop dot com"
	license: "MIT license (See: en.wikipedia.org/wiki/MIT_License)"
	date: "2023-03-10 10:10:55 GMT (Friday 10th March 2023)"
	revision: "6"
		
		class
	EL_AUDIO_SIGNAL_LEVEL_METER
inherit
	WEL_PROGRESS_BAR
		rename
			set_position as set_position_immediately
		end
	EL_SIGNAL_LEVEL_LISTENER
	EL_MODULE_LOG
create
	make
feature -- Element change
	set_signal_threshold (rms_energy: REAL)
			--
		do
			signal_threshold := rms_energy
		end
	set_signal_level (rms_energy: REAL)
			--
		local
			level, new_level: INTEGER
		do
			log.enter_no_header ("set_signal_level")
			level := (rms_energy * 4 * maximum).rounded
			if level <= maximum then
				new_level := level
			else
				new_level := maximum
			end
			if rms_energy <= signal_threshold then
				new_level := 0
			else
				log.put_integer_field ("Signal level (root mean square)", new_level)
				log.put_new_line
			end
			set_position (new_level)
			log.exit_no_trailer
		end
feature {NONE} -- Implementation
	signal_threshold: REAL
	set_position (new_position: INTEGER)
			-- Set the current position with `new_position'.
			-- Use cwin_post_message instead of cwin_send_message so it can safely be called from
			-- a thread separate from the window thread
		do
			cwin_post_message (item, Pbm_setpos, to_wparam (new_position), to_lparam (0))
		end
end