tSIP: signaling BLF change with audio
Lua "on BLF (dialog-info) change" playing sound when contact(s) state changed to early or confirmed.
function play()
-- Playing sound asynchronously
-- note: more powerful (sound device selection) option is using sox tool + ShellExecute
-- (http://tomeko.net/software/SIPclient/howto/sox.php,
-- http://tomeko.net/software/SIPclient/howto/local_dtmfs.php)
local winapi = require("tsip_winapi")
-- let's use path relative to exe location
local filename = GetExeName()
local index = string.find(filename:reverse(), "\\")
local dir = string.sub(filename, 1, -index)
local audio_file = dir .. "pluck.wav"
-- PlaySound is identical to WinAPI function with same name
local SND_FILENAME = tonumber(0x00020000)
local SND_ASYNC = tonumber(0x0001)
winapi.PlaySound(audio_file, 0, SND_FILENAME | SND_ASYNC)
end
local execSourceType = GetExecSourceType() -- 7 = BLF state change
if execSourceType ~= 7 then
print("Unexpected context for BLF state script!\n")
return
end
local contactId = GetExecSourceId() -- contact id in this context
local number, state = GetBlfState(contactId)
--[[
for state value:
enum dialog_info_status {
DIALOG_INFO_UNKNOWN = 0, ///< not subscribed / subscription failed
DIALOG_INFO_TERMINATED,
DIALOG_INFO_EARLY,
DIALOG_INFO_CONFIRMED
};
If contactId is out of range (e.g. there is no subscription) then value = -1 is returned.
This is unexpected in script running on event though.
]]
-- number might be used to limit contacts for which audio is played
-- or to assign different audio files to different contacts
-- print(string.format("on_blf_state: number %s state = %d\n", number, state))
if state == 2 or state == 3 then -- early + confirmed states
-- let's limit play() frequency
local currentTime = os.time()
print ("currentTime: " .. currentTime .. "\n")
local variableName = "OnBlfStatePlaTime"
local prevTime, prevTimeIsSet = GetVariable(variableName)
if prevTimeIsSet ~= 0 then
print(string.format("prevTime = %s\n", prevTime))
prevTime = tonumber(prevTime)
if currentTime - prevTime < 2 then
-- skip playing
print("Skipping playing - 2 seconds not passed\n")
return
else
print(string.format("delta = %d\n", currentTime - prevTime))
end
else
print("prevTime not set\n")
end
SetVariable(variableName, currentTime)
play()
end
Back to howto list.