如何用开发板实现call功能
简介
通话 指南
call是物联网中最常用的功能,本文介绍如何用Air724开发板,call功能演示。
材料准备
- EVB_Air724UG_A13开发板一套,包括天线SIM卡,USB线。
- luat开发环境:环境搭建方法
步骤
本文以demo\call这个DEMO为例做演示。
- 电话通过消息驱动的,首先通过sys.subscribe()注册消息处理函数,如下,我们可以通过注册下面的来电,电话接通,通话结束消息的处理函数,来做不同的处理。
sys.subscribe("CALL_INCOMING",incoming)
sys.subscribe("CALL_CONNECTED",connected)
sys.subscribe("CALL_DISCONNECTED",disconnected)
- 来电消息处理函数,当有电话打进来的时候,模块会上报CALL_INCOMING来电的消息,我们在上面注册的消息回调函数incoming()里去做处理,这里只要是播放来电铃音,也可以通过TTS方式播放一段语言,同时注册了一个按键消息用来接通电话。
local function incoming(num)
log.info("testCall.incoming:"..num)
if not coIncoming then
coIncoming = sys.taskInit(function()
while true do
--audio.play(1,"TTS","来电话啦",4,function() sys.publish("PLAY_INCOMING_RING_IND") end,true)
audio.play(1,"FILE","/lua/call.mp3",4,function() sys.publish("PLAY_INCOMING_RING_IND") end,true)
sys.waitUntil("PLAY_INCOMING_RING_IND")
break
end
end)
sys.subscribe("POWER_KEY_IND",function() audio.stop(function() cc.accept(num) end) end)
end
end
- 电话接通,这个通过注册开机键的消息来接通电话的,收到POWER_KEY_IND按键消息后,先停止之前的来电铃声,让后调用cc.accept()函数来接电话。
sys.subscribe("POWER_KEY_IND",function() audio.stop(function() cc.accept(num) end) end)
- 通话建立,电话接通后会上报CALL_CONNECTED消息,我们现在就可以在上面注册的connected()这个函数里做我们想做的事情了,比如设置MIC增益,调用callVolTest()接口5秒钟调节一次音量,通过TTS播放的方式向对面播放一段语音,最后启动一个110S的定时器通过cc.hangUp()挂断电话。
local function callVolTest()
local curVol = audio.getCallVolume()
curVol = (curVol>=7) and 1 or (curVol+1)
log.info("testCall.setCallVolume",curVol)
audio.setCallVolume(curVol)
end
local function connected(num)
log.info("testCall.connected")
coIncoming = nil
--通话中设置mic增益,必须在通话建立以后设置
--audio.setMicGain("call",7)
--通话中音量测试
sys.timerLoopStart(callVolTest,5000)
--通话中向对方播放TTS测试
audio.play(7,"TTS","通话中TTS测试",7,nil,true,2000)
--110秒之后主动结束通话
sys.timerStart(cc.hangUp,110000,num)
end
- 通话结束,电话挂断之后会上报CALL_DISCONNECTED消息,用来通知通话结束,在disconnected()消息处理函数中,主要是置位一些变量,停止之前开启的定时器,音频播放等。
local function disconnected()
coIncoming = nil
log.info("testCall.disconnected")
sys.timerStopAll(cc.hangUp)
sys.timerStop(callVolTest)
audio.stop()
end
- 演示代码见/demo/call
常见问题
- 打不了电话,确认能不能正常注册上网络,有没有欠费。确认是否VOLTE 功能,
只有开通 VOLTE 功能才能进行语音通话 - TTS的语音播报没声音,确认底层CORE是否支持TTS功能,只有支持TTS功能的版
本才能使用TTS功能。