一三三、车载语音方案梳理与优化

本文主要探讨车载语音方案的优化,包括防抖处理、删除重复指令、利用async await确保反注册、内容比较、指令节点缓存、监听策略优化及ServiceWorker线程应用,旨在提升语音交互效率和用户体验。
摘要由CSDN通过智能技术生成

在这里插入图片描述
优化点:

1. 防抖

                    // 当观察到变动时执行的回调函数
                    const callback = debounce(mutationsList => {
                        if (!this.lifeCycle.disposed && document.visibilityState === 'visible') {
                            this.registerVSLComponent();
                        }
                    }, 1500);

2. 删除重复语音指令

// 删除重复语音
                searchVoiceConfig(ele) {
                    let configs = [];
                    if (ele.children && ele.children.length) {
                        Array.from(ele.children).forEach((element, index) => {
                            let config = [],
                                repeatKey = '';
                            if (element.data && element.data.raw.voiceType) {
                                const index = element.data.get('voiceIndex');
                                const item = {
                                    id: element.id,
                                    type: element.data.raw.voiceType,
                                    autolisten: element.data.raw.voiceAutolisten,
                                    resourceID: element.data.raw.voiceResourceID || '',
                                    data: {
                                        name: element.data.raw.voiceTag,
                                        type: element.data.raw.voiceName || ''
                                    },
                                    indexinfo: /^([1-9]{1}[0-9]*)|0$/.test(index) ? {index} : {}
                                };
                                if (item.type === 'scroll-vertical') {
                                    item.type = 'scroll';
                                    item.data.type = 'vertical';
                                } else if (item.type === 'scroll-horizontal') {
                                    item.type = 'scroll';
                                    item.data.type = 'horizontal';
                                }
                                config = [item];
                                this._actionEleMap[element.id] = element;
                                repeatKey = item.data.name + item.type + item.indexinfo.index || '' + item.data.type;
                            }
                            if (repeatKey && !this._repeatMap[repeatKey]) {
                                this._repeatMap[repeatKey] = true;
                                configs = configs.concat(config, this.searchVoiceConfig(element) || []);
                            } else {
                                configs = configs.concat([], this.searchVoiceConfig(element) || []);
                            }
                        });
                    }
                    return configs;
                }

3. 通过async await保证注册前先执行反注册

                /**
                 * 注册 vsl 内容
                 */
                async registerVSLComponent() {
                    // 把旧的反注册
                    await this.unregisterVSLComponent();
                   // ......
                },
                /**
                 *
                 * 反注册 vsl 内容
                 */
                unregisterVSLComponent() {
                    return new Promise((res, rej) => {
                        try {
                            this.boxjsHandler('unRegister', this._vslActionQueue);
                            this._vslActionQueue = [];
                            this._actionEleMap = {};
                            res();
                        } catch (error) {
                            rej();
                        }
                    });
                },

4. 判断当前要注册的内容与上次是否相同

JSON.stringify(configs) != JSON.stringify(curr_vslActionQueue)

5. 缓存注册了指令的节点,语音命中后从缓存里取

this._actionEleMap[element.id] = element;
const element = this._actionEleMap[voicedata.id];

6. 优化监听节点的策略

childList: true, // 观察目标子节点的变化,是否有添加或者删除
attributes: false, // 观察属性变动
subtree: true // 观察后代节点,默认为 false

7. 通过借鉴pwa的 ServiceWorker线程

通过postMessage与Render线程提供通信能力,遍历的事情交给ServiceWorker

const makeWorker = f => {
  let pendingJobs = {};
  
  const worker = new Worker (
    URL.createObjectURL (new Blob ([`(${f.toString ()})()`]))
  );
  
  worker.onmessage = ({data: {result, jobId}}) => {
    // 调用resolve,改变Promise状态
    pendingJobs[jobId] (result);
    // 删掉,防止key冲突
    delete pendingJobs[jobId];
  };
  
  return (...message) =>
  new Promise (resolve => {
    const jobId = String (Math.random ());
    pendingJobs[jobId] = resolve;
    worker.postMessage ({jobId, message});
  });
};
function work () {
  onmessage = ({data: {jobId, message}}) => {
    console.log ('work单独处理数据:-----' + message);
    //处理操作
    postMessage ({jobId, result: '处理完的数据'});
  };
}
const testWorker = makeWorker (work);
testWorker ('传入要处理的数据').then (message => {
  console.log ('接收处理完的数据:-----' + message);
});
Voicebot发布了“2019年车载语音助理报告”。美国有1.14亿成年人在汽车中使用语音助理,几乎是智能音箱用户(5780万)的两倍。月活跃语音助理用户为7700万人。 语音识别于2004年进入汽车领域,因此用户群已经成熟。 拥有汽车的人比拥有智能音箱用户多得多。 司机的手和眼睛被任务占用,因此语音助手的交互功能有更大的优势。 车载语音助理使用主要集中在三个任务上:控制功能、访问导航信息和电话呼叫。 一半的车主在车里使用过语音助理,其中67.5%的车主每月使用。这显示了扩大用户基础和使用频率的重要机会。随着消费者越来越习惯于在智能音箱和智能手机上使用语音,以及这些习惯向汽车过渡,这种增长将自然而然地发生。但是,更大的影响可能是为车内环境量身定制的语音应用。 一个例子是快餐(QSR)为消费者提供行驶中语音订餐服务。这是移动应用订餐的自然延伸。它允许司机密切关注道路,将手放在方向盘上,同时预定餐点。这既可以通过移动应用中的语音功能实现,也可以访问仪表板的语音助理。还有一些应用通过定位自动导航到最近的门店。 目前,很少有应用发行商考虑过为驾驶环境量身定制用户体验。尽管缺乏针对驾驶体验的应用,但消费者在汽车中使用语音是一个明显的商机。声音快速在汽车所有者之间普及,未来汽车将成为三大语音接入点之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值