示例-Luat示例-call(通话)

如何用开发板实现call功能

简介

通话 指南
call是物联网中最常用的功能,本文介绍如何用Air724开发板,call功能演示。

材料准备

  1. EVB_Air724UG_A13开发板一套,包括天线SIM卡,USB线。
  2. luat开发环境:环境搭建方法
    图片.png

步骤

本文以demo\call这个DEMO为例做演示。

  1. 电话通过消息驱动的,首先通过sys.subscribe()注册消息处理函数,如下,我们可以通过注册下面的来电,电话接通,通话结束消息的处理函数,来做不同的处理。
sys.subscribe("CALL_INCOMING",incoming)
sys.subscribe("CALL_CONNECTED",connected)
sys.subscribe("CALL_DISCONNECTED",disconnected)
  1. 来电消息处理函数,当有电话打进来的时候,模块会上报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
  1. 电话接通,这个通过注册开机键的消息来接通电话的,收到POWER_KEY_IND按键消息后,先停止之前的来电铃声,让后调用cc.accept()函数来接电话。
        sys.subscribe("POWER_KEY_IND",function() audio.stop(function() cc.accept(num) end) end)
  1. 通话建立,电话接通后会上报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
  1. 通话结束,电话挂断之后会上报CALL_DISCONNECTED消息,用来通知通话结束,在disconnected()消息处理函数中,主要是置位一些变量,停止之前开启的定时器,音频播放等。
local function disconnected()
    coIncoming = nil
    log.info("testCall.disconnected")
    sys.timerStopAll(cc.hangUp)
    sys.timerStop(callVolTest)
    audio.stop()
end
  1. 演示代码见/demo/call

常见问题

  1. 打不了电话,确认能不能正常注册上网络,有没有欠费。确认是否VOLTE 功能,
    只有开通 VOLTE 功能才能进行语音通话
  2. TTS的语音播报没声音,确认底层CORE是否支持TTS功能,只有支持TTS功能的版
    本才能使用TTS功能。

相关资料以及购买链接

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值