123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- // background.js
- const numberToChinese = number => {
- const numbers = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
- const [integer, fraction] = number.toString().split('.');
- // 整数部分转换
- let result = integer.split('').map(num => numbers[parseInt(num, 10)]).join('');
- // 小数部分转换
- if (fraction) {
- result += '点' + fraction.split('').map(num => numbers[parseInt(num, 10)]).join('');
- }
- return result;
- };
- // 英文单位到中文单位的映射
- const unitMap = {
- "m": "米",
- "kg": "千克",
- "s": "秒",
- "m/s": "米每秒",
- "kwh": "千瓦时",
- "kw": "千瓦",
- "kWh": "千瓦时",
- };
- const translateSentence = sentence => {
- // 匹配数字和可选的单位
- const regex = /(\d+(\.\d+)?)(kwh|kwH|kg|kw|m\/s|m)?/g;
- return sentence.replace(regex, (match, number, fraction, unit) => {
- const chineseNumber = number;
- // const chineseNumber = numberToChinese(number); // 转换数字
- const chineseUnit = unit ? (unitMap[unit.toLowerCase()] || unit) : ''; // 转换单位
- return chineseNumber + chineseUnit;
- });
- };
- // const wsUrl = 'ws://10.138.3.85:21086/ws?siteId=167037857943322624';
- const wsUrl = 'ws://218.13.91.150:21086/ws?siteId=167037857943322624';
- const initWebSocket = () => {
- const ws = new WebSocket(wsUrl);
- ws.onopen = () => {
- console.log('WebSocket connection established');
- };
- ws.onmessage = event => {
- let message = event.data;
- message = translateSentence(message);
- console.log('Received message:', message);
- // 假设接收到的报警信息是一个简单的文本字符串
- // 根据你的实际情况,你可能需要解析JSON或进行其他处理
- if (message.includes('报警')) { // 根据实际情况判断是否为报警信息
- // 判断优先级
- // 判断时间
- playTts(message);
- }
- };
- ws.onerror = error => {
- console.log('WebSocket error:', error);
- };
- ws.onclose = event => {
- console.log('WebSocket connection closed', event.code, event.reason);
- // 可以在这里重新连接
- setTimeout(initWebSocket, 1000); // 延迟重连
- };
- };
- chrome.tts.getVoices(function (voices) {
- const voiceNames = [];
- for (let i = 0; i < voices.length; i++) {
- if (voices[i].lang === 'zh-CN') {
- console.log('Voice ' + i + ':');
- console.log(' name: ' + voices[i].voiceName);
- console.log(' lang: ' + voices[i].lang);
- console.log(' extension id: ' + voices[i].extensionId || 'n/a');
- voiceNames.push(voices[i].voiceName);
- }
- }
- console.log(voiceNames);
- chrome.storage.sync.set({'voiceNames': voiceNames});
- });
- const playTts = (message) => {
- chrome.storage.sync.get(['voiceName', 'voiceVolume'], (obj) => {
- let volume = obj.voiceVolume;
- let voiceName = obj.voiceName;
- if (volume === undefined) {
- volume = 100;
- }
- if (voiceName === undefined) {
- voiceName = '';
- }
- console.log("volume", volume);
- console.log("voice name", voiceName);
- chrome.tts.speak(message, {
- 'lang': 'zh-CN',
- 'rate': 1.0,
- 'voiceName': voiceName,
- 'volume': volume / 100
- });
- });
- };
- // 初始化WebSocket连接
- initWebSocket();
- const sentence = "我昨天买了123456789.321kwh苹果和5个橙子,还有0.233445m/s的绳子。";
- const translatedSentence = translateSentence(sentence);
- console.log(translatedSentence);
- // playTts(sentence)
- playTts(translatedSentence)
|