fmode-ng 0.0.19 → 0.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.mjs +1 -1
- package/esm2020/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.mjs +1 -1
- package/fesm2015/fmode-ng.mjs +1 -1
- package/fesm2015/fmode-ng.mjs.map +1 -1
- package/fesm2020/fmode-ng.mjs +1 -1
- package/fesm2020/fmode-ng.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fmode-ng.mjs","sources":["../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/chat-class.ts","../../../projects/fmode-ng/src/lib/nova-cloud/nova-cloud.service.ts","../../../projects/fmode-ng/src/lib/platform/cross.service.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/chat.service.ts","../../../projects/fmode-ng/src/lib/storage/service-upload/util-file-md5.ts","../../../projects/fmode-ng/src/lib/storage/service-upload/nova-upload.service.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-imagine/imagine.service.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/fmai.service.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/mask-list.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/utilnow.pipe.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.ts","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.ts","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/markdown-parse.ts","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/markdown-preview.component.ts","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/markdown-preview.component.html","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/markdown-preview.module.ts","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/clipboard.service.ts","../../../projects/fmode-ng/src/lib/aigc/voice/lib/pcm2wav.ts","../../../projects/fmode-ng/src/lib/aigc/voice/lib/resample.ts","../../../projects/fmode-ng/src/lib/aigc/voice/class-asr.ts","../../../projects/fmode-ng/src/lib/aigc/voice/fmode-voice.service.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-particle/role-points.class.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.html","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.html","../../../projects/fmode-ng/src/lib/aigc/voice/tts/fmode-tts-class.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.html","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.html","../../../projects/fmode-ng/src/lib/aigc/avatar/avatar.module.ts","../../../projects/fmode-ng/src/lib/map/page-map.start/page-map.start.component.ts","../../../projects/fmode-ng/src/lib/map/page-map.start/page-map.start.component.html","../../../projects/fmode-ng/src/lib/map/comp-poi-picker/comp-poi-picker.component.ts","../../../projects/fmode-ng/src/lib/map/comp-poi-picker/comp-poi-picker.component.html","../../../projects/fmode-ng/src/lib/map/comp-poi-picker/comp-poi-picker.module.ts","../../../projects/fmode-ng/src/lib/map/page-plan-route/page-plan-route.component.ts","../../../projects/fmode-ng/src/lib/map/page-plan-route/page-plan-route.component.html","../../../projects/fmode-ng/src/lib/map/page-loca-scatter/page-loca-scatter.component.ts","../../../projects/fmode-ng/src/lib/map/page-loca-scatter/page-loca-scatter.component.html","../../../projects/fmode-ng/src/lib/map/map.module.ts","../../../projects/fmode-ng/src/lib/storage/service-hwobs/hwobs.service.ts","../../../projects/fmode-ng/src/lib/storage/comp-hwobs-manager/hwobs-manager.component.ts","../../../projects/fmode-ng/src/lib/storage/comp-hwobs-manager/hwobs-manager.component.html","../../../projects/fmode-ng/src/lib/storage/storage.module.ts","../../../projects/fmode-ng/src/public-api.ts","../../../projects/fmode-ng/src/fmode-ng.ts"],"sourcesContent":["import { bufferTime, concatMap, Observable, Observer,delay, finalize } from \"rxjs\"\n// var bufferTime:any, concatMap:any, Observable:any, Observer:any,delay:any, finalize:any,Observer:any\nimport Parse from \"parse\";\n// var Parse:any = {}\n// const API_BASE:string = \"http://127.0.0.1:7337/api/apig/aigc/gpt\"\nconst API_BASE:string = \"https://server.fmode.cn/api/apig/aigc/gpt\"\n// const API_BASE:string = \"https://test.fmode.cn/api/apig/aigc/gpt\"\n\nexport function getMessageContentText(content:any|string|Array<ChatImageContentItem>){\n let text = \"\"\n if(typeof content == \"string\") text = content\n if(typeof content == \"object\") text = content?.find(item=>item?.text)?.text || \"\"\n return text\n}\nexport function getMessageImageUrl(content:any|string|Array<ChatImageContentItem>){\n if(typeof content == \"object\") return content?.find(item=>item?.image_url)?.image_url?.url || \"\"\n return null\n }\n\nexport interface ChatImageContentItem{type:string,text?:string,image_url?:{url:string}}\n\nexport interface FmodeChatMessage{\n role:string // user 用户 assistant AI system 系统\n content:string|Array<ChatImageContentItem> // 消息内容\n json?:any\n hidden?:boolean\n createdAt?:Date // 创建时间\n complete?:boolean // Stream流式加载完成\n /**AI回复消息字段 */\n cid?:string // AI补全内容,包含cid,指向数据库 chatcmpl-uDfGFOwIHyi4vM9LkB6kVxcg4i1DZ\n}\n\n/**\n * FmodeChat 聊天对话类\n * @public\n */\nexport class FmodeChat{\n\n title:string\n sessionId:string\n ChatSession = Parse.Object.extend(\"ChatSession\")\n chatSession:Parse.Object\n role:any\n messageList:FmodeChatMessage[] = [{role:\"system\",content:\"系统提示:AI仅供参考\"}]\n latestAIResponse:string|undefined = ``\n chatServ:any\n public userInput:string = ``;\n public userImage:string = ``;\n\n /**\n * 是否开启语音对话模式\n * @desc\n * 开启ssml system提示词\n * 开启回答文本除xml显示模式\n */\n isTalkMode:boolean = false;\n SSMLRoleVoice:string = \"zh-CN-XiaoxiaoNeural\";\n\n\n constructor(sessionId:string,role?:Parse.Object,chatSession?:Parse.Object,chatServ?:any){\n this.chatServ = chatServ\n this.role = role\n this.sessionId = sessionId\n if(chatSession?.id){\n this.chatSession = chatSession;\n this.messageList = this.chatSession.get(\"messageList\");\n this.sessionId = chatSession?.id;\n }\n }\n /**\n * 会话Avatar控制\n */\n playAnimation = (animName:string)=>{\n console.log(animName)\n return\n }\n\n\n /**\n * 对话模型提示词\n */\n loadTalkSystemPrompt(role:Parse.Object){\n if(!role) return\n // 加载声音模型:默认为晓晓\n if(role?.get('gender')=='男'){\n this.SSMLRoleVoice = \"zh-CN-YunyeNeural\"\n }else{\n this.SSMLRoleVoice = \"zh-CN-XiaoxiaoNeural\"\n }\n this.SSMLRoleVoice = role?.get(\"voiceConfig\")?.voice || this.SSMLRoleVoice \n let SSMLPromptTemplate = `您的语言简短且口语化`+\n `,每句话都要用mstts:express-as标签,style属性情绪表达(advertisement_upbeat,affectionate,angry,assistant,calm,chat,cheerful,customerservice,depressed,disgruntled,documentary-narration,embarrassed,empathetic,envious,excited,fearful,friendly,gentle,hopeful,lyrical,narration-professional,narration-relaxed,newscast,newscast-casual,newscast-formal,poetry-reading,sad,serious,shouting,sports_commentary,sports_commentary_excited,whispering,terrified,unfriendly,)`+\n `,styledegree属性语气强度(默认1,从0.01最轻柔到2最强调),并适当用break增加自然停顿效果。`+\n `并编写成带<speak xmlns=\"http://www.w3.org/2001/10/synthesis\" xmlns:mstts=\"http://www.w3.org/2001/mstts\" xmlns:emo=\"http://www.w3.org/2009/10/emotionml\" version=\"1.0\" xml:lang=\"zh-CN\"><voice name=\"${this.SSMLRoleVoice }\">标签的SSML返回。`\n\n let prompt = role.get(\"prompt\") || \"请你扮演脑控科技的人工智能专家。\"\n prompt += SSMLPromptTemplate;\n let promptMsg:FmodeChatMessage = {role:\"user\",content:prompt,hidden:true}\n\n // 查重\n let content = this.messageList?.map(item=>item?.content).join()\n if(content.indexOf(prompt)>-1){\n // 提示词已经存在\n return\n }\n // 补全提示词\n let systemIndex = this.messageList?.findIndex(item=>item?.role==\"system\");\n let insertIndex = systemIndex+1\n this.messageList.splice(insertIndex,0,promptMsg)\n return \n }\n /**\n * 角色提示词\n * @returns \n */\n loadRolePrompt(){\n // 角色提示\n let prompt = this.role?.get(\"prompt\")\n let promptMsg:FmodeChatMessage = {role:\"user\",content:prompt,hidden:true}\n if(!prompt) return // 无提示词无需添加\n // 内容检查\n let content = this.messageList?.map(item=>item?.content).join()\n if(content.indexOf(prompt)>-1){\n // 提示词已经存在\n return\n }\n // 补全提示词\n let systemIndex = this.messageList?.findIndex(item=>item?.role==\"system\");\n let insertIndex = systemIndex+1\n this.messageList.splice(insertIndex,0,promptMsg)\n console.log(this.messageList)\n }\n /**\n * 发送消息\n * @param message \n * @param imageUrl \n */\n sendMessage(message:string=\"FmodeAiTest测试问题\",imageUrl?:string,onComplete?:Function){\n // 为消息列表补全提示词\n this.loadTalkSystemPrompt(this.role);\n this.loadRolePrompt();\n // 用户输入消息,添加到历史消息清单中\n if(!imageUrl){ // 纯文本\n // console.log(\"纯文本\")\n this.messageList.push({\n role:\"user\",\n content:message,\n complete:true,\n createdAt:new Date()\n })\n }else{ // 带图片\n this.messageList.push({\n \"role\": \"user\",\n \"content\": [\n {\n \"type\": \"image_url\",\n \"image_url\": {\"url\":imageUrl},\n },\n {\n \"type\": \"text\", \n \"text\": message\n },\n ],\n complete:true,\n createdAt:new Date()\n })\n }\n // 创建并发起一条新的消息补全\n // console.log(\"send\",this.messageList)\n let completion = new FmodeChatCompletion(this.fixMessageList(this.messageList),{\n model:this.chatServ?.currentModel?.get(\"code\") || \"fmode-3.6-16k\"\n })\n console.log(this.chatServ?.currentModel?.toJSON())\n // 持续更新事件推送的消息体内容至消息列表\n let isDirect = false\n if(this.isTalkMode){\n isDirect = true\n }\n let send$ = completion.sendCompletion({isDirect:isDirect,onComplete:onComplete||null}).pipe(finalize(()=>{ // 管道finalize替代了旧版的(complete)=>{}\n this.messageList[completion.indexOfList].complete = true\n })).subscribe(message=>{\n this.messageList[completion.indexOfList] = message;\n if(typeof message?.content == \"string\"){\n this.latestAIResponse = message?.content\n }else{\n this.latestAIResponse = message?.content?.[0]?.text || ``\n }\n \n let savedList = this.chatSession?.get(\"messageList\")?.length;\n // 生命周期:会话创建后,有新消息时,创建保存会话\n if(this.messageList?.length > savedList){\n console.log(\"cycle新会话\")\n this.saveChatSession();\n }\n\n if(message?.complete){\n // 生命周期:消息发送完成后,保存聊天记录\n this.saveChatSession(); \n send$.unsubscribe();\n }\n // console.log(message)\n })\n }\n /**\n * 保存单次会话\n */\n async saveChatSession(){\n if(this.sessionId == \"new\"){\n this.chatSession = new this.ChatSession()\n }\n\n this.chatSession.set(\"title\",this.genTitle())\n this.chatSession.set(\"role\",this.role?.toPointer())\n this.chatSession.set(\"messageList\",this.messageList)\n this.chatSession.set(\"user\",Parse.User.current()?.toPointer())\n this.chatSession = await this.chatSession.save();\n this.sessionId = this.chatSession?.id\n if(this.sessionId){ \n // 修改URL地址为sessionId,方便分享或切换\n let newHref = `${window.location.origin}/chat/pro/chat/${this.sessionId}`\n newHref = this.getInviteUrl(newHref)\n window.history.replaceState(null, null, newHref);\n // 修改最新条chatList数据\n let newChat = {\n sid:this.chatSession?.id,\n rid:this.role?.id,\n name:this.role?.get('name'),\n message:this.chatSession?.get('messageList')?.[this.chatSession?.get('messageList')?.length-1]?.content?.slice(0,20),\n latest:this.chatSession?.createdAt\n }\n if(!this.chatServ?.chatList?.length) this.chatServ.chatList = []\n let index = this.chatServ?.chatList?.find(item=>item?.sid==newChat?.sid)\n if(index>-1){\n this.chatServ.chatList[index] = newChat;\n } else{\n this.chatServ?.chatList.unshift(newChat)\n }\n\n }\n }\n getInviteUrl(url){\n // 判断是否有参数\n let connectChar = \"?\"\n if(url?.indexOf(\"?\")>-1){\n connectChar = \"&\"\n }else{\n connectChar = \"?\"\n }\n // 附加invite参数\n let id = Parse.User?.current()?.id\n if(url?.indexOf(\"invite=\"+id)==-1){\n if(!id) return url\n url += connectChar+ 'invite=' + id\n }\n return url\n }\n // 根据聊天内容及问题,生成标题\n genTitle(){\n if(this.title) return this.title\n let content:string|Array<ChatImageContentItem> = this.messageList.find(item=>item.role==\"user\")?.content\n if(typeof content==\"string\"){ // 截图文本内容文字部分\n this.title = content?.slice(0,15) || \"\"\n }\n if(typeof content==\"object\"){ // 截图复合内容文字部分\n this.title = content?.find(item=>item?.text)?.text || \"\"\n }\n return this.title\n }\n fixMessageList(messages:FmodeChatMessage[]){\n return messages.map(msg=>{return {role:msg.role,content:msg.content}})\n }\n\n nowStr(){\n let now = new Date();\n return `${now.getFullYear()}/${now.getMonth()+1}/${now.getDate()} ${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}`\n }\n \n}\n\n/**\n * FmodeChatCompletion 文本补全类\n * @public\n */\nexport class FmodeChatCompletion{\n indexOfList:number\n model:string\n messages:FmodeChatMessage[] // 补全前提示词列表\n content:string = \"\" // 本次接收消息结果\n contentBuffer:string[] = []\n contentPusher:any\n isCompleted:boolean = false;\n constructor(messages:FmodeChatMessage[],options?:{\n model?:string\n }){\n this.indexOfList = Number(messages.length)\n this.messages = messages\n this.model = options?.model || \"fmode-3.6-16k\"\n }\n /**\n * @param options\n * @param options.isDirect 是否不等待逐字获取,直接完成内容推送\n * @param options.intTime 是否不等待逐字获取,直接完成内容推送\n * @returns \n */\n sendCompletion(options:{\n isDirect?:boolean,\n intTime?:number,\n onComplete?:Function\n }={}):Observable<FmodeChatMessage>{\n options.intTime = options?.intTime || 50 // 按毫秒逐字推送\n options.isDirect = options?.isDirect || false\n if(options?.isDirect) options.intTime = 1\n\n let that = this;\n let opts = {\n \"messages\":this.messages,\n \"stream\":true,\n \"model\":this.model,\n \"temperature\":0.5,\n \"presence_penalty\":0,\n \"frequency_penalty\":0\n }\n console.log(opts)\n let $messageReceiver = new Observable((observer: Observer<FmodeChatMessage>) => {\n let subscription = RequestFmodeChatApi(\"/v1/chat/completions\", opts)\n .subscribe(data => {\n // Handle each chunk of data\n /** Chunk文本数据格式如下:\n 正常消息:\n 'data: {\"id\":\"chatcmpl-y2PLKqPDnwAFJIj2L5aqdH5TWK9Yv\",\"object\":\"chat.completion.chunk\",\"created\":1696770162,\"model\":\"gpt-3.5-turbo-0613\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"本提示词仅用于测试。\"},\"finish_reason\":null}]}',\n 终止原因:\n 'data: {\"id\":\"chatcmpl-y2PLKqPDnwAFJIj2L5aqdH5TWK9Yv\",\"object\":\"chat.completion.chunk\",\"created\":1696770162,\"model\":\"gpt-3.5-turbo-0613\",\"choices\":[{\"index\":0,\"delta\":{},\"finish_reason\":\"stop\"}]}',\n 结束消息:\n 'data: [DONE]'\n */\n let chunk = String(data);\n // Check if the completion message is received\n console.log(chunk)\n if (chunk == 'data: [DONE]') { \n this.isCompleted = true; // 标记完成 => 等待interval推送\n console.log(options?.isDirect,this.isCompleted)\n if(options?.isDirect && this.isCompleted){\n observer.next({\n role:\"assistant\",\n // cid:chunkjson?.['id'],\n content:this.content,\n complete:true, // 推送完成\n createdAt:new Date()\n })\n subscription.unsubscribe(); // Unsubscribe when done\n options?.onComplete&&options.onComplete({\n role:\"assistant\",\n // cid:chunkjson?.['id'],\n content:this.content,\n complete:true, // 推送完成\n createdAt:new Date()\n })\n observer.complete();\n }\n }\n // console.log(chunk)\n if(chunk.indexOf(\"data:\\ {\")>-1){\n let chunkjson = chunkToJson(chunk)\n // console.log(chunk)\n // console.log(chunkjson?.choices?.[0]?.delta)\n let words = chunkjson?.choices?.[0]?.delta?.content || \"\"\n this.contentBuffer.push(words);\n\n // 消息返回模式:定时器推送,模拟逐字输出\n if(options?.isDirect){\n this.content += (words || \"\");\n \n // 默认累加消息结果\n if(!this.isCompleted){\n observer.next({\n role:\"assistant\",\n cid:chunkjson?.['id'],\n content:this.content,\n createdAt:new Date()\n })\n }\n }\n if(!options?.isDirect&&!this.contentPusher){\n this.contentPusher = setInterval(()=>{\n if(this.isCompleted && this.contentBuffer?.length==0){ // 推送完毕,清除计时器\n observer.next({\n role:\"assistant\",\n cid:chunkjson?.['id'],\n content:this.content,\n complete:true, // 推送完成\n createdAt:new Date()\n })\n subscription.unsubscribe(); // Unsubscribe when done\n clearInterval(this.contentPusher)\n observer.complete();\n }\n if(this.contentBuffer?.length>=0){\n if(this.contentBuffer?.length>0){\n this.content += this.contentBuffer.shift()\n }\n observer.next({\n role:\"assistant\",\n cid:chunkjson?.['id'],\n content:this.content,\n createdAt:new Date()\n })\n }\n },options?.intTime)\n }\n // console.log(this.content)\n \n }\n\n });\n })\n return $messageReceiver.pipe(\n bufferTime(100), // 每100ms收集消息\n concatMap(messages => messages), // 使用 concatMap 逐个发送消息\n delay(200) // 延迟200ms输出每条消息\n )\n }\n\n}\n\nfunction chunkToJson(chunk){\n let chunkjson:any\n try{\n chunkjson = JSON.parse(chunk.replaceAll(\"data:\\ \",\"\"));\n }catch(errdj){\n console.error(errdj)\n }\n return chunkjson || {}\n}\nfunction RequestFmodeChatApi(apipath, body, method = \"POST\") {\n return new Observable((observer: Observer<any>) => {\n let url = API_BASE + apipath;\n let API_TOKEN = Parse.User.current()?.getSessionToken() || localStorage.getItem(\"FMODE_AI_TOKEN\");\n // 通过body传递token参数,避免no-cors模式下Authoriztion头部无效\n let AUTH_TOKEN = `Bearer ${API_TOKEN}`\n body.token = AUTH_TOKEN;\n if(body) body = JSON.stringify(body)\n fetch(url, {\n \"headers\": {\n // \"Authorization\": AUTH_TOKEN,\n \"Content-Type\": \"text/plain\",\n \"Cache-Control\": \"no-cache\"\n },\n \"body\": body || null,\n \"method\": method,\n \"credentials\":\"omit\",\n \"mode\": \"cors\"\n }).then(response => {\n let isStream = true || response.headers?.get(\"Content-Type\")?.indexOf(\"text/event-stream\") > -1\n let remainingData = ``;\n\n function processData(data) {\n let combinedData = remainingData + data;\n let messages = combinedData.split('\\n');\n \n if(messages?.length>1){ // 至少分割2条消息时进行处理\n // 处理每个完整的消息\n for (let i = 0; i < messages.length - 1; i++) {\n let message = messages[i];\n observer.next(message)\n }\n\n // 保存最后一个不完整的消息\n remainingData = messages[messages.length - 1];\n }\n }\n\n if (isStream) {\n let greader = response.body?.getReader();\n const decoder = new TextDecoder();\n\n let rstream = new ReadableStream({\n start(controller) {\n function read() {\n greader.read().then(({ done, value }) => {\n if (done) {\n controller.close();\n observer.complete(); // Complete the observer when stream processing is done\n return;\n }\n controller.enqueue(value);\n read();\n });\n }\n\n read();\n }\n });\n\n let reader = rstream.getReader();\n\n function processStream({ done, value }) {\n if (done) {\n return;\n }\n\n let text = decoder.decode(value)\n processData(text) // Emit each chunk of data\n reader.read().then(processStream);\n }\n\n reader.read().then(processStream);\n }\n })\n .catch(error => observer.error(error)); // Handle any errors\n\n // Return the subscription logic\n return () => {\n // Clean up logic, if needed\n };\n });\n }\n \n function JsonToFormData(json) {\n const formData = new FormData();\n \n function appendFormData(data, path = '') {\n if (Array.isArray(data)) {\n data.forEach((value, index) => {\n appendFormData(value, `${path}[${index}]`);\n });\n } else if (typeof data === 'object' && data !== null) {\n Object.keys(data).forEach(key => {\n const newPath = path ? `${path}.${key}` : key;\n appendFormData(data[key], newPath);\n });\n } else {\n formData.append(path, data);\n }\n }\n \n appendFormData(json);\n \n return formData;\n }","import { Injectable } from '@angular/core';\nimport { HttpClient,HttpHeaders } from \"@angular/common/http\";\nimport Parse from \"parse\";\n@Injectable({\n providedIn: 'root'\n})\nexport class NovaCloudService {\n\n serverURL = \"https://server.fmode.cn/api\"\n // serverURL = \"http://127.0.0.1:7337/api\"\n constructor(\n private http:HttpClient,\n ) { \n localStorage.setItem(\"NOVA_APIG_SERVER\",'aHR0cHMlM0ElMkYlMkZzZXJ2ZXIuZm1vZGUuY24lMkZhcGklMkZhcGlnJTJG')\n }\n\n novaql(sql:string,params:Array<any>){\n let url = this.serverURL + '/novaql/select'\n let options:any = {sql:sql}\n if(options&¶ms?.length>0){\n options.params = JSON.stringify(params)\n }\n return new Promise((resolve,reject)=>{\n this.http.post(url,options,{\n headers:new HttpHeaders({\n \"Content-Type\":\"application/json\"\n }),\n withCredentials: false\n }).subscribe(result=>{\n if(result&&(result as any).code == 200){\n let data:any = (result as any).data;\n resolve(data)\n }\n },(err)=>{\n reject(err)\n })\n })\n }\n apig(url:string,body:any,method:string=\"post\"){\n localStorage.setItem(\"NOVA_APIG_SERVER\",'aHR0cHMlM0ElMkYlMkZzZXJ2ZXIuZm1vZGUuY24lMkZhcGklMkZhcGlnJTJG')\n let apigURL = localStorage.getItem(\"NOVA_APIG_SERVER\")\n apigURL = decodeURIComponent(atob(apigURL));\n url = apigURL + url\n console.log(url)\n let user = Parse.User.current();\n return new Promise((resolve,reject)=>{\n try {\n this.http.request(method,url,{\n body:body || null,\n headers:new HttpHeaders({\n \"Content-Type\":\"application/json\",\n \"Authorization\":`Bearer ${user?.getSessionToken()}`\n }),\n withCredentials: false\n }).subscribe(result=>{\n if(result&&(result as any).code == 200 || result&&(result as any).code == 1 || result&&(result as any).code == 0){\n let data:any = (result as any)?.data;\n resolve(data)\n }else{\n resolve(null)\n }\n },(err)=>{\n console.error(err.mess)\n reject(err)\n })\n } catch (error) {\n return console.error('请求出错')\n }\n })\n }\n apigTest(url:string,body:any,method:string=\"post\"){\n let apigURL = \"https://test.fmode.cn/api/apig/\"\n url = apigURL + url\n console.log(url)\n let user = Parse.User.current();\n body.token = `Bearer ${user?.getSessionToken()}`\n return new Promise((resolve,reject)=>{\n try {\n this.http.request(method,url,{\n body:body || null,\n headers:new HttpHeaders({\n \"Content-Type\":\"application/json\",\n // \"Authorization\":`Bearer ${user?.getSessionToken()}`\n }),\n withCredentials: false\n }).subscribe(result=>{\n if(result&&(result as any).code == 200 || result&&(result as any).code == 1 || result&&(result as any).code == 0){\n let data:any = (result as any)?.data;\n resolve(data)\n }else{\n resolve(null)\n }\n },(err)=>{\n console.error(err.mess)\n reject(err)\n })\n } catch (error) {\n return console.error('请求出错')\n }\n })\n }\n api(url:string,body:any):Promise<{code:number|string,data?:any,mess?:string}>{\n url = this.serverURL + url\n return new Promise((resolve,reject)=>{\n this.http.post(url,body,{\n headers:new HttpHeaders({\n \"Content-Type\":\"application/json\"\n }),\n withCredentials: false\n }).subscribe(result=>{\n if(result&&(result as any).code == 200 || result&&(result as any).code == 1){\n let data:any = (result as any).data;\n resolve(data)\n }else{\n resolve(null)\n }\n },(err)=>{\n reject(err)\n })\n })\n }\n searchParse(search?:string):any{\n search = search || location.search;\n let resultObj = {};\n if (search && search.length > 1) {\n search = search.substring(1);\n let items = search.split(\"&\");\n for (let index = 0; index < items.length; index++) {\n if (!items[index]) {\n continue;\n }\n let kv = items[index].split(\"=\");\n resultObj[kv[0]] = typeof kv[1] === \"undefined\" ? \"\" : kv[1];\n }\n }\n return resultObj;\n }\n}\n","import { HostListener, Injectable } from '@angular/core';\nimport { ModalController, NavController, Platform } from '@ionic/angular';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CrossService {\n mobileWidth = 915;\n clientWidth:number = document.body.clientWidth;\n getMenuType(){\n this.clientWidth = document.body.clientWidth;\n this.onResizeScreen()\n return this.navMenuType\n }\n leftMenuMode:string\n navMenuType:string\n fixInterval:any\n constructor(\n private platform:Platform,\n private modalCtrl:ModalController,\n private navCtrl:NavController,\n ){\n this.clientWidth = document.body.clientWidth\n this.updateWidth()\n this.onResizeScreen()\n }\n async dismisModalTop(event?:Event){\n // 尝试获取顶层的模态对话框\n let topModal = await this.modalCtrl.getTop();\n if (topModal) {\n event?.preventDefault&&event?.preventDefault()\n // 如果存在模态对话框,则关闭它\n topModal.dismiss();\n topModal.isOpen = false;\n }\n }\n updateWidth(){\n this.fixInterval = setInterval(()=>{\n if(this.clientWidth) {\n clearInterval(this.fixInterval);\n delete this.fixInterval\n return\n }\n console.log(document.body.clientWidth)\n this.clientWidth = document.body.clientWidth;\n },200)\n }\n // 监听窗体缩放事件\n onResizeScreen(ev?){\n this.clientWidth = document.body.clientWidth\n if(this.clientWidth>=this.mobileWidth){\n this.leftMenuMode= \"horizontal\";\n this.navMenuType = \"pc\";\n }else{\n this.leftMenuMode= \"inline\";\n this.navMenuType = \"mobile\";\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n// import { MASK_LIST } from './mask-list';\nimport { FmodeChat } from './chat-class';\nimport Parse from \"parse\";\nimport { NovaCloudService } from '../../../nova-cloud';\nimport { AlertController, NavController, Platform, ToastController } from '@ionic/angular';\nimport { CrossService } from '../../../platform';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ChatService {\n\n // 已加载聊天信息临时存储\n chatMap:{\n [key:string]:FmodeChat\n } = {}\n isCapacitor:boolean = false;\n\n constructor(\n private router:Router,\n private ncloud:NovaCloudService,\n private platform:Platform,\n private alertCtrl:AlertController,\n private navCtrl:NavController,\n private cross:CrossService\n ) { \n this.isCapacitor = this.platform.is(\"capacitor\")\n\n }\n\n modelList:Array<Parse.Object>\n currentModel:Parse.Object\n async loadModelList(model?:Parse.Object){\n let query = new Parse.Query(\"ChatModel\")\n query.notEqualTo(\"isDeleted\",true)\n query.equalTo(\"isEnabled\",true)\n query.addAscending(\"index\")\n this.modelList = await query.find();\n this.currentModel = model || this.modelList?.find(item=>item.get(\"code\")==\"fmode-3.6-16k\")\n }\n platformMap = {\n \"pc\":\"电脑端\",\n \"mobile\":\"移动端\",\n }\n async doButtonAction(button){\n let type = this.cross.navMenuType\n let platforms = button?.platform?.map(item=>this.platformMap[item]).join(\"、\")\n if(button?.platform?.length>0 && button?.platform?.indexOf(type)==-1){\n let alert = await this.alertCtrl.create({\n header:\"注意\",\n subHeader:\"终端不符\",\n message:`请您使用${platforms}开启本功能。`,\n buttons:[\n {\n role:\"ok\",text:\"知道了\",\n },\n ]\n })\n alert.present();\n return\n }\n if(button?.path){\n this.navCtrl.navigateRoot(button?.path);\n }\n }\n // 初始化未加载会话\n async initChatMap(sessionId){\n if(this.chatMap[sessionId]) return this.chatMap[sessionId]\n let query = new Parse.Query(\"ChatSession\")\n query.include(\"role\",\"role.model\")\n let session = await query.get(sessionId)\n let chat = new FmodeChat(session?.id,session?.get(\"role\"),session,this);\n this.chatMap[sessionId] = chat;\n return this.chatMap[sessionId]\n }\n // 获得历史会话窗口\n chatList:Array<any>\n async getChatSession(){\n if(!Parse?.User?.current()?.id) return // 用户必须登录\n let limit = 10 // 普通用户限查看10条历史记录\n let query = new Parse.Query(\"ChatSession\")\n query.include(\"role\",\"role.model\")\n query.addDescending(\"updatedAt\")\n query.equalTo(\"user\",Parse.User.current().toPointer())\n query.notEqualTo('isDeleted', true);\n query.limit(limit)\n let list = await query.find();\n this.chatList = list.map(item=>{\n // 添加缓存\n this.chatMap[item?.id] = new FmodeChat(item?.id,item?.get(\"role\"),item); \n return {\n session:item,\n sid:item?.id,\n isHidden:false,\n rid:item?.get(\"role\")?.id,\n name:item?.get(\"role\")?.get(\"name\"),\n thumb:item?.get(\"role\")?.get(\"thumb\"),\n title:item?.get(\"title\") || item?.get(\"role\")?.get(\"name\"),\n message:item?.get(\"messageList\")?.[item?.get(\"messageList\")?.length-1]?.content?.slice(0,20),\n latest:item?.createdAt\n }\n })\n }\n async getChatSessionDistinct(){\n let limit = 10 // 普通用户限查看10条历史记录\n let sql = `SELECT t1.\"objectId\" as sid , \"AvatarRole\".\"objectId\" as rid, * FROM (\n SELECT *,ROW_NUMBER() OVER (PARTITION BY \"user\", \"role\" ORDER BY \"createdAt\" DESC) AS rn\n FROM \"ChatSession\" WHERE \"user\"=$1\n ) as t1\n LEFT JOIN \"AvatarRole\" ON \"AvatarRole\".\"objectId\" = t1.\"role\"\n WHERE t1.rn=1\n LIMIT $2\n ;`\n let result:any = await this.ncloud.novaql(sql,[Parse.User.current()?.id,limit])\n let chatList = result?.map(item=>{\n return {\n sid:item?.sid,\n rid:item?.rid,\n name:item?.name,\n message:item?.messageList?.[item?.messageList?.length-1]?.content?.slice(0,20),\n latest:item?.createdAt\n }\n })\n this.chatList = chatList\n return this.chatList\n }\n\n /**\n * 重建新对话窗口\n */\n createChatPanel(role?:any,chat?:any){\n let sessionId = chat?.id||\"new\"\n chat = new FmodeChat(sessionId,role,chat,this);\n this.chatMap[sessionId] = chat; // new 窗口如果没有消息转换成带ID的,每次就会清空\n this.router.navigate([\"/chat/pro/chat/\"+sessionId])\n }\n async createNewRoleChat(roleId):Promise<FmodeChat>{\n let query = new Parse.Query(\"AvatarRole\")\n query.include(\"model\")\n let role = await query.get(roleId);\n // console.log(\"role\",role)\n let chat = new FmodeChat(\"new\",role,null,this);\n return chat\n }\n async restoreChatPanel(options?:{\n rid:string,\n sid:string,\n }){\n let queryr = new Parse.Query(\"AvatarRole\")\n let querys = new Parse.Query(\"ChatSession\")\n let role = await queryr.get(options?.rid);\n let session = await querys.get(options?.sid);\n // let sessionId = \"new\"\n let chat = new FmodeChat(options?.sid,role,session);\n this.chatMap[options?.sid] = chat;\n this.router.navigate([\"/chat/pro/chat/\"+options?.sid])\n\n }\n async callRole(role){\n // 暂时开启全端进入语音对话\n if(false && !this.isCapacitor){\n let alert = await this.alertCtrl.create({\n header:\"注意\",\n subHeader:\"语音对话,限手机APP端可用\",\n message:\"请联系客服获取内测资格哦!\",\n buttons:[\n {\n role:\"ok\",text:\"知道了\",\n },\n ]\n })\n alert.present();\n return\n\n }\n document.body.classList.add('dark');\n this.router.navigate([`/avatar/role/${role.id}`,{\n type:\"phone\"\n }])\n }\n}\n","import SparkMD5 from 'spark-md5';\nexport function calcFileMd5(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (event) => {\n try {\n const data = event.target?.result;\n if (data) {\n const spark = new SparkMD5.ArrayBuffer();\n spark.append(data as ArrayBuffer);\n const hash = spark.end();\n resolve(hash);\n } else {\n reject(new Error(\"Failed to load file\"));\n }\n } catch (error) {\n reject(error);\n }\n };\n reader.onerror = (error) => {\n reject(error);\n };\n reader.readAsArrayBuffer(file);\n });\n}\n","import { DatePipe } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { Platform } from '@ionic/angular';\nimport { Camera,CameraResultType, CameraSource } from \"@capacitor/camera\"\nimport { Capacitor } from \"@capacitor/core\";\nimport { Filesystem } from \"@capacitor/filesystem\";\nimport { FilesystemWeb } from '@capacitor/filesystem/dist/esm/web.js'\nimport * as qiniu from \"qiniu-js\"\nimport Parse from \"parse\";\nimport { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';\n\n/**\n * MediaCapture插件\n * @private\n * @description\n * 依赖:File\n * npm i -S cordova-plugin-file @awesome-cordova-plugins/file\n */\nimport { MediaCapture,MediaFile,CaptureVideoOptions,CaptureError } from \"@awesome-cordova-plugins/media-capture\"\nimport { calcFileMd5 } from './util-file-md5';\n\n/**\n * NovaFile 文件类型\n * @public\n */\nexport interface NovaFile{\n id:string\n key:string\n url:string\n name:string\n type:string\n size:number\n md5?:string\n}\n\n/**\n * NovaUploadService 上传服务\n * @public\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NovaUploadService {\n\n company:string\n uptoken:string\n qiniuConf:any \n domain:string\n\n constructor(\n private platform:Platform,\n private diagnostic: Diagnostic, \n ) { \n this.getUptoken(true)\n this.requestPermission();\n this.queryDomain();\n }\n /**\n * 全端通用上传方法\n * @params file:File 待上传文件\n * @params onProgress:Function 上传进度回调函数\n * @returns\n * progressData {\n \"total\": {\n \"size\": 8491,\n \"loaded\": 8490,\n \"percent\": 99.98822282416675\n }\n }\n * novafileData {\n \"id\":\"xxxxxxxxxx\" // Attachment.objectId\n \"hash\": \"FoYHjpyTif1t8uOMv6N6sVIeGTvq\",\n \"key\": \"E4KpGvTEto/20230901/053605467.jpg\",\n \"url\": \"https://file-cloud.fmode.cn/E4KpGvTEto/20230901/053605467.jpg\",\n \"name\": \"20230901173605.jpg\",\n \"type\": \"image/jpg\",\n \"size\": 7853\n }\n */\n async upload(file:File,onProgress?:Function):Promise<NovaFile>{\n // 解析文件类型,并获得文件后缀\n let type = file.type \n\n let nameList = file.name?.split(\".\")\n let format = nameList[nameList.length-1] // 文件后缀\n\n // 计算文件md5\n let md5File\n try{\n md5File = await calcFileMd5(file)\n }catch(errmd5){}\n // 转换文件blob\n let blob = this.fileToBlob(file)\n\n // 图片上传\n let uploadFile:NovaFile\n if(type.indexOf('image')>-1){\n uploadFile = await this.saveQiniuImageFile(blob,format,null,onProgress)\n }else{\n uploadFile = await this.saveQiniuMediaFile(file,blob,null,onProgress)\n }\n uploadFile.md5 = md5File\n\n // 纠正file.url\n if(uploadFile?.url?.indexOf('undefined')>-1){\n uploadFile.url = (this.qiniuDomain || \"https://file-cloud.fmode.cn/\") + uploadFile.url.replace(\"undefined/\", \"\");\n }\n\n // 保存附件\n let attachment\n if(uploadFile?.url){\n attachment = await this.saveAttachment(uploadFile,this.qiniuDomain,null,this.getCompanyId())\n }\n if(attachment?.id){\n uploadFile.id = attachment?.id\n }\n return uploadFile\n }\n\n /**\n * 移动端上传专用方法\n * @returns \n */\n isCapacitor(){\n return this.platform.is(\"capacitor\") || this.platform.is(\"cordova\")\n }\n async requestPermission(){\n if(!this.isCapacitor()) return\n await this.requestStoagePermission();\n await this.requestCameraPermission();\n }\n async requestStoagePermission(){\n let isAvailable = await this.diagnostic.isExternalStorageAuthorized()\n console.log(\"permisson_STORAGE:\", isAvailable)\n if (!isAvailable) {\n let data = await this.diagnostic.requestExternalStorageAuthorization()\n }\n return\n }\n async requestCameraPermission(){\n let isAvailable = await this.diagnostic.isCameraAuthorized()\n console.log(\"permisson_Camera:\", isAvailable)\n if (!isAvailable) {\n let data = await this.diagnostic.requestCameraAuthorization()\n }\n return\n}\n\n/**\n * 上传Token获取方法\n * @returns \n */\n async getUptoken(refresh:boolean=false) {\n console.log(\"getUptoken\")\n if(!this.qiniuConf && !refresh) return;\n try {\n console.log(this.getCompanyId())\n let data = await Parse.Cloud.run(\"qiniu_uptoken\", {\n company: this.getCompanyId(),\n })\n console.log(data)\n this.qiniuConf = data\n } catch (err) {\n console.error(err)\n }\n }\n /**\n * 生成文件上传Key值:<公司id>/<yyyymmdd>/<file.id><hhMMss>.<ext>\n * @desc 用于对象存储含全路径的文件名称\n */\n genFileKey(file:{id:string,name:string},company?){\n let today = new Date()\n let dp = new DatePipe(\"en\")\n if(!company){\n company = this.getCompanyId();\n }\n return \"\" + company + \"/\" + dp.transform(today, \"yMMdd\") + \"/\" + String(file.id).substr(20, 6) + dp.transform(today, \"hhmmssSSS\") + /\\.[^\\.]+/.exec(file.name);\n }\n\n /**\n * 获取当前登录用户公司ID\n * @returns 公司ID\n */\n getCompanyId(){\n // 获取公司ID,或无指定值,则获取localStorage中company\n if(this.company){\n return this.company\n }\n let id = localStorage.getItem(\"company\")\n return id\n }\n qiniuDomain:string\n async queryDomain() {\n let Company = new Parse.Query('Company')\n let company = await Company.get(this.getCompanyId())\n if (company.get(\"configQiniu\") && company.get(\"configQiniu\").domain) {\n console.log(company.get(\"configQiniu\").domain)\n this.qiniuDomain = company.get(\"configQiniu\").domain;\n } else{\n this.qiniuDomain = 'https://file-cloud.fmode.cn';\n }\n }\n\n /**\n * 保存上传信息至附件表 Attachment\n * @param file 附件信息\n * @returns attachment Parse.Object\n */\n async saveAttachment(file:NovaFile|{url:string,size:string,name:string,type:string,md5?:string},domain,cateId?,company?):Promise<Parse.Object> {\n let url = file.url\n if (url.startsWith(\"http\")) {\n } else {\n url = domain + url\n }\n url = url.replace(/undefined\\//, \"\");\n\n\n // 帐套参数默认加载本地存储\n if(!company){\n company = localStorage.getItem(\"company\")\n }\n let user = Parse.User.current();\n\n // 检测文件是否存在\n let query = new Parse.Query(\"Attachment\");\n query.equalTo(\"url\", url);\n let attachment = await query.first();\n\n if (attachment && attachment.id) {\n console.error(\"该文件已存在,无需重复上传\");\n return attachment\n } else {\n let Attachment = Parse.Object.extend(\"Attachment\")\n attachment = new Attachment();\n attachment.set(\"size\", file.size)\n attachment.set(\"url\", url)\n attachment.set(\"name\", file.name)\n attachment.set(\"mime\", file.type)\n attachment.set(\"md5\",file?.md5)\n if(user?.id){\n attachment.set(\"user\",user.toPointer())\n }\n if(company){\n attachment.set(\"company\", {\n __type: \"Pointer\",\n className: \"Company\",\n objectId: localStorage.getItem(\"company\")\n })\n }\n if (cateId) {\n attachment.set(\"category\", {\n __type: \"Pointer\",\n className: \"Category\",\n objectId: cateId\n })\n }\n return await attachment.save()\n }\n}\n\n/**\n * 录像并上传\n */\nasync captureVideo(conf): Promise<any>{\n this.qiniuConf = conf;\n if(!this.isCapacitor()) return;\n // {\"name\":\"VID_20230513_182235.mp4\",\"localURL\":\"https://localhost/__cdvfile_sdcard__/DCIM/Camera/VID_20230513_182235.mp4\",\"type\":\"video/mp4\",\"lastModified\":null,\"lastModifiedDate\":1683973355000,\"size\":6100161,\"start\":0,\"end\":0,\"fullPath\":\"file:///storage/emulated/0/DCIM/Camera/VID_20230513_182235.mp4\"}\n let mediaFile:any = await this.cameraCaptureVideoFile();\n // let mediaData:string = await this.getMediaFileDataString(mediaFile);\n let fileBlob = await this.getMediaFileDataString(mediaFile);\n // let fileBlob = await this.base64ToBlobType(mediaData,mediaFile.type);\n let qiniuFile = await this.saveQiniuMediaFile(mediaFile,fileBlob)\n return qiniuFile\n}\nasync cameraCaptureVideoFile():Promise<MediaFile|any|null>{\n let options: CaptureVideoOptions = {\n limit:1,\n // quality:50\n }\n let mediaCapture = MediaCapture;\n let list:MediaFile[] | CaptureError | any= await mediaCapture.captureVideo(options)\n if(list?.length>0){\n return list[0]\n }\n return null\n}\n\n\nasync getMediaFileDataString(mediafile){\n let filesystem = new FilesystemWeb()\n let path = mediafile.fullPath.replaceAll(\"///\",\"//\")\n \n let stat = await Filesystem.stat({ path:mediafile.fullPath});\n let webUri = Capacitor.convertFileSrc(stat.uri)\n let content = await fetch(webUri)\n let blob = await content.blob()\n console.log(blob.size)\n \n console.log(JSON.stringify(stat))\n // CapacitorConver\n\n // file:///storage/emulated/0/DCIM/Camera/VID_20230612_125907030.mp4\n // let filesystem = Filesystem\n // let content = await filesystem.readFile({\n // path:mediafile.fullPath\n // })\n console.log(JSON.stringify(content))\n console.log(JSON.stringify(Object.keys(content)))\n // console.log(content?.data)\n if(blob){\n return blob\n }else{\n throw \"读取文件失败\"\n }\n}\n /**\n * 拍照并上传\n * @returns -- {hash?:string,url:string,name:string,size:number,key:stirng}\n */\n async takePicture(conf): Promise<any>{\n this.qiniuConf = conf;\n if(!this.isCapacitor()) return\n await this.getUptoken();\n let image = await this.cameraTakePictureDataUrl()\n // image.format\n if(!image?.dataUrl) return\n let blob = await this.base64ToBlob(image?.dataUrl)\n let qiniuFile = await this.saveQiniuImageFile(blob,image?.format)\n console.log(JSON.stringify(qiniuFile))\n // this.saveAttachment()\n return qiniuFile\n };\n async cameraTakePictureDataUrl(){ // WebUrl + Base64\n if(!this.isCapacitor()) return\n const image = await Camera.getPhoto({\n quality: 90,\n allowEditing: false,\n // saveToGallery:true,\n source:CameraSource.Camera,\n resultType: CameraResultType.DataUrl\n });\n return image;\n }\n\n maxSize = 5 * 1024 * 1024\n /**\n * 七牛上传函数:无需前端组件\n * @param imageBlob: Blob\n * @param format: string\n */\n async saveQiniuImageFile(imageBlob: Blob,format:string,company?:string,onProgress?:Function): Promise<NovaFile|any> {\n // let that = this\n let maxSize = this.maxSize\n if (imageBlob.size > maxSize) {\n await console.log(`照片过大,超出限制5MB`)\n throw \"超出文件大小\"\n }\n let dp = new DatePipe(\"en\")\n let id = dp.transform(new Date(), \"yyyyMMddHHmmss\")\n let name = `${id}.${format}`\n let type = `image/${format}`\n // let file = new File([imageBlob], filename, { type: \"image/jpeg\" })\n let putExtra = {\n fname: name,\n params: {},\n mimeType: \"image/*\",\n }\n let config = {\n useCdnDomain: true, //使用cdn加速\n forceDirect:true // 强制不分片,放置上传报错\n }\n console.log(this.qiniuConf)\n\n let qiniuFileKey = this.genFileKey({id:id,name:name})\n console.log(\"图片上传前\")\n return new Promise((resolve, reject) => {\n console.log(\"进入了上传\")\n let observable = (qiniu as any).upload(\n imageBlob,\n qiniuFileKey,\n this.qiniuConf?.uptoken,\n putExtra,\n config\n )\n observable.subscribe({\n next: (result_2) => {\n // 主要用来展示进度\n console.log(result_2)\n onProgress&&onProgress(result_2)\n },\n error: async (err_1) => {\n // this.$notify('上传图片失败');\n // await that.presentToast(`检测失败`, 1500, \"danger\")\n console.log(err_1)\n },\n complete: (res_1) => {\n console.log(\"上传完成\")\n console.log(`${this.qiniuConf?.domain}${res_1.key}`)\n res_1.url = `${this.qiniuConf?.domain}${res_1.key}`\n res_1.name = name\n res_1.type= type\n res_1.size = imageBlob.size;\n resolve(res_1)\n },\n })\n })\n }\n async saveQiniuMediaFile(mediafile:any,fileBlob: Blob,company?:string,onProgress?:Function): Promise<NovaFile|any> {\n // let that = this\n let name = mediafile.name\n let type = mediafile.type\n let size = mediafile.size\n let maxSize = 100 * 1024 * 1024 // 限100M\n if (size > maxSize) {\n console.log(`视频过大,超出限制100MB`)\n throw \"超出文件大小\"\n }\n let dp = new DatePipe(\"en\")\n let id = dp.transform(new Date(), \"yyyyMMddHHmmss\")\n // let file = new File([mediaBlob], filename, { type: \"image/jpeg\" })\n let putExtra = {\n fname: name,\n params: {},\n mimeType: type,\n }\n let config = {\n useCdnDomain: true, //使用cdn加速\n forceDirect:true // 强制不分片,放置上传报错\n }\n\n let qiniuFileKey = this.genFileKey({id:id,name:name})\n console.log(\"图片上传前\")\n console.log(mediafile.name,fileBlob.size)\n console.log(fileBlob.size)\n console.log(fileBlob.size/1024/1024)\n return new Promise((resolve, reject) => {\n console.log(\"进入了上传\")\n let observable = (qiniu as any).upload(\n fileBlob,\n qiniuFileKey,\n this.qiniuConf?.uptoken,\n putExtra,\n config\n )\n observable.subscribe({\n next: (result_2) => {\n // 主要用来展示进度\n console.log(\"主要用来展示进度\")\n onProgress&&onProgress(result_2)\n console.log(JSON.stringify(result_2))\n },\n error: async (err_1) => {\n console.log(\"上传失败\")\n // this.$notify('上传图片失败');\n // await that.presentToast(`检测失败`, 1500, \"danger\")\n console.log(JSON.stringify(err_1))\n },\n complete: (res_1) => {\n console.log(\"上传完成\")\n console.log(JSON.stringify(res_1))\n // console.log(`${this.qiniuConf?.domain}${res_1.key}`)\n // res_1.url = `${this.qiniuConf?.domain}${res_1.key}`\n // res_1.name = name\n // res_1.type= type\n // res_1.size = size;\n mediafile.key = res_1.key\n console.log(mediafile.type)\n mediafile.url = `${this.qiniuConf?.domain}${res_1.key}`\n console.log(mediafile.url)\n resolve(mediafile)\n },\n })\n })\n }\n\n //string转File文件\n async base64ToBlobType(string,type){\n let base64Response = await fetch(`data:${type};base64,${string}`);\n let blob = await base64Response.blob();\n return blob\n string = atob(string)\n return new Blob([string],{\n type:type\n })\n }\n //base64转File文件\n async base64ToBlob(base64Img: string) {\n let base64Response = await fetch(base64Img);\n let blob = await base64Response.blob();\n return blob\n }\n fileToBlob(file:File):Blob {\n const blob = file.slice(0, file.size, file.type);\n return new Blob([blob], { type: file.type });\n }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { NovaCloudService } from '../../../nova-cloud/nova-cloud.service';\nimport Parse from \"parse\";\nimport { NovaUploadService } from '../../../storage/service-upload/nova-upload.service';\n\n/**\n * DalleOptions 绘画参数接口\n * @public\n */\nexport interface DalleOptions{\n prompt:string\n quality?:null | \"hd\"\n n?:1\n model?: \"dall-e-3\" | \"dall-e-2\"\n size?: \"1024x1024\" | \"1792x1024\" | \"1024x1792\"\n style?:\"vivid\" | \"natural\" \n}\n//高级AI绘图 api文档 https://www.showdoc.com.cn/2307900595645609/10319677266305138\nexport interface StableDiffusionOptions{\n prompt :string //支持中英文\n modelStyleId :number\t//模型风格配置ID,请使用我们官方提供的风格列表\n//基础参数\n negativePrompt ?:string //仅支持中文\n\n width ?:number\t//宽,默认512,不可超过2048\n height ?:number\t//高,默认512,不可超过2048\n steps ?:number\t//迭代步数,默认20,不可超过50\n seed ?:number\t//随机种子,默认不传则为随机生成\n cfgScale\t ?:number\t//提示词引导系数,取值范围1-30\n//额外参数 仅图生图\n hrScale ?:number\t//高清修复倍率,仅在文生图模式生效,取值不可以超过3\n hrSteps ?:number\t//高清迭代步数,默认20,不可超过30(不建议少于15,会严重影响画面生成效果)\n//额外参数 \n upscale\t ?:number\t//AI放大倍数,取值不可以超过3\n batchSize\t ?:number\t//生成图片数,取值不可以超过6\n//额外参数\n faceFix\t ?:boolean\t//是否开发脸部修复,注意,开启此功能需额外扣除2积分\n detailsLevel ?:number\t//脸部修复细节刻画等级,取值范围1-9\n //以下为图生图\n img ?:string //图片URL保证公网可查看\n imgOptions ?:imgOptions\n denoisingStrength?:number\t//重绘幅度,仅在img字段有传值的时候生效,取值范围0~1,取值越大画面与参考图差别越大\n controlnet?:{\n units?:ControlnetUnits[]\n }\n}\n\n/**\n * imgOptions 图像配置参数\n * @public\n */\nexport interface imgOptions{\n removeBackground ?:boolean //是否自动移除图片中的人物背景,一般用于重绘背景有效,注意:开启此功能需额外扣除2积分\n redrawBackground ?:boolean //是否保留画面中的主体,仅绘制画面中的背景注意:开启此功能需额外扣除2积分\n mainObjectType ?:\"human\"\t| \"general\" //自定识别画面中的主体,用于背景处理。取值:general:通用场景识别,用于自动识别画面中的主体,human:识别并保留画面中的人物。当removeBackground或者redrawBackground为true的时候,画面中的主体类型,请根据您的画面中的实际情况传值,默认为human\n facePreservation ?:boolean //自动检测图片中的人脸,使生成后的人脸与原始人脸保持高度相似。注意,开启此功能需额外扣除2积分\n facePreservationCount?:number\t //开启人脸保持后,画面中最多处理的人脸数量,默认为1,最大值可以为5\n genderDetect ?:boolean \t//是否自动检测图片中的人物性别,尽量使生成前后的人物性别不发生变化,如果图片中有多个人物性别则效果会不准确。注意,开启此功能需额外扣除1积分\n}\n\n/**\n * ControlnetUnits 控制网络单元\n * @public\n */\nexport interface ControlnetUnits{\n isOpen ?:boolean // 是否启用该控制参数\n type\t ?:string //\t\tcontrolnet干预形式\n preprocess\t ?:boolean //\t\t是否需要对参考图进行预处理提取可用信息\n image\t ?:string //\t\tcontrolnet需要参考的图片,不传默认为图生图的原始图片,可以为base64图片或者图片url\n controlMode\t ?:number //\t\tcontrolnet控制模式,0、平衡模式(默认),1:提示词更重要,2:controlnet更重要\n weight\t ?:number //\t\tcontrolnet权重,范围为0~2,默认为1,\n controlStart ?:number //\t\tcontrolnet生效时机,范围为0~1,默认为0\n controlEnd\t ?:number //\t\tcontrolnet退出时机,范围为0~1,默认为1\n paramsA\t ?:number //\t\tcontrolnet预处理器对应参数A\n paramsB\t ?:number //\t\tcontrolnet预处理器对应参数B\n controlArray ?:any[]\n}\n\n/**\n * ImagineService AI绘画服务\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ImagineService {\n\n /**\n * 图片生成接口主机地址\n */\n constructor(\n private http:HttpClient,\n private ncloud:NovaCloudService,\n private uploadServ:NovaUploadService,\n ) {}\n /**\n * DALL-E-3 图片生成函数\n * @description\n * @see \n * https://p4.hosteagle.club/docs/api-reference?__cpo=aHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29t\n * @param {DalleOptions} options\n * @param {string} options.prompt 1000 characters for dall-e-2 and 4000 characters for dall-e-3.\n * @param {string} options.model dall-e-3 dall-e-2\n * @param {string} options.quality dall-e-3 only hd means more details & consistency\n * @param {string} options.response_format url | b64_json\n * @param {string} options.size 1024x1024, 1792x1024, or 1024x1792 for dall-e-3\n * @param {string} options.style vivid | natural dall-e-3 only\n */\n async drawDalle(options:DalleOptions){\n options.size = options?.size || \"1024x1024\"\n options.style = options?.style || \"natural\"\n options.quality = options?.quality || null\n \n let reqDalle = {\n \"model\": \"dall-e-3\", \n \"prompt\": options.prompt,\n \"n\": 1,\n \"quality\":options.quality,\n // response_format:\"b64_json\",\n response_format:\"url\",\n \"size\": options.size,\n \"style\": options.style\n }\n if(options.prompt?.length>3000){\n throw \"prompt maximum < 4000 characters\"\n }\n let data:any = await this.ncloud.apigTest(\"aigc/gpt/v1/images/generations\",reqDalle)\n console.log(data)\n if(data?.id){\n let query = new Parse.Query(\"ImagineWork\")\n query.get(data?.id);\n let work = await query.first();\n console.log(work)\n if(work?.id) this.newWorkList.unshift(work)\n }\n return data\n /**\n * @param json.data[0].b64_json 图片二进制的b64格式\n Response {\n \"created\": 1589478378,\n \"data\": [\n {\n \"url\": \"https://...\"\n },\n {\n \"url\": \"https://...\"\n }\n ]\n }\n */\n }\n priceDalle(options:DalleOptions){\n let priceList:Array<any> = [\n {\"model\":\"dall-e-3\",quality:null,\t\"size\":\"1024x1024\",\t \"credit\": 2*10*8*0.04},\n {\"model\":\"dall-e-3\",quality:null,\t\"size\":\"1024x1792\",\t \"credit\": 2*10*8*0.08},\n {\"model\":\"dall-e-3\",quality:null,\t\"size\":\"1792x1024\",\t \"credit\": 2*10*8*0.08},\n {\"model\":\"dall-e-3\",quality:\"hd\",\t\"size\":\"1024x1024\",\t \"credit\": 2*10*8*0.08},\n {\"model\":\"dall-e-3\",quality:\"hd\",\t\"size\":\"1024x1792\",\t \"credit\": 2*10*8*0.12},\n {\"model\":\"dall-e-3\",quality:\"hd\",\t\"size\":\"1792x1024\",\t \"credit\": 2*10*8*0.12},\n {\"model\":\"dall-e-2\",quality:null,\t\"size\":\"1024x1024\",\t \"credit\": 2*10*8*0.02},\n {\"model\":\"dall-e-2\",quality:null,\t\"size\":\"512x512\",\t \"credit\": 2*10*8*0.018},\n {\"model\":\"dall-e-2\",quality:null,\t\"size\":\"256x256\",\t \"credit\": 2*10*8*0.016}\n ]\n let price = priceList.find(item=>item.model==options.model && item.quality==options.quality && item.size==options.size)\n let credit = price?.credit || 2*10*8*0.12\n return credit\n }\n priceStableDiffusion(options:StableDiffusionOptions){\n let size = options.width*options.height\n let num = 0.3 //飞码能量换算常数\n let credit = size*0.000000763*options.steps\n + size*0.00002278 * (options?.upscale || 0)\n + (options?.hrSteps || 0)*size*( options?.hrScale || 0) *( options?.hrScale || 0)* 0.000000763\n + (options?.faceFix? 2:0)\n + (options?.imgOptions?.removeBackground? 2:0)\n + (options?.imgOptions?.redrawBackground? 2:0)\n + (options?.imgOptions?.facePreservation? 2:0)\n + (options?.imgOptions?.genderDetect? 1:0)\n + (options?.controlnet?.units?.length || 0)*2\n // console.log(credit);\n\n credit = credit * num *options.batchSize\n\n \n // console.log(credit);\n\n return credit\n }\n b64DataToBase64Image(b64_json){\n let data = atob(b64_json)\n let blob = new Blob([data], { type: 'image/webp' });\n new Promise(resolve=>{\n // 使用 FileReader 将 Blob 对象转换为 base64 字符串\n let reader = new FileReader();\n reader.onloadend = function() {\n let base64data = reader.result;console.log(base64data)\n resolve(base64data)\n };\n reader.readAsDataURL(blob);\n })\n }\n /**\n * Huashi6专用绘图函数\n * @param reqBody \n * @see\n * 接口reqBody参数,参考:https://www.showdoc.com.cn/2307900595645609/10319675987319598\n * 密码:123456\n * @returns \n */\n async draw(reqBody:any){\n let data:any = await this.ncloud.apig(\"aigc/sdapi/v1/draw\",reqBody)\n // 正常生成taskId后,获取数据添加到列表中\n let taskId = data?.paintingSign\n if(taskId){\n setTimeout(async () => {\n let query = new Parse.Query(\"ImagineWork\")\n query.equalTo(\"taskId\",taskId);\n let work = await query.first();\n console.log(work)\n if(work?.id) this.newWorkList.unshift(work)\n }, 1000);\n }\n return data\n }\n /**\n * 已完成的直接加载,未完成的再接口更新\n * @param taskId \n * @returns \n */\n async taskDetail(taskId:string){\n let data:any = await this.ncloud.apig(\"aigc/sdapi/v1/task/detail\",{taskId:taskId})\n console.log(data)\n this.taskDetailMap[taskId] = data\n return data\n }\n taskDetailMap:any = {}\n\n /**\n * 我的绘画作品共享方法\n */\n newWorkList:Array<Parse.Object> = []\n myWorkList:Array<Parse.Object> = []\n getMyWorkQuery(){\n let user = Parse.User.current()\n if(!user?.id) return\n let query = this.getWorkQuery()\n query.include(\"model\",\"module\",\"user\")\n query.equalTo(\"user\",user.toPointer());\n return query\n }\n getWorkQuery(){\n\n // 获取 1 分钟前的时间\n let oneMinutesAgo = new Date(new Date().getTime() - 1 * 60 * 1000);\n\n let query = Parse.Query.fromJSON(\"ImagineWork\",{\n where:{\n $or:[\n // 超时60秒,且进度不为0\n {createdAt:{$lte:oneMinutesAgo},progress:{$ne:0}},\n // 60秒内,不限进度\n {createdAt:{$gt:oneMinutesAgo}}\n ]\n }\n });\n query.include(\"model\",\"module\",\"user\");\n query.notEqualTo(\"isDeleted\",true)\n query.notEqualTo(\"isFailed\",true)\n query.doesNotExist(\"respData.error\") // DE 算力瓶颈\n query.doesNotExist(\"respData.data.taskLimitCount\") // SD并发超限\n query.addDescending(\"createdAt\");\n return query;\n }\n getimg(): Promise<string> {\n return new Promise((resolve, reject) => {\n let input = document.createElement('input');\n input.type = 'file';\n input.click();\n \n let handleChange = async () => {\n input.removeEventListener('change', handleChange);\n if (input.files && input.files.length > 0) {\n let file = input.files[0];\n let fileResult = await this.uploadServ.upload(file,(res)=>{\n console.log(res) // 上传进度,可以同步更新页面上传百分比\n res.total.percent.toFixed(2)//上传进度\n });\n // 测试使用固定图片\n // let fileResult = {\n // url: \"https://file-cloud.fmode.cn/E4KpGvTEto/20230808/s12uh1092414597.png\"\n // };\n \n resolve(fileResult.url);\n } else {\n reject(\"未选择文件\");\n }\n };\n \n input.addEventListener('change', handleChange);\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ChatService } from './service-chat/chat.service';\nimport { ImagineService } from './service-imagine/imagine.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FmaiService {\n\n constructor(\n private imagine:ImagineService,\n private chat:ChatService\n ) { }\n\n \n\n}\n","let colorMap = [\n \"primary\",\n \"secondary\",\n \"tertiary\",\n \"success\",\n \"warning\",\n \"danger\",\n \"light\",\n \"medium\",\n \"dark\"\n]\n\nexport const MASK_LIST = [\n // 数字员工\n {\n name:\"执行李\",\n type:\"employee\",\n title:\"首席执行官\",\n desc:\"一位富有远见和领导才能的创业新秀。她具备战略思维和决策能力,能够为公司设定长期目标并领导团队实现这些目标。\",\n color:colorMap[0],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_48766.jpg?e=1695974629&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:oPkQSsyQLLD08R_J4SMeO1f1RdM=\"\n },\n {\n name:\"技术刘\",\n type:\"employee\",\n title:\"首席技术官\",\n desc:\"一位技术专家,拥有广泛的技术知识和经验。他善于解决复杂的技术问题,并能够领导开发团队实施创新的技术解决方案。\",\n color:colorMap[1],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/9/29/9_619877.jpg?e=1695952672&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:LDuSg8_n5g4Rj_8F5PKrGzV4T54=\",\"https://imgsource.huashi6.com/images/ai/2023/9/27/20_17767.jpg?e=1695819037&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:a9uOeeJMN2oopK-3WQZzldPXfH0=\"]\n },\n {\n name:\"点子王\",\n type:\"employee\",\n title:\"首席运营官\",\n desc:\"一位富有创意和市场洞察力的市场营销专家。她擅长制定营销策略,了解目标受众,并能够利用各种渠道和工具推广公司的产品或服务。\",\n color:colorMap[2],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/9_186291.jpg?e=1695952125&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:EhEUtwnC9hpu-SXXsBrp2Q-rcJk=\"\n },\n {title:\"设计总监\",\n name:\"李欣\",\n type:\"employee\",\n desc:\"一位富有创造力和用户导向思维的设计师。她能够理解用户需求,并通过设计直观、易用且吸引人的用户界面来提供出色的用户体验。\",\n color:colorMap[3],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/9_18099.jpg?e=1695952201&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:G_a60v52iTTqvJgeTSa_8zJUY2w=\"\n }, \n\n {title:\"运营经理\",\n name:\"刘洁\",\n type:\"employee\",\n desc:\"一位组织能力强、注重细节并擅长解决问题的运营专家。她能够协调各个部门的工作,并确保公司的运营流程高效运行。\",\n color:colorMap[4],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/9_842519.jpg?e=1695952125&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:FM_kKZDzkcLQ1EX4266dXU46cRc=\"\n\n },\n\n {title:\"销售经理\",\n name:\"张伟\",\n type:\"employee\",\n desc:\"一位富有销售天赋和人际交往能力的销售专家。他善于与客户建立良好的关系,并能够推动销售团队实现业绩目标。\",\n color:colorMap[5],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_739110.jpg?e=1695974920&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:vg_sn-qn67MJS-7j2o7mWzOCUSk=\"\n },\n\n\n {title:\"数据分析师\",\n name:\"杨晨\",\n type:\"employee\",\n desc:\"一位善于解读数据和提供商业洞察的数据分析专家。她能够收集、分析和解释数据,为公司的决策制定提供有力的支持。\",\n color:colorMap[6],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_204321.jpg?e=1695974779&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:dC2sGmJekSPBTCycPF76BkQPBoo=\"\n },\n\n\n {title:\"财务经理\",\n name:\"赵晓\",\n type:\"employee\",\n desc:\"一位精通财务管理和分析的专业人士。她能够制定财务战略、管理公司的财务流程,并提供准确的财务报告和预测。\",\n color:colorMap[7],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_947878.jpg?e=1695974779&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:TFGn0_l2PqhUTe9G4A3it769hcU=\"\n },\n {title:\"品牌专员\",\n name:\"王雅\",\n type:\"employee\",\n desc:\"一位富有创意和品牌意识的专业人士。她能够塑造和管理公司的品牌形象,制定品牌营销策略,并与内部和外部利益相关者建立良好的合作关系。\",\n color:colorMap[8],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_129581.jpg?e=1695975151&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:YQrpiv1hBKRPIdaEbDDDkLFuPG8=\",\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_912136.jpg?e=1695975151&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:8SVMU1rdKD8eaJ1gH_qGQzcrMhM=\"]\n },\n // 数字教师\n {\n title:\"全科\",\n name:\"孔博\",\n type:\"teacher\",\n desc:\"擅长全科教学的金牌教师,知识面广泛,博古通今,因材施教,耐心稳重。\",\n color:colorMap[0],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/12_40958.jpg?e=1697604189&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:U7r1Td30lXdf9mE1TMVAnDhBP6c=\"]\n },\n {\n title:\"语文\",\n name:\"王明\",\n type:\"teacher\",\n desc:\"激发学生对文学的热爱,引导他们成为优秀的作家和沟通者。\",\n color:colorMap[1],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/11_698893.jpg?e=1697602689&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:hK_AuY7BA1pp33QVeUue5QjIg4o=\"]\n },\n {\n title:\"数学\",\n name:\"万红\",\n type:\"teacher\",\n desc:\"以清晰的逻辑和耐心的指导,帮助学生掌握数学的基础知识和解题技巧。\",\n color:colorMap[2],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/11_256253.jpg?e=1697603314&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:K2iqp_ZzHYzXNu_0VJlywyANHp8=\"]\n },\n {\n title:\"英语\",\n name:\"张瑞\",\n type:\"teacher\",\n desc:\"激发学生对英语学习的兴趣,培养他们的听、说、读、写能力,让他们自信地运用英语。\",\n color:colorMap[3],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/12_266171.jpg?e=1697603707&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:uhpxBbT-jlSt_KjAnj0SFsFAjWU=\"]\n },\n {\n title:\"物理\",\n name:\"金晓\",\n type:\"teacher\",\n desc:\"通过实验和案例,帮助学生理解物理原理,培养他们的科学思维和实验技能。\",\n color:colorMap[4],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/11_694925.jpg?e=1697603071&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:FznZxhkYUrZ-BzX05dvNt8acTUw=\"]\n },\n {\n title:\"化学\",\n name:\"陈华\",\n type:\"teacher\",\n desc:\"激发学生对化学的好奇心,教授他们化学知识和实验技巧,培养他们的实验和分析能力。\",\n color:colorMap[5],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/11_942234.jpg?e=1697603169&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:__2T8cxLl4J0AwMR9MJdDiooDF0=\"]\n },\n {\n title:\"生物\",\n name:\"杨婷\",\n type:\"teacher\",\n desc:\"引导学生探索生命的奥秘,培养他们的科学观察和实验能力,让他们热爱生物科学。\",\n color:colorMap[6],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/12_330738.jpg?e=1697603491&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:2K5-DHPnUQ-R9GGxtWKiEG68QlE=\"]\n },\n {\n title:\"历史\",\n name:\"赵亮\",\n type:\"teacher\",\n desc:\"帮助学生了解历史事件和文化背景,培养他们的历史意识和批判思维。\",\n color:colorMap[7],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/11_256302.jpg?e=1697602689&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:YP7ffC1YKO-Pb0C3ks4caT0QqZk=\"]\n },\n {\n title:\"地理\",\n name:\"林丽\",\n type:\"teacher\",\n desc:\"引导学生探索地球的奥秘,培养他们的地理观察和分析能力,让他们热爱地理科学。\",\n color:colorMap[8],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/12_555804.jpg?e=1697604054&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:xLN4QW0x9jx9lEB4EFHWvI_gEsI=\"]\n }\n]\n\n/**\n 当涉及到互联网创业公司的九大岗位时,以下是一些常见的角色,以及为每个角色提供的虚拟员工的中文名称和特点描述:\n\n1. 创始人/首席执行官(CEO):\n - 员工姓名:张明(Zhang Ming)\n - 特点描述:张明是一位富有远见和领导才能的创业家。他具备战略思维和决策能力,能够为公司设定长期目标并领导团队实现这些目标。\n\n2. 技术总监(CTO):\n - 员工姓名:王磊(Wang Lei)\n - 特点描述:王磊是一位技术专家,拥有广泛的技术知识和经验。他善于解决复杂的技术问题,并能够领导开发团队实施创新的技术解决方案。\n\n3. 市场营销经理:\n - 员工姓名:李婷(Li Ting)\n - 特点描述:李婷是一位富有创意和市场洞察力的市场营销专家。她擅长制定营销策略,了解目标受众,并能够利用各种渠道和工具推广公司的产品或服务。\n\n4. 用户体验设计师(UX Designer):\n - 员工姓名:陈宇(Chen Yu)\n - 特点描述:陈宇是一位富有创造力和用户导向思维的设计师。他能够理解用户需求,并通过设计直观、易用且吸引人的用户界面来提供出色的用户体验。\n\n5. 运营经理:\n - 员工姓名:刘洁(Liu Jie)\n - 特点描述:刘洁是一位组织能力强、注重细节并擅长解决问题的运营专家。她能够协调各个部门的工作,并确保公司的运营流程高效运行。\n\n6. 销售经理:\n - 员工姓名:张伟(Zhang Wei)\n - 特点描述:张伟是一位富有销售天赋和人际交往能力的销售专家。他善于与客户建立良好的关系,并能够推动销售团队实现业绩目标。\n\n7. 数据分析师:\n - 员工姓名:杨晨(Yang Chen)\n - 特点描述:杨晨是一位善于解读数据和提供商业洞察的数据分析专家。他能够收集、分析和解释数据,为公司的决策制定提供有力的支持。\n\n8. 财务经理:\n - 员工姓名:赵晓(Zhao Xiao)\n - 特点描述:赵晓是一位精通财务管理和分析的专业人士。她能够制定财务战略、管理公司的财务流程,并提供准确的财务报告和预测。\n\n9. 品牌管理专员:\n - 员工姓名:王雅(Wang Ya)\n - 特点描述:王雅是一位富有创意和品牌意识的专业人士。她能够塑造和管理公司的品牌形象,制定品牌营销策略,并与内部和外部利益相关者建立良好的合作关系。\n\n这些角色和员工姓名的选择是为了展示不同岗位的特点和职责。当然,在实际创业公司中,具体的岗位和员工姓名可能会因公司的规模、行业和需求而有所不同。\n */","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'utilnow',\n standalone: true\n})\nexport class UtilnowPipe implements PipeTransform {\n\n transform(value: Date, args?: any): any {\n let now = new Date();\n let time = now.getTime() - value.getTime();\n let seconds = time / 1000\n if(seconds<=60){\n return this.handleArgs(seconds.toFixed(0),\"秒钟前\",args)\n }\n let minutes = seconds / 60\n if(minutes < 60){\n return this.handleArgs(minutes.toFixed(0),\"分钟前\",args)\n }\n let hours = minutes / 60\n if(hours < 24){\n return this.handleArgs(hours.toFixed(0),\"小时前\",args)\n }\n let days = hours / 24\n if(days < 7){\n return this.handleArgs(days.toFixed(0),\"天前\",args)\n }\n\n let dateStr = `${value?.getFullYear()}-${value?.getMonth()+1}-${value?.getDate()}`\n return dateStr\n }\n\n // 时间标记\n enLocale:any = {\n \"秒钟前\":\" seconds ago\",\n \"分钟前\":\" minutes ago\",\n \"小时前\":\" hours ago\",\n \"天前\":\" days ago\",\n }\n handleArgs(value:any,unit:any,args:any):any{\n if(args==\"en\"){\n unit = this.enLocale[unit]\n }\n if(args?.constructor?.name == \"TranslateService\"){\n console.log(unit)\n if(args?.getDefaultLang()==\"en\"){\n unit = this.enLocale[unit]\n }\n // unit = await new Promise(resolve=>{\n // args?.get(unit).subscribe(data=>{\n // console.log(data)\n // resolve(data) \n // })\n // })\n }\n if(args==\"json\"){\n return {unit,value}\n }else{\n return value+unit\n }\n\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { getMessageContentText, getMessageImageUrl } from '../chat-class';\n\n@Pipe({\n name: 'chatContent',\n pure:true, // 输入变化时,仅渲染一次\n standalone: true\n})\nexport class ChatContentPipe implements PipeTransform {\n\n transform(content: unknown, ...args: unknown[]): unknown {\n console.log(args);\n let arg = args?.[0] || \"text\"\n if(arg==\"text\"){\n return getMessageContentText(content)\n }\n if(arg==\"image_url\"){\n return getMessageImageUrl(content)\n }\n return content;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * 文字生成过程中 xml格式标签自动隐藏 用于语音对话答复字符显示\n * @desc\n */\n@Pipe({\n name: 'hidexml',\n standalone:true,\n})\nexport class HidexmlPipe implements PipeTransform {\n\n transform(value: string, ...args: unknown[]): unknown {\n if(!value) return \"\"\n return this.hideXmlTags(value);\n }\n\n hideXmlTags(xmlString) {\n // 使用正则表达式替换所有的 XML 标签\n return xmlString.replace(/<[^>]*>/g, '');\n}\n\n}\n","\n\nimport { mathjax } from \"mathjax-full/js/mathjax\";\nimport { TeX } from \"mathjax-full/js/input/tex\";\nimport { SVG } from \"mathjax-full/js/output/svg\";\nimport { CHTML } from \"mathjax-full/js/output/chtml\";\nimport { AllPackages } from \"mathjax-full/js/input/tex/AllPackages\";\nimport { liteAdaptor } from \"mathjax-full/js/adaptors/liteAdaptor\";\nimport { RegisterHTMLHandler } from \"mathjax-full/js/handlers/html\";\n\nexport class MarkdownMathJax{\n\n options:any\n adaptor:any\n constructor(options?:any){\n this.options = options;\n this.adaptor = liteAdaptor();\n RegisterHTMLHandler(this.adaptor);\n }\n text_to_mathjax(math:any,options?:any):any{\n if(!math?.length) return \"\"\n if(!math?.replace) return \"\"\n options = options || this.options\n let output:any = new SVG({fontCache:'local'});\n if(options?.output==\"chtml\"){\n output = new CHTML()\n }\n // 设置输入输出参数\n const mathjax_document:any = mathjax.document('',{\n skipHtmlTags:[\n 'script',\"noscript\",'style',\"textarea\",\"pre\",\"code\",\"annotation\",\"annotation-xml\"\n ],\n InputJax:new TeX({\n // displayMath: [['\\$\\$', '\\$\\$'], ['\\\\\\[', '\\\\\\]']],\n // inlineMath: [['\\$', '\\$'],['\\\\\\(', '\\\\\\)']],\n processEscapes: true,\n packages:AllPackages,\n }),\n OutputJax:output\n })\n const mathjax_options = {\n em:16,\n ex:8,\n containerWidth:1280\n }\n \n // Preprocess the input to handle inline and block math separately\n let regxList = [\n /\\$\\$\\ (.+?)\\ \\$\\$/g,/\\$\\$(.+?)\\$\\$/g,/\\$\\$\\n(.+?)\\n\\$\\$/g,\n /\\$(.+?)\\$/g,/\\\\\\((.+?)\\\\\\)/g,/\\\\\\[(.+?)\\\\\\]/g\n ]\n regxList.forEach(regx=>{\n math = math\n .replace(regx, (match, p1) => {\n // Inline math\n let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n let nodeHtml = `<span class=\"mathjax raw\" style=\"margin-left:10px;margin-right:10px;\">${this.adaptor.innerHTML(node)}</span>`\n return nodeHtml;\n })\n })\n return math\n // math\n // .replace(/\\$\\$\\ (.+?)\\ \\$\\$/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // .replace(/\\$\\$(.+?)\\$\\$/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // .replace(/\\$\\$\\n(.+?)\\n\\$\\$/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // .replace(/\\$(.+?)\\$/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // .replace(/\\\\\\((.+?)\\\\\\)/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // .replace(/\\\\\\[(.+?)\\\\\\]/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // return processedMath;\n \n // 内置Tex内容筛选(不如正则准确)\n // let node:any = mathjax_document.convert(math,mathjax_options) as any;\n // return adaptor.innerHTML(node);\n }\n \n}","import hljs from 'highlight.js';\nimport MarkdownIt from \"markdown-it\";\nimport $ from \"jquery\";\n\n/**\n * 自定义插件\n */\nimport { MarkdownMathJax } from './plugins/md-mathjax';\n\n/**\n * use插件\n */\n import abbr from 'markdown-it-abbr'\n import footnote from 'markdown-it-footnote'\n import deflist from 'markdown-it-deflist'\n import mark from 'markdown-it-mark'\n import ins from 'markdown-it-ins'\n import sub from 'markdown-it-sub'\n import sup from 'markdown-it-sup'\n// import imsize from 'markdown-it-imsize' // fs path\n import ruby from 'markdown-it-ruby'\n\nlet md = new MarkdownIt({\n html: true, // 在源码中启用 HTML 标签\n xhtmlOut: true, // 使用 '/' 来闭合单标签 (比如 <br />)。\n // 这个选项只对完全的 CommonMark 模式兼容。\n breaks: false, // 转换段落里的 '\\n' 到 <br>。\n // langPrefix: 'language-', // 给围栏代码块的 CSS 语言前缀。对于额外的高亮代码非常有用。\n linkify: false, // 将类似 URL 的文本自动转换为链接。\n \n // 启用一些语言中立的替换 + 引号美化\n typographer: false,\n \n // 双 + 单引号替换对,当 typographer 启用时。\n // 或者智能引号等,可以是 String 或 Array。\n //\n // 比方说,你可以支持 '«»„“' 给俄罗斯人使用, '„“‚‘' 给德国人使用。\n // 还有 ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] 给法国人使用(包括 nbsp)。\n quotes: '“”‘’',\n \n // 高亮函数,会返回转义的HTML。\n // 或 '' 如果源字符串未更改,则应在外部进行转义。\n // 如果结果以 <pre ... 开头,内部包装器则会跳过。\n // highlight: function (/*str, lang*/) { return ''; }\n highlight: function (str:any, lang:any) {\n if (lang && hljs.getLanguage(lang)) {\n try {\n let hljsCode = hljs.highlight(str, { language: lang }).value\n return `<pre style=\"position:relative;padding:10px;\" class=\"hljs lang-${lang}\"><code>${hljsCode}</code><small class=\"hljs-lang\"><span class=\"sr-only\">Language:</span>${lang}</small></pre>`;\n } catch (__) {}\n }\n \n return ''; // use external default escaping\n }\n });\n \n \n \n md.use(abbr)\n md.use(footnote)\n md.use(deflist)\n md.use(mark)\n md.use(ins)\n md.use(sub);\n md.use(sup);\n\n // md.use(katex);\n\n // md.use(figure, {\n // render: (content, displayMode) => {\n // // render tex here and return\n // },\n // }); // 加载@mdit/tex 被mathjax依赖\n // const mathjaxInstance = createMathjaxInstance({output:\"svg\"});\n // md.use(mathjax,mathjaxInstance)\n // import MathJax from 'mathjax';\n // (window as any).MathJax = MathJax;\n // (window as any).markdownitMathjax = {\n // messageStyle: 'none',\n // skipStartupTypeset: true,\n // tex2jax: {\n // inlineMath: [['$', '$'], ['\\\\[', '\\\\]'],['\\\\(', '\\\\)']],\n // processEscapes: true\n // },\n // TeX: {\n // extensions: ['mhchem.js']\n // }\n // };\n\n // (window as any).MathJax = {\n // messageStyle: 'none',\n // skipStartupTypeset: true,\n // tex2jax: {\n // inlineMath: [['$', '$'], ['\\\\(', '\\\\)']],\n // processEscapes: true\n // },\n // TeX: {\n // extensions: ['mhchem.js']\n // }\n // }\n\n // md.use(mathjax3)\n // md.use(mathjax())\n // md.use(mathjax({\n // beforeMath: '<span class=\"mathjax raw\">',\n // afterMath: '</span>',\n // beforeInlineMath: '<span class=\"mathjax raw\">\\\\(',\n // afterInlineMath: '\\\\)</span>',\n // beforeDisplayMath: '<span class=\"mathjax raw\">\\\\[',\n // afterDisplayMath: '\\\\]</span>'\n // }))\n\n // md.use(imsize)\n md.use(ruby)\n \n /**\n * PlantUML 插件\n */\n const mditConfig = {\n plantumlServer:'https://www.plantuml.com/plantuml'\n }\n \n import plantumlEncoder from 'plantuml-encoder'\n /**\n * uml代码转图片地址方法\n * @param {*} umlCode \n * @returns \n * @example\n * console.log(makePlantumlURL(`@startuml\n start\n :创建本地仓库;\n :运行git init;\n :使用git add .;\n :使用git commit -m \"xxx\";\n :使用git remote add origin xxx;\n :使用git push -u origin \"master\";\n stop\n @enduml`))\n */\n\n\n\n function makePlantumlURL(umlCode:any){\n const format = 'svg'\n const code = plantumlEncoder.encode(umlCode)\n return `${mditConfig.plantumlServer}/${format}/${code}`\n }\n \n\n // https://github.com/qjebbs/vscode-plantuml/tree/master/src/markdown-it-plantuml\n md.renderer.rules['plantuml'] = (tokens:any, idx:any, options:any, env:any, self:any) => {\n const token = tokens[idx]\n if (token.type !== 'plantuml') {\n return tokens[idx].content\n }\n const url = makePlantumlURL(token.content)\n return `\n <img src=\"${url}\" />\n <pre style=\"position:relative;padding:10px;\" class=\"hljs lang-plantuml\"><code>${token.content}</code><small class=\"hljs-lang\"><span class=\"sr-only\">Language:</span>plantuml</small></pre>\n `\n}\n// https://github.com/qjebbs/vscode-plantuml/tree/master/src/markdown-it-plantuml\n// 默认不支持rules['plantuml'] 需要通过ruler push\nmd.core.ruler.push('plantuml', (state:any) => {\n const blockTokens = state.tokens\n for (const blockToken of blockTokens) {\n if (blockToken.type === 'fence' && blockToken.info === 'plantuml') {\n blockToken.type = 'plantuml'\n }\n }\n })\n\n // regex for extra tags\n const spaceregex = /\\s*/\n const notinhtmltagregex = /(?![^<]*>|[^<>]*<\\/)/\n let coloregex = /\\[color=([#|(|)|\\s|,|\\w]*?)\\]/\ncoloregex = new RegExp(coloregex.source + notinhtmltagregex.source, 'g')\nlet nameregex = /\\[name=(.*?)\\]/\nlet timeregex = /\\[time=([:|,|+|-|(|)|\\s|\\w]*?)\\]/\nconst nameandtimeregex = new RegExp(nameregex.source + spaceregex.source + timeregex.source + notinhtmltagregex.source, 'g')\nnameregex = new RegExp(nameregex.source + notinhtmltagregex.source, 'g')\ntimeregex = new RegExp(timeregex.source + notinhtmltagregex.source, 'g')\n\nfunction replaceExtraTags (html:any) { \n console.log(\"replaceExtraTags\",html)\n html = html.replace(coloregex, '<span class=\"color\" data-color=\"$1\"></span>')\n html = html.replace(nameandtimeregex, '<small><i class=\"fa fa-user\"></i> $1 <i class=\"fa fa-clock-o\"></i> $2</small>')\n html = html.replace(nameregex, '<small><i class=\"fa fa-user\"></i> $1</small>')\n html = html.replace(timeregex, '<small><i class=\"fa fa-clock-o\"></i> $1</small>')\n console.log(\"replaceExtraTags\",html)\n return html\n}\n\n\n// 生命周期:生成HTML后,动态修正生成内容:dynamic event or object binding here\nfunction finishView (html:any) {\n\n let mdDivEl = $.parseHTML(`<html><body><div id=\"topmd\">${html}</div></body></html>`)[0]\n let mdhtml$ = $(mdDivEl)\n\n /************************************************\n * 第一步:需操作DOM,进行页面修正\n */\n /**\n * BlockQuote 引用增强插件\n */\n // blockquote 修正引用标签\n let blockquote = mdhtml$.find('blockquote.raw').removeClass('raw')\n blockquote = mdhtml$.find('blockquote')\n\n let blockquoteP = $(blockquote).find('p')\n blockquoteP.each((key:any, value:any) => {\n let htmlStr = $(value).html()\n htmlStr = replaceExtraTags(htmlStr)\n value.innerHTML = htmlStr\n $(value).html(htmlStr)\n blockquoteP[key].innerHTML = htmlStr;\n $(blockquoteP[key]).html(htmlStr)\n })\n\n // 引用标签颜色渲染 color tag in blockquote will change its left border color\n let blockquoteColor = blockquote.find('.color')\n blockquoteColor.each((key:any, value:any) => {\n let dataColor:any = $(value).attr('data-color')\n $(value).closest('blockquote').css('border-left-color', dataColor)\n })\n\n \n let style = `<style>\n .markdown-section {\n color: black;\n text-align: left;\n }\n .markdown-section pre .hljs-lang{\n text-transform: uppercase;\n font-weight: 700;\n font-size: .75rem;\n line-height: 1rem;\n padding-top: .25rem;\n padding-bottom: .25rem;\n padding-left: .5rem;\n padding-right: .5rem;\n background-color: rgba(0,0,0,.3);\n border-bottom-left-radius: .375rem;\n top:0;\n right:0;\n position:absolute;\n}\n\n }\n .markdown-section pre .hljs {\n position:relative!important;\n background: #272822!important;\n padding:10px!important;\n color: #ddd;\n text-shadow: none!important;\n }\n\n .markdown-section blockquote {\n margin: 0;\n margin-bottom: 0px;\n margin-bottom: .85em;\n padding: 0 15px;\n color: #858585;\n border-left: 4px solid #e5e5e5;\n border-left-color: rgb(229, 229, 229);\n }\n .markdown-section img {\n max-width:100%;\n }\n </style>`\n let result = style + (mdhtml$.html() || html)\n\n /************************************************\n * 第二步:无需操作DOM,替换文本信息\n */\n /**\n * uploads 修正附件地址\n */\n result = result.replaceAll('src=\"/uploads/','src=\"https://md.fmode.cn/uploads/')\n return result\n}\n\nexport class MarkdownParse{\n constructor(){\n } \n\n parseToHTML(markdown:any){\n this.info(\"markdown\",markdown)\n\n // 由于md=>html会转义原文本中的 \\( 为 (,\\[ 为 [,因此需要先mathjax转换再转markdown\n let mdMathJax = new MarkdownMathJax()\n markdown = mdMathJax.text_to_mathjax(markdown,{\n output:\"svg\"\n });\n\n let htmlResult = md.render(markdown);\n\n // this.info(\"html\",htmlResult)\n htmlResult = finishView(htmlResult);\n // this.info(\"html plus\",htmlResult)\n return htmlResult;\n }\n info(...args:any){\n // console.log(...args)\n }\n // Markdown Text to HTML\n // HTML DOM to Enhance HTML DOM\n}","import { AfterViewInit, Component, ElementRef, Input, Renderer2, ViewChild } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\nimport {MarkdownParse} from \"./markdown-parse\";\n\n/**\n * Markdown 文档高级渲染组件\n * @name fm-markdown-preview\n * @public\n */\n@Component({\n selector: 'fm-markdown-preview',\n templateUrl: './markdown-preview.component.html',\n styleUrls: ['./markdown-preview.component.scss']\n})\nexport class MarkdownPreviewComponent implements AfterViewInit {\n @Input() content:string = ``\n safeHTML:SafeHtml\n\n @ViewChild('mdContent') mdContent: ElementRef;\n \n /**\n * 是否开启MD渲染,默认开启\n * @default true\n */\n @Input() render:boolean = true\n constructor(\n private domSan:DomSanitizer,\n private renderer:Renderer2\n ){\n }\n\n ngAfterViewInit(){\n this.renderMdToHTML()\n }\n\n renderMdToHTML(){\n if(!this.render) return\n let mdparser = new MarkdownParse()\n let htmlResult = mdparser.parseToHTML(this.content)\n this.safeHTML = this.domSan.bypassSecurityTrustHtml(htmlResult)\n\n let mdDiv = this.renderer.createElement(\"div\");\n mdDiv.innerHTML = htmlResult;\n // console.log(mdDiv.innerHTML)\n\n this.renderer.appendChild(this.mdContent.nativeElement,mdDiv)\n \n }\n}\n","<div class=\"message-body\">\n <div *ngIf=\"render\" #mdContent class=\"markdown-section\">\n </div>\n <div *ngIf=\"!render\" class=\"pre-section\">\n {{content}}\n </div>\n</div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MarkdownPreviewComponent } from './markdown-preview.component';\n\n\n@NgModule({\n declarations: [\n MarkdownPreviewComponent\n ],\n imports: [\n CommonModule,\n ],\n exports:[\n MarkdownPreviewComponent\n ]\n})\nexport class MarkdownPreviewModule { }\n","import { Injectable } from '@angular/core';\nimport { ToastController } from '@ionic/angular';\nimport { Clipboard } from '@capacitor/clipboard';\n\n/**\n * 剪贴板服务:支持H5、微信、移动端\n * @public\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ClipboardService {\n\n constructor(\n private toastCtrl:ToastController\n ) { \n\n }\n async copyToClipboard(content){\n try{\n await Clipboard.write({\n string: content\n });\n this.copySuccess()\n return\n }catch(error1){\n try{\n if (navigator.clipboard && window.isSecureContext) {\n await navigator?.clipboard?.writeText(content)\n this.copySuccess()\n return\n }else{\n throw false\n }\n }catch(error2){\n // 旧的方式\n // 创建一个文本域元素\n let textArea = document.createElement(\"textarea\");\n textArea.value = content;\n\n // 使文本域不在视线范围内\n textArea.style.position = \"fixed\";\n textArea.style.left = \"-9999px\";\n textArea.style.top = \"-9999px\";\n\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select(); // 选中文本\n\n try {\n // 执行复制命令\n let successful = document?.execCommand('copy');\n if (successful) {\n this.copySuccess();\n } else {\n console.error('无法复制文本');\n }\n } catch (err) {\n console.error('无法复制文本: ', err);\n }\n // 移除文本域\n document.body.removeChild(textArea);\n }\n }\n }\n async copySuccess(){\n let toast = await this.toastCtrl.create({\n duration:1000,\n message:\"复制成功\",\n color:'primary',\n icon:\"information-circle\",\n position:\"top\"\n })\n toast.present();\n }\n}\n\n\n\n\n\n","\nexport function pcmtoWav(pcmsrt, sampleRate, numChannels, bitsPerSample) {\n //参数->(base64编码的pcm流,采样频率,声道数,采样位数)\n let header = {\n // OFFS SIZE NOTES\n chunkId: [0x52, 0x49, 0x46, 0x46], // 0 4 \"RIFF\" = 0x52494646\n chunkSize: 0, // 4 4 36+SubChunk2Size = 4+(8+SubChunk1Size)+(8+SubChunk2Size)\n format: [0x57, 0x41, 0x56, 0x45], // 8 4 \"WAVE\" = 0x57415645\n subChunk1Id: [0x66, 0x6d, 0x74, 0x20], // 12 4 \"fmt \" = 0x666d7420\n subChunk1Size: 16, // 16 4 16 for PCM\n audioFormat: 1, // 20 2 PCM = 1\n numChannels: numChannels || 1, // 22 2 Mono = 1, Stereo = 2...\n sampleRate: sampleRate || 16000, // 24 4 8000, 44100...\n byteRate: 0, // 28 4 SampleRate*NumChannels*BitsPerSample/8\n blockAlign: 0, // 32 2 NumChannels*BitsPerSample/8\n bitsPerSample: bitsPerSample || 16, // 34 2 8 bits = 8, 16 bits = 16\n subChunk2Id: [0x64, 0x61, 0x74, 0x61], // 36 4 \"data\" = 0x64617461\n subChunk2Size: 0, // 40 4 data size = NumSamples*NumChannels*BitsPerSample/8\n }\n function u32ToArray(i) {\n return [i & 0xff, (i >> 8) & 0xff, (i >> 16) & 0xff, (i >> 24) & 0xff]\n }\n function u16ToArray(i) {\n return [i & 0xff, (i >> 8) & 0xff]\n }\n let pcm = new Uint8Array(pcmsrt)\n header.blockAlign = (header.numChannels * header.bitsPerSample) >> 3\n header.byteRate = header.blockAlign * header.sampleRate\n header.subChunk2Size = pcm.length * (header.bitsPerSample >> 3)\n header.chunkSize = 36 + header.subChunk2Size\n\n let wavHeader = header.chunkId.concat(\n u32ToArray(header.chunkSize),\n header.format,\n header.subChunk1Id,\n u32ToArray(header.subChunk1Size),\n u16ToArray(header.audioFormat),\n u16ToArray(header.numChannels),\n u32ToArray(header.sampleRate),\n u32ToArray(header.byteRate),\n u16ToArray(header.blockAlign),\n u16ToArray(header.bitsPerSample),\n header.subChunk2Id,\n u32ToArray(header.subChunk2Size)\n )\n let wavHeaderUnit8 = new Uint8Array(wavHeader)\n\n let mergedArray = new Uint8Array(wavHeaderUnit8.length + pcm.length)\n mergedArray.set(wavHeaderUnit8)\n mergedArray.set(pcm, wavHeaderUnit8.length)\n let blob = new Blob([mergedArray], { type: 'audio/wav' })\n let blobUrl = window.URL.createObjectURL(blob)\n return blobUrl\n}\n","export function resampleAudio(frameBuffer: number[], inputSampleRate: number, outputSampleRate: number): number[] {\n let inputLength = frameBuffer.length;\n let outputLength = Math.floor((inputLength / inputSampleRate) * outputSampleRate);\n let outputBuffer: number[] = [];\n \n for (let i = 0; i < outputLength; i++) {\n let index = Math.floor(i * (inputSampleRate / outputSampleRate));\n outputBuffer[i] = frameBuffer[index];\n }\n \n return outputBuffer;\n }\n\nexport function convertFrameBufferToBase64(frameBuffer: number[]): string {\n// 创建一个存储转换后数据的Uint8Array\nconst uint8Array = new Uint8Array(frameBuffer.length * 2); // 16位小端LE,每个样本占用2个字节\n\n// 将frameBuffer中的每个样本转换为16位小端字节序\nfor (let i = 0; i < frameBuffer.length; i++) {\n const sample = frameBuffer[i];\n uint8Array[i * 2] = sample & 0xff; // 低字节\n uint8Array[i * 2 + 1] = (sample >> 8) & 0xff; // 高字节\n}\n\n// 使用btoa函数将Uint8Array转换为base64字符串\nconst base64String = btoa(String.fromCharCode.apply(null, uint8Array));\n\nreturn base64String;\n}\n\nexport function resampleBuffer(buffer: Int16Array, fromRate: number, toRate: number): Int16Array {\n const ratio = fromRate / toRate;\n const length = Math.round(buffer.length / ratio);\n const result = new Int16Array(length);\n\n for (let i = 0; i < length; i++) {\n const j = Math.floor(i * ratio);\n result[i] = buffer[j];\n }\n\n return result;\n}","import { Platform } from \"@ionic/angular\"\n\n/**\n * 英文语音唤醒\n */\ndeclare var webkitSpeechRecognition:any\nconst SpeechRecognition = (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition\nconst SpeechGrammarList = (window as any).SpeechGrammarList || (window as any).webkitSpeechGrammarList\nexport class WebSpeech{\n constructor(\n private platform:Platform\n ){}\n /**\n * 语音识别\n * @desc\n * 注意:需要校验说话开始和结束时间2-3秒后,自动结束语音听取\n * @see\n * https://www.jianshu.com/p/e42638839475\n * @param word \n */\n recognition:any\n startRecognition(words=\"Nihao | Hello\"){\n if(!SpeechRecognition) return\n if(this.recognition)this.recognition.stop();\n console.log(\"startRecognition\")\n this.recognition = new SpeechRecognition();\n if(!this.recognition) return\n // this.recognition.lang = \"zh-CH\";\n this.recognition.continuous = true; // 持续识别不间断\n let grammar =\n `#JSGF V1.0; grammar words; public <word> = ${words} ;`;\n this.recognition = new SpeechRecognition();\n let speechRecognitionList = new SpeechGrammarList();\n speechRecognitionList.addFromString(grammar, 1);\n this.recognition.grammars = speechRecognitionList;\n this.recognition.start();\n this.recognition.onresult = (event)=>{ \n let results = event.results || []\n console.log(results)\n console.log(results[0]?.[0])\n if(results[0]?.[0]?.transcript?.indexOf(\"Nihao\")>-1){\n console.log(\"Nihao成功唤醒\")\n }\n if(results[0]?.[0]?.transcript?.indexOf(\"Hello\")>-1){\n console.log(\"Hello成功唤醒\")\n }\n this.startRecognition(); // 单词唤醒后,持续唤醒\n }\n this.recognition.onend = (event)=>{\n console.log(event)\n // this.startRecognition()\n }\n this.recognition.onerror = (err)=>{\n console.error(err)\n // this.startRecognition()\n }\n }\n\n /**\n * TTS合成\n * @param sentence:要说的句子\n * @param pitch: 音调,取值范围(0 - 2) 默认值:1\n * @param rate: 语速,取值范围(0.1 - 10) 默认值:1\n * @param volume: 音量,取值范围(0 - 1) 默认值:0.5\n * @see\n * https://zhuanlan.zhihu.com/p/141582231\n */\n speak(sentence, pitch=1,rate=1.2,volume=0.8) {\n // 优先插件播放\n if(this.platform.is(\"capacitor\")){\n\n return\n }\n\n // 保底Web播放\n this.speakWithEdge(sentence, pitch=1,rate=1.2,volume=0.8)\n }\n speakWithEdge(sentence, pitch=1,rate=1.2,volume=0.8){\n // window.speechSynthesis.pause();\n let utterance = new SpeechSynthesisUtterance(sentence)\n let voice = this.getVoiceByName(\"Yaoyao\");\n console.log(voice)\n if(voice) {\n utterance.voice = voice\n }\n utterance.rate = rate\n utterance.pitch = pitch\n utterance.volume = 10 // volume\n\n window.speechSynthesis.speak(utterance)\n }\n getVoiceByName(name){\n let voices = window.speechSynthesis.getVoices()\n let voice = voices.find(v=>v.name.indexOf(name)>-1)\n return voice\n }\n}","import { EventEmitter, Injectable, Output } from '@angular/core';\n// import RecorderManager from \"./lib/xunfei-recorder\"\n// import {RecorderManager} from \"./lib/recorder/recorder-manager\"\nimport Recorder from 'recorder-core'\nimport 'recorder-core/src/engine/pcm'\nimport 'recorder-core/src/engine/wav'\nimport 'recorder-core/src/extensions/waveview'\nimport CryptoJS from \"crypto-js\"\nimport { pcmtoWav } from './lib/pcm2wav';\nimport { convertFrameBufferToBase64, resampleAudio, resampleBuffer } from './lib/resample';\nimport { WebSpeech } from './class-asr';\nimport { Platform } from '@ionic/angular';\nimport { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';\n// import { FmodeTTSXunfei } fro./class-tts-xunfei.ts.bakfei'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FmodeVoiceService {\n\n /**\n * 关闭ASR:用于测试其他功能时,可关闭ASR节省语音接口消耗\n */\n disableASR:false;\n /**\n * 讯飞TTS语音合成\n */\n // ttsXunfei = new FmodeTTSXunfei()\n /**\n * WebSpeech 语音库\n */\n webSpeech = WebSpeech\n constructor(\n private platform:Platform,\n private diagnostic: Diagnostic, \n ) { \n this.requestPermission();\n // this.recorder.on(\"start\",() => {\n // })\n\n // this.recorder.on(\"frameRecorded\", ({ isLastFrame, frameBuffer }) => {\n // if (this.iatWS.readyState === this.iatWS.OPEN) {\n // this.iatWS.send(\n // JSON.stringify({\n // data: {\n // status: isLastFrame ? 2 : 1,\n // format: \"audio/L16;rate=16000\",\n // encoding: this.encodingType,\n // audio: this.toBase64(frameBuffer),\n // },\n // })\n // );\n // if (isLastFrame) {\n // this.changeBtnStatus(\"CLOSING\");\n // }\n // }\n // })\n\n // this.recorder.on(\"stop\",() => {\n // })\n\n\n }\n\n\n\n /**\n * 用户操作:录音按钮快捷触发操作\n */\n toggleRecord(){\n console.log(this.btnStatus)\n if (this.btnStatus === \"UNDEFINED\" || this.btnStatus === \"CLOSED\") {\n // 开始讲话\n this.startTalk()\n } else if (this.btnStatus === \"CONNECTING\" || this.btnStatus === \"OPEN\") {\n // 结束录音 并发送消息等待回复\n this.finishTalk()\n }\n }\n /**\n * 用户操作:完成录音,并处理转录结果\n */\n finishTalk(){\n this.onBeforeFinishTalk&&this.onBeforeFinishTalk()\n this.recordStop()\n setTimeout(() => {\n // 等待语音转义完成,处理转录结果\n // 需要准确判断websocket已经close了\n this.onAfterFinishTalk&&this.onAfterFinishTalk()\n }, 1000);\n }\n onBeforeFinishTalk: Function\n onAfterFinishTalk: Function\n /**\n * 用户操作:开始讲话,实时转录语言\n */\n async startTalk(evnet?){\n this.onBeforeStartTalk&&this.onBeforeStartTalk()\n event?.preventDefault()\n await this.openWithPriviledge()\n setTimeout(() => {\n this.connectWebSocket()\n }, 100);\n\n this.onAfterStartTalk&&this.onAfterStartTalk()\n }\n onBeforeStartTalk: Function\n onAfterStartTalk: Function\n \n /**\n * 用户操作:取消讲话,且不发送结果\n */\n cancelTalk(){\n this.onBeforeCancelTalk&&this.onBeforeCancelTalk()\n this.recordStop(); // 停止录制\n this.iatWS.close(); // 断开连接\n this.resultText = null; // 设置转录结果为空\n this.onAfterCancelTalk&&this.onAfterCancelTalk()\n }\n /**\n * 操作回调\n */\n onBeforeCancelTalk: Function\n onAfterCancelTalk: Function\n\n /**\n * 程序逻辑\n */\n async recordStart(){\n this.createRecorder();\n await this.openWithPriviledge()\n this.recorder.start();\n this.changeBtnStatus(\"OPEN\");\n }\n recordStop(){\n // console.log(\"record Stop trigger\")\n this.recorder?.stop((blob:Blob,duration:number)=>{\n\n //录音结束后,发送录音结束帧\n this.iatWS.send(\n JSON.stringify({\"data\":{\"status\":2,\"format\":\"audio/L16;rate=16000\",\"encoding\":this.encodingType,\"audio\":\"\"}})\n );\n\n //简单利用URL生成本地文件地址,注意不用了时需要revokeObjectURL,否则霸占内存\n //此地址只能本地使用,比如赋值给audio.src进行播放,赋值给a.href然后a.click()进行下载(a需提供download=\"xxx.mp3\"属性)\n let localUrl=(window.URL||webkitURL).createObjectURL(blob);\n console.log(blob,localUrl,\"时长:\"+duration+\"ms\");\n this.recordPcmBlob = blob\n this.recorder.close();//释放录音资源,当然可以不释放,后面可以连续调用start;但不释放时系统或浏览器会一直提示在录音,最佳操作是录完就close掉\n this.recorder=null;\n \n //已经拿到blob文件对象想干嘛就干嘛:立即播放、上传、下载保存\n \n /*** 【立即播放例子】 ***/\n // this.audioPlayer= new Audio();\n // this.audioPlayer.controls=true;\n // this.audioPlayer.src=localUrl;\n console.log(\"localUrl\",localUrl)\n },(msg)=>{\n console.log(\"录音失败:\"+msg);\n this.recorder.close();//可以通过stop方法的第3个参数来自动调用close\n this.recorder=null;\n })\n clearInterval(this.countdownInterval);\n this.changeBtnStatus(\"CLOSED\");\n }\n recordPcmBlob:Blob = null\n playRecord(){\n this.playPCM(this.recordPcmBlob,44100)\n }\n playPCM(pcmBlob, sampleRate) {\n let fileReader = new FileReader();\n \n // 读取Blob数据\n fileReader.onload = function(event) {\n let pcmData:any = event.target.result;\n // Convert PCM data to WAV format\n let wavUrl = pcmtoWav(pcmData, sampleRate,1,16);\n let audio = new Audio();\n audio.src = wavUrl;\n audio.play();\n };\n \n // 将Blob转换为ArrayBuffer\n fileReader.readAsArrayBuffer(pcmBlob);\n }\n buffers:Array<any>\n async playBuffers(){\n // let audioBuffer = []\n // this.buffers.forEach(buffer=>{\n // audioBuffer.push(buffer)\n // })\n let audioBlob = await this.BuffersToBlob(this.buffers)\n this.playPCM(audioBlob,44100)\n }\n BuffersToBlob(buffers) {\n let audioBuffer:any = []\n buffers.forEach(buffer=>{\n buffer.forEach(int16=>{\n audioBuffer.push(int16)\n })\n })\n return new Blob([audioBuffer], { type: 'audio/pcm' });\n }\n // 将录音数据分割为每次发送的音频片段 1280字节\n splitAudioData(audioData) {\n const segmentSize = 1280; // 目标切片大小,单位为字节\n const segmentCount = Math.ceil(audioData.length / segmentSize); // 切片数量\n const segments = [];\n \n for (let i = 0; i < segmentCount; i++) {\n const start = i * segmentSize;\n const end = start + segmentSize;\n const segment = audioData.slice(start, end);\n \n segments.push(segment);\n }\n \n return segments;\n }\n BufferToBlob(buffer) {\n return new Blob([buffer], { type: 'audio/pcm' });\n }\n recordType = \"pcm\"\n encodingType = \"raw\"\n createRecorder(){\n if(this.recorder) return\n this.recorder = Recorder({ //本配置参数请参考下面的文档,有详细介绍\n type:this.recordType,sampleRate:44100,bitRate:16 //pcm格式,指定采样率hz、比特率kbps,其他参数使用默认配置;注意:是数字的参数必须提供数字,不要用字符串;需要使用的type类型,需提前把格式支持文件加载进来,比如使用wav格式需要提前加载wav.js编码引擎\n ,onProcess:(buffers,powerLevel,bufferDuration,bufferSampleRate,newBufferIdx,asyncEnd)=>{\n //录音实时回调,大约1秒调用12次本回调,buffers为开始到现在的所有录音pcm数据块(16位小端LE)\n //可利用extensions/sonic.js插件实时变速变调,此插件计算量巨大,onProcess需要返回true开启异步模式\n //可实时上传(发送)数据,配合Recorder.SampleData方法,将buffers中的新数据连续的转换成pcm上传,或使用mock方法将新数据连续的转码成其他格式上传,可以参考文档里面的:Demo片段列表 -> 实时转码并上传-通用版;基于本功能可以做到:实时转发数据、实时保存数据、实时语音识别(ASR)等\n // 实时发送录音至接口\n // console.log(\"asyncEnd:\",asyncEnd)\n // console.log(buffers.length,bufferDuration,bufferSampleRate,newBufferIdx)\n let isLastFrame = false && this.btnStatus==\"CLOSED\"; // 主动关闭作为最后帧\n // 录音默认为 44100 采样率 pcm不支持再process中实时转换\n // 需要压缩为 16000 上传\n let frameBuffer = buffers.length&&buffers[buffers.length-1];\n this.buffers = buffers\n frameBuffer = resampleBuffer(frameBuffer,44100,16000);\n // this.playPCM(this.BufferToBlob(frameBuffer),16000) // 切片数据播放,采样率测试\n\n if (this.iatWS.readyState === this.iatWS.OPEN) {\n if(this.disableASR) return\n this.iatWS.send(\n JSON.stringify({\n data: {\n status: isLastFrame ? 2 : 1,\n format: \"audio/L16;rate=16000\",\n encoding: this.encodingType,\n audio: convertFrameBufferToBase64(frameBuffer)// this.toBase64(audioData),\n },\n })\n );\n \n if (isLastFrame) {\n this.changeBtnStatus(\"CLOSING\");\n }\n }\n //可实时绘制波形(extensions目录内的waveview.js、wavesurfer.view.js、frequency.histogram.view.js插件功能)\n this.waveClient?.input(buffers[buffers.length-1],powerLevel,bufferSampleRate);\n }\n });\n }\n \n async openWithPriviledge(){\n console.log(this.btnStatus)\n await this.requestPermission();\n this.createRecorder();\n if(Recorder.IsOpen()) return true\n return new Promise(resolve=>{\n //var dialog=createDelayDialog(); 我们可以选择性的弹一个对话框:为了防止移动端浏览器存在第三种情况:用户忽略,并且(或者国产系统UC系)浏览器没有任何回调,此处demo省略了弹窗的代码\n this.recorder.open(()=>{//打开麦克风授权获得相关资源\n //dialog&&dialog.Cancel(); 如果开启了弹框,此处需要取消\n //rec.start() 此处可以立即开始录音,但不建议这样编写,因为open是一个延迟漫长的操作,通过两次用户操作来分别调用open和start是推荐的最佳流程\n //创建可视化,指定一个要显示的div\n if(Recorder.WaveView)this.waveClient=Recorder.WaveView({elem:\".record-wave\"});\n resolve(true);\n },(msg,isUserNotAllow)=>{//用户拒绝未授权或不支持\n //dialog&&dialog.Cancel(); 如果开启了弹框,此处需要取消\n console.log((isUserNotAllow?\"UserNotAllow,\":\"\")+\"无法录音:\"+msg);\n });\n })\n\n }\n\n connStatus = \"\" // 录音中 建立连接中 关闭连接中\n\n btnStatus = \"UNDEFINED\"; // \"UNDEFINED\" \"CONNECTING\" \"OPEN\" \"CLOSING\" \"CLOSED\"\n\n waveClient:any // 用户波形\n recorder:any\n // recorder = new RecorderManager();\n // recorder = new RecorderManager(\"./lib/xunfei-recorder\");\n \n iatWS;\n resultText = \"\";\n resultTextTemp = \"\";\n countdownInterval;\n\n /**\n * 获取websocket url\n * 该接口需要后端提供,这里为了方便前端处理\n */\n APPID = \"23265215\";\n API_SECRET = \"YzMzMWUzMmFkYjU2ZjE5OTc4M2Q1NjE1\";\n API_KEY = \"8c58aa034946e1de30f2b145cf0cc3c3\";\n getWebSocketUrl() {\n // 请求地址根据语种不同变化\n let url = \"wss://iat-api.xfyun.cn/v2/iat\";\n let host = \"iat-api.xfyun.cn\";\n \n let apiKey = this.API_KEY;\n let apiSecret = this.API_SECRET;\n let date = new Date().toUTCString();\n let algorithm = \"hmac-sha256\";\n let headers = \"host date request-line\";\n let signatureOrigin = `host: ${host}\\ndate: ${date}\\nGET /v2/iat HTTP/1.1`;\n let signatureSha = CryptoJS.HmacSHA256(signatureOrigin, apiSecret);\n let signature = CryptoJS.enc.Base64.stringify(signatureSha);\n let authorizationOrigin = `api_key=\"${apiKey}\", algorithm=\"${algorithm}\", headers=\"${headers}\", signature=\"${signature}\"`;\n let authorization = btoa(authorizationOrigin);\n url = `${url}?authorization=${authorization}&date=${date}&host=${host}`;\n return url;\n }\n\n toBase64(buffer) {\n var binary = \"\";\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n }\n\n /**\n * 倒计时:最长支持60秒实时语音转录,如果持续7-10秒无声音,服务端将自动CLOSE链接\n */\n countdown() {\n let seconds = 60;\n this.connStatus = `录音中(${seconds}s)`;\n this.countdownInterval = setInterval(() => {\n seconds = seconds - 1;\n console.log(seconds);\n if (seconds <= 0) {\n clearInterval(this.countdownInterval);\n this.recordStop();\n } else {\n this.connStatus = `录音中(${seconds}s)`;\n }\n }, 1000);\n }\n\n changeBtnStatus(status) {\n this.btnStatus = status;\n if (status === \"CONNECTING\") {\n this.connStatus = \"建立连接中\";\n this.resultText = \"\";\n this.resultTextTemp = \"\";\n } else if (status === \"OPEN\") {\n this.countdown();\n } else if (status === \"CLOSING\") {\n this.connStatus = \"关闭连接中\";\n } else if (status === \"CLOSED\") {\n this.connStatus = \"开始录音\";\n }\n }\n\n renderResult(resultData) {\n // 识别结束\n let jsonData = JSON.parse(resultData);\n // console.log(jsonData.data.result)\n if (jsonData.data && jsonData.data.result) {\n let data = jsonData.data.result;\n let str = \"\";\n let ws = data.ws;\n for (let i = 0; i < ws.length; i++) {\n str = str + ws[i].cw[0].w;\n console.log(str)\n }\n // 开启wpgs会有此字段(前提:在控制台开通动态修正功能)\n // 取值为 \"apd\"时表示该片结果是追加到前面的最终结果;取值为\"rpl\" 时表示替换前面的部分结果,替换范围为rg字段\n if (data.pgs) {\n if (data.pgs === \"apd\") {\n // 将this.resultTextTemp同步给this.resultText\n this.resultText = this.resultTextTemp;\n }\n // 将结果存储在this.resultTextTemp中\n this.resultTextTemp = this.resultText + str;\n } else {\n this.resultText = this.resultText + str;\n }\n this.resultTextTemp || this.resultText || \"\";\n }\n if (jsonData.code === 0 && jsonData.data.status === 2) {\n this.iatWS.close();\n }\n if (jsonData.code !== 0) {\n this.iatWS.close();\n console.error(jsonData);\n }\n }\n\n connectWebSocket() {\n console.log(\"connectWebSocket\");\n const websocketUrl = this.getWebSocketUrl();\n if (\"WebSocket\" in window) {\n this.iatWS = new WebSocket(websocketUrl);\n } else if (\"MozWebSocket\" in window) {\n // this.iatWS = new MozWebSocket(websocketUrl); // Moz兼容\n } else {\n alert(\"浏览器不支持WebSocket\");\n return;\n }\n console.log(\"connectWebSocket\",this.btnStatus);\n this.changeBtnStatus(\"CONNECTING\");\n this.iatWS.onopen = (e) => {\n // 开始录音\n this.recordStart();\n var params = {\n common: {\n app_id: this.APPID,\n },\n business: {\n language: \"zh_cn\",\n domain: \"iat\",\n accent: \"mandarin\",\n vad_eos: 5000,\n dwa: \"wpgs\",\n },\n data: {\n status: 0,\n format: \"audio/L16;rate=16000\",\n encoding: this.encodingType,\n // encoding: \"speex-wb\",\n },\n };\n this.iatWS.send(JSON.stringify(params));\n };\n this.iatWS.onmessage = (e) => {\n this.renderResult(e.data);\n };\n this.iatWS.onerror = (e) => {\n console.error(\"error\",e);\n this.recordStop();\n this.changeBtnStatus(\"CLOSED\");\n };\n this.iatWS.onclose = (e) => {\n // 5秒停顿会导致结束录制\n console.error(\"close\",e)\n this.recordStop();\n this.changeBtnStatus(\"CLOSED\");\n };\n }\n\n /**\n * 移动端兼容方法\n */\n\n /**\n * 移动端上传专用方法\n * @returns \n */\n isCapacitor(){\n return this.platform.is(\"capacitor\") || this.platform.is(\"cordova\")\n }\n async requestPermission(){\n if(!this.isCapacitor()) return\n try{\n await this.requestStoagePermission();\n await this.requestCameraPermission();\n await this.requestMicPermission();\n await this.requestRecordAudioPermission();\n }catch(err){\n console.error(err)\n }\n }\n async requestRecordAudioPermission(){\n let data = await this.diagnostic.requestRuntimePermissions([this.diagnostic.permission.RECORD_AUDIO])\n console.log(\"record permission request:\",data)\n return\n }\n async requestMicPermission(){\n let isAvailable = await this.diagnostic.isMicrophoneAuthorized()\n console.log(\"permisson_MIC:\", isAvailable)\n if (!isAvailable) {\n let data = await this.diagnostic.requestMicrophoneAuthorization()\n }\n return\n }\n async requestStoagePermission(){\n let isAvailable = await this.diagnostic.isExternalStorageAuthorized()\n console.log(\"permisson_STORAGE:\", isAvailable)\n if (!isAvailable) {\n let data = await this.diagnostic.requestExternalStorageAuthorization()\n }\n return\n }\n async requestCameraPermission(){\n let isAvailable = await this.diagnostic.isCameraAuthorized()\n console.log(\"permisson_Camera:\", isAvailable)\n if (!isAvailable) {\n let data = await this.diagnostic.requestCameraAuthorization()\n }\n return\n }\n}\n","\nimport * as BABYLON from '@babylonjs/core';\nimport '@babylonjs/loaders';\nimport { AvatarRole } from './avatar.role';\n\nexport class RolePointsCloud implements AvatarRole{\n scene:BABYLON.Scene\n engine:BABYLON.Engine\n constructor(scene,engine,camera){\n this.scene = scene\n this.engine = this.engine\n }\n Mesh:BABYLON.Mesh\n offsetPosition = new BABYLON.Vector3(0,1.25,0)\n animationGroup:BABYLON.AnimationGroup = new BABYLON.AnimationGroup(\"RoleAnimGroup\")\n AnimMap = {\n idle:null\n }\n async init(){\n this.Mesh = this.loadMesh();\n this.loadIdleAnim();\n }\n\n playAnim(anim){\n // this.Mesh.animations[0]\n // this.animationGroup.start(true,1,0,120,null)\n this.scene.beginDirectAnimation(this.Mesh, [this.AnimMap[anim]], 0, 120, true);\n }\n loadMesh(){\n let sphere = BABYLON.MeshBuilder.CreateSphere(\"sphere\", { diameter: 2 }, this.scene);\n sphere.position.addInPlace(this.offsetPosition)\n sphere.visibility = 1 // 不可见,仅用于粒子覆盖占位\n // 材质\n sphere.material = new BABYLON.StandardMaterial(\"mat\", this.scene);\n sphere.material.wireframe = true;\n // 设置初始缩放\n sphere.scaling = new BABYLON.Vector3(1, 1, 1);\n return sphere\n }\n loadIdleAnim(){\n // 创建动画\n let idleAnim = new BABYLON.Animation(\n \"idle\",\n \"scaling\",\n 30,\n BABYLON.Animation.ANIMATIONTYPE_VECTOR3,\n BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE\n );\n \n // 定义动画关键帧\n let keys = [];\n keys.push({\n frame: 0,\n value: new BABYLON.Vector3(1,1,1) // 初始缩放\n });\n keys.push({\n frame: 60,\n value: new BABYLON.Vector3(1.5,1.5,1.5) // 最大缩放\n });\n keys.push({\n frame: 120,\n value: new BABYLON.Vector3(1,1,1) // 初始缩放\n });\n idleAnim.setKeys(keys)\n // 将关键帧添加到动画\n this.Mesh.animations.push(this.AnimMap.idle)\n this.AnimMap.idle = idleAnim\n this.animationGroup.addTargetedAnimation(this.AnimMap.idle,this.Mesh)\n }\n \n}","import { CommonModule } from '@angular/common';\nimport { Component, AfterViewInit, ElementRef } from '@angular/core';\nimport { ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n/**\n * npm i -S @babylonjs/core\n * npm i -S @babylonjs/loaders\n */\nimport * as BABYLON from '@babylonjs/core';\n// import { CloudPoint } from '@babylonjs/core';\nimport '@babylonjs/loaders';\nimport { AvatarRole } from './avatar.role';\nimport { RolePointsCloud } from './role-points.class';\n\n@Component({\n selector: 'fm-avatar-role-particle',\n standalone:true,\n imports:[CommonModule,FormsModule],\n templateUrl: './comp-avatar-particle.component.html',\n styleUrls: ['./comp-avatar-particle.component.scss']\n})\nexport class CompAvatarParticleComponent implements AfterViewInit {\n @ViewChild(\"renderCanvas\") renderCanvas:ElementRef\n \n // 画布\n private canvas: HTMLCanvasElement|undefined;\n private engine: BABYLON.Engine|undefined;\n private scene: BABYLON.Scene|undefined;\n mainCamera:BABYLON.ArcRotateCamera|BABYLON.VRDeviceOrientationArcRotateCamera|undefined;\n constructor(private elementRef: ElementRef) {\n }\n ngAfterViewInit(): void {\n this.canvas = this.renderCanvas.nativeElement;\n console.log(this.canvas)\n if(this.canvas){\n let options:BABYLON.EngineOptions = {\n }\n this.engine = new BABYLON.Engine((this.canvas as any), true,options);\n console.log(this.engine)\n // 创建场景\n this.createScene();\n this.engine.runRenderLoop(() => {\n this.scene?.render();\n this.engine?.resize();\n });\n window.addEventListener('resize', () => {\n this.engine?.resize();\n });\n }\n }\n currentRole:AvatarRole\n async createScene() {\n // 创建场景\n this.scene = new BABYLON.Scene((this.engine as any));\n this.scene.clearColor = new BABYLON.Color4(0,0,0,1)\n // 创建舞台中央旋转相机\n this.mainCamera = this.createCamera();\n console.log(this.mainCamera)\n // 加载预设的角色\n this.currentRole = new RolePointsCloud(this.scene,this.engine,this.mainCamera)\n await this.currentRole.init()\n this.currentRole.playAnim(\"idle\") // 默认播放闲置画面\n this.currentRole.Mesh.visibility = 0; // 开启点云,原Mesh设置隐藏\n\n // 创建需要展示的主要资源\n // let prefab = this.prefabList[0]\n // await this.createPrefab(prefab)\n\n // 创建粒子效果\n // await this.createParticle()\n\n // 创建点云粒子\n await this.createCloudPoints()\n\n let light = new BABYLON.HemisphericLight('light1', new BABYLON.Vector3(0,1,0), this.scene);\n\n // let ground = BABYLON.MeshBuilder.CreateGround('ground1', {height:10, width:10, subdivisions: 2}, this.scene);\n // let groudMaterial = new BABYLON.StandardMaterial(\"groudMaterial\", this.scene);\n // groudMaterial.diffuseColor = new BABYLON.Color3(0.5, 0.5, 0.5); // 设置灰色\n // ground.material = groudMaterial;\n // 修正比例\n this.engine?.resize();\n\n }\n isWebVR:boolean = false\n createCamera(){\n // Parameters: alpha, beta, radius, target position, scene\n let CameraType = this.isWebVR?BABYLON.VRDeviceOrientationArcRotateCamera:BABYLON.ArcRotateCamera\n let camera = new CameraType(\"Camera\", 0, 0, 30, new BABYLON.Vector3(0, 0.5, 0), this.scene);\n // Positions the camera overwriting alpha, beta, radius\n camera.setPosition(new BABYLON.Vector3(0, 0, 5));\n // 设置相机的俯仰角度为45°\n camera.beta = Math.PI / 3;\n camera.alpha = Math.PI / 1.2;\n camera.radius = 15;\n // This attaches the camera to the canvas\n // camera.attachControl(this.canvas, true); // 关闭控制,由程序锁定镜头\n return camera\n }\n\n mainMesh:BABYLON.AbstractMesh|undefined\n // prefabList = [\n // {name:\"蓝色可爱小机器人\",dir:'/assets/avatar/prefab/bluerobot/',file:\"scene.gltf\",cameraPositon:[Math.PI / 1.2, Math.PI / 3,5]},\n // {name:\"紫色小精灵\",dir:'/assets/avatar/prefab/furby_purple/',file:\"scene.gltf\",cameraPositon:[0, 0,10]}\n // ]\n // async createPrefab(prefab:any){\n // // 加载模型\n // const model = await BABYLON.SceneLoader.ImportMeshAsync(null, prefab.dir, prefab.file, this.scene);\n\n // // 设置模型初始位置\n // this.mainMesh = model.meshes[0]\n // this.mainMesh.position = new BABYLON.Vector3(0, 0.1, 0);\n // console.log(this.mainMesh)\n\n // // 重设相机位置\n // // 方法一:加载人工预设镜头位置\n // this.mainCamera?.setPosition(new BABYLON.Vector3(prefab.cameraPositon[0],prefab.cameraPositon[1],prefab.cameraPositon[2]))\n // // 方法二:由于Mesh本身的空间信息缺失,导致无法智能识别\n // // this.setCameraToMeshCenter(this.mainCamera,this.mainMesh)\n // return\n // }\n\n pointsCloud:BABYLON.PointsCloudSystem\n pointsMesh:BABYLON.Mesh\n async createCloudPoints(){\n this.pointsMesh = this.currentRole.Mesh\n this.pointsCloud = new BABYLON.PointsCloudSystem(\"pcs\", 1, this.scene) \n // pcs.addPoints(10000);\n \n let color1 = new BABYLON.Color3(0.7, 0.8, 1.0);\n let color4 = new BABYLON.Color4(0.7, 0.8, 1.0);\n let color2 = new BABYLON.Color4(0.2, 0.5, 1.0);\n let colorDead = new BABYLON.Color4(0, 0, 0.2, 0.0);\n let pTexture = new BABYLON.Texture(\"/assets/avatar/particle/textures/flare.png\", this.scene);\n let pMaterial = new BABYLON.PBRMaterial(\"material\", this.scene);\n pMaterial.emissiveTexture = pTexture\n pMaterial.emissiveColor = color1\n \n this.pointsCloud.addVolumePoints(this.currentRole.Mesh, 5000,BABYLON.PointColor.Color,color4);\n\n this.pointsCloud.buildMeshAsync().then(()=>{\n // this.pointsCloud.mesh.material = pMaterial;\n this.playAnimation(\"waiting\");\n });\n\n this.scene.registerAfterRender(() => {\n this.pointsCloud.setParticles();\n });\n this.engine.runRenderLoop(() => {\n this.scene.render();\n });\n\n }\n\n playAnimation(name){\n \n // 材质颜色\n\n switch (name) {\n case \"waiting\":\n this.cloudAnim()\n break;\n case \"listening\":\n this.cloudAnim({\n rotateSpeed:0.01,\n breathing:false,\n })\n break;\n case \"thinking\":\n this.cloudAnim({\n rotateSpeed:0.2,\n breathing:false,\n })\n break;\n case \"talking\":\n // this.pointsCloud.particles\n this.animMap['idle']&&this.scene.beginDirectAnimation(this.pointsMesh, [this.animMap['talking']], 0, 20, true);\n default:\n break;\n }\n }\n cloudAnim(options={\n breathing:true,\n rotateSpeed:0.002\n }){\n this.animMap['idle']&&this.scene.beginDirectAnimation(this.pointsMesh, [this.animMap['idle']], 0, 120, true);\n let colorWhite = new BABYLON.Color4(1.0, 1.0, 1.0,1.0);\n let pTexture = new BABYLON.Texture(\"/assets/avatar/particle/textures/flare.png\", this.scene);\n let islog = 0\n\n this.pointsCloud.updateParticle = (particle:BABYLON.CloudPoint) =>{\n // 空间位置\n let sphereRadius = this.currentRole.Mesh.getBoundingInfo()?.boundingSphere?.radiusWorld\n let centerWorld = this.currentRole.Mesh.getBoundingInfo()?.boundingSphere?.centerWorld\n\n let index = particle.idx;\n particle.color = colorWhite;\n // 旋转\n particle.rotation.y += options.rotateSpeed; \n // 位置\n if(particle&&islog<3){\n console.log(this.currentRole.Mesh.getBoundingInfo())\n console.log(particle)\n islog ++\n }\n if(!(particle as any).initpos) (particle as any).initpos = particle.position\n if(options.breathing){\n let initpos = (particle as any).initpos\n let relativeVector = initpos.subtract(centerWorld);\n particle.position = new BABYLON.Vector3(relativeVector.x*sphereRadius,relativeVector.y*sphereRadius,relativeVector.z*sphereRadius).add(this.currentRole.offsetPosition);\n }\n return particle\n };\n }\n \n animMap:{\n [key:string]:BABYLON.Animation\n } = {}\n createSphere(){\n let sphere = BABYLON.MeshBuilder.CreateSphere(\"sphere\", { diameter: 2 }, this.scene);\n sphere.visibility = 1 // 不可见,仅用于粒子覆盖占位\n // 材质\n sphere.material = new BABYLON.StandardMaterial(\"mat\", this.scene);\n sphere.material.wireframe = true;\n // 设置初始缩放\n sphere.scaling = new BABYLON.Vector3(1, 1, 1);\n this.pointsMesh = sphere;\n /**\n * 呼吸动画\n */\n // 创建动画\n let animation = new BABYLON.Animation(\n \"breathingAnimation\",\n \"scaling\",\n 30,\n BABYLON.Animation.ANIMATIONTYPE_VECTOR3,\n BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE\n );\n\n // 定义动画关键帧\n let keys = [];\n keys.push({\n frame: 0,\n value: new BABYLON.Vector3(0.3,0.3,0.3) // 初始缩放\n });\n keys.push({\n frame: 60,\n value: new BABYLON.Vector3(0.5,0.5,0.5) // 最大缩放\n });\n keys.push({\n frame: 120,\n value: new BABYLON.Vector3(0.3,0.3,0.3) // 初始缩放\n });\n\n // 将关键帧添加到动画\n animation.setKeys(keys);\n this.animMap[\"idle\"]=animation;\n\n\n /**\n * 讲话动画\n */\n\n // 定义动画帧\n let animationFramesTalk = [\n { frame: 0, value: BABYLON.Vector3.One() },\n { frame: 10, value: new BABYLON.Vector3(1.2, 0.8, 1.2) },\n { frame: 20, value: BABYLON.Vector3.One() },\n ];\n\n // 创建动画\n let animationTalk = new BABYLON.Animation(\n \"talkAnimation\",\n \"scaling\",\n 30,\n BABYLON.Animation.ANIMATIONTYPE_VECTOR3,\n BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE\n );\n\n // 设置动画帧\n animationTalk.setKeys(animationFramesTalk);\n this.animMap[\"talk\"]=animationTalk;\n\n\n // 启动动画\n this.scene.beginDirectAnimation(sphere, [this.animMap['idle']], 0, 120, true);\n\n return sphere\n }\n\n\n\n async createParticle(){\n // 创建球体\n let sphere = this.createSphere()\n\n // 创建粒子系统\n let particleSystem = new BABYLON.ParticleSystem(\"particles\", 2000, this.scene);\n particleSystem.particleTexture = new BABYLON.Texture(\"/assets/avatar/particle/textures/flare.png\", this.scene);\n particleSystem.emitter = sphere;\n particleSystem.minEmitBox = new BABYLON.Vector3(0, 0, 0); // Starting all from\n particleSystem.maxEmitBox = new BABYLON.Vector3(0, 0, 0); // To...\n // Colors of all particles\n particleSystem.color1 = new BABYLON.Color4(0.7, 0.8, 1.0, 1.0);\n particleSystem.color2 = new BABYLON.Color4(0.2, 0.5, 1.0, 1.0);\n particleSystem.colorDead = new BABYLON.Color4(0, 0, 0.2, 0.0);\n // Size of each particle (random between...\n particleSystem.minSize = 0.5;\n particleSystem.maxSize = 0.5;\n // Life time of each particle (random between...\n particleSystem.minLifeTime = 0.1;\n particleSystem.maxLifeTime = 0.1;\n // 角度速度\n particleSystem.minAngularSpeed = 0;\n particleSystem.maxAngularSpeed = Math.PI;\n particleSystem.minInitialRotation = 0;\n particleSystem.maxInitialRotation = Math.PI;\n // Emission rate// 设置粒子的初始速度\n // 禁用速度属性\n // particleSystem.manualEmitCount = particleSystem.getCapacity(); // 禁用自动发射\n particleSystem.minEmitPower = 0; // 最小发射速度\n particleSystem.maxEmitPower = 0; // 最大发射速度\n particleSystem.emitRate = 1500;\n // Speed\n particleSystem.updateSpeed = 0.01;\n // Blend mode : BLENDMODE_ONEONE, or BLENDMODE_STANDARD\n particleSystem.blendMode = BABYLON.ParticleSystem.BLENDMODE_ONEONE;\n particleSystem.direction1 = new BABYLON.Vector3(0,0,0)\n particleSystem.direction2 = new BABYLON.Vector3(0,0,0)\n particleSystem.start();\n // 设置粒子发射器为球形发射器\n let sphereEmitter = particleSystem.createSphereEmitter();\n sphereEmitter.radius = 2; // 球体半径\n // sphereEmitter.startPositionFunction = (worldMatrix: BABYLON.Matrix, positionToUpdate: BABYLON.Vector3, particle: BABYLON.Particle, isLocal: boolean)=>{\n // let sphereRadius = sphere.getBoundingInfo()?.boundingSphere?.radiusWorld\n // particle.position = particle.position.normalize().scale(sphereRadius);\n // }\n sphereEmitter.radiusRange = 0; // 开始发射半径范围 0 只在表面\n sphereEmitter.directionRandomizer = 0; // 开始发射方向随机性\n\n // 设置粒子效果\n particleSystem.gravity = new BABYLON.Vector3(0, 0, 0); // 关闭重力\n // 设置粒子系统停止后立即销毁粒子\n particleSystem.disposeOnStop = true;\n // 修改粒子更新函数,将粒子限制在球体表面\n particleSystem.updateFunction = (particles) =>{\n for (let index = 0; index < particles.length; index++) {\n let particle = particles[index];\n\n // // 将粒子位置限制在球体表面\n let sphereRadius = sphere.getBoundingInfo()?.boundingSphere?.radiusWorld\n particle.position = particle.position.normalize().scale(sphereRadius);\n // particle.scale = new BABYLON.Vector2(0.2,0.2)\n\n particle.age += this.scene.getEngine().getDeltaTime()/1000;\n // 检查粒子是否达到最大生命周期,如果是则使其消失\n if (particle.age >= particle.lifeTime) {\n particleSystem.recycleParticle(particle);\n index--; // 更新索引以避免跳过下一个粒子\n }\n // // 在一定时间后使粒子消失\n // if (particle.age > 0.19) {\n // particle.lifeTime = 0\n // }\n }\n };\n\n // 动画循环\n this.engine.runRenderLoop(() => {\n this.scene.render();\n // 更新粒子的位置和缩放\n particleSystem.worldOffset = sphere.position;\n // particle.position = particle.position.normalize().scale(sphereEmitter.radius);\n });\n }\n\n setCameraToMeshCenter(camera:BABYLON.ArcRotateCamera|undefined,mesh:BABYLON.AbstractMesh){\n // 获取网格体的边界信息\n mesh.computeWorldMatrix(true);\n let boundingInfo = mesh.getBoundingInfo();\n\n // 获取边界框的最小点和最大点\n let minimum = boundingInfo.minimum;\n let maximum = boundingInfo.maximum;\n\n // 计算网格体的长宽高\n let width = maximum.x - minimum.x;\n let height = maximum.y - minimum.y;\n let depth = maximum.z - minimum.z;\n let center = boundingInfo.boundingBox.center;\n console.log(\"宽度:\" + width);\n console.log(\"高度:\" + height);\n console.log(\"深度:\" + depth);\n console.log(\"中心点:\" + center);\n\n // camera?.setPosition(center)\n }\n}\n","<canvas #renderCanvas class=\"render-canvas\"></canvas>","import { AfterViewInit,OnInit, Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FmodeAvatarRoleComp } from '../interface-avatar-role';\n\nimport Recorder from 'recorder-core'\nimport 'recorder-core/src/extensions/waveview'\n\nimport Parse from \"parse\";\nimport { FormsModule } from '@angular/forms';\nimport { FmodeChat } from '../../service-fmai/service-chat/chat-class';\n\n@Component({\n selector: 'fm-avatar-role-image',\n standalone: true,\n imports: [CommonModule,FormsModule],\n templateUrl: './comp-avatar-role-image.component.html',\n styleUrls: ['./comp-avatar-role-image.component.scss']\n})\nexport class CompAvatarRoleImageComponent implements FmodeAvatarRoleComp,AfterViewInit,OnInit {\n @ViewChild(\"avatarImage\") avatarImage:ElementRef\n animClass:string = \"waiting\"\n\n @Input() fmodeChat:FmodeChat;\n @Input() role:Parse.Object;\n wave:any\n waveInterval:any\n playWave(){\n if(!this.wave&&Recorder.WaveView){\n this.wave=Recorder.WaveView({elem:\".record-wave-avatar\",keep:false});\n }\n\n // 生成随机的pcmData\n function generatePcmData(length) {\n const pcmData = [];\n for (let i = 0; i < length; i++) {\n pcmData.push(Math.floor(Math.random() * 65536) - 32768);\n }\n return pcmData;\n }\n\n // 生成随机的powerLevel\n function generatePowerLevel() {\n return Math.random() * 100;\n }\n\n // 生成随机的sampleRate\n function generateSampleRate() {\n const sampleRates = [44100, 48000, 88200, 96000];\n return sampleRates[Math.floor(Math.random() * sampleRates.length)];\n }\n // 生成示例数据\n \n let powerLevel = generatePowerLevel(); // 生成随机的powerLevel\n // 使用生成的数据调用wave.input函数\n this.waveInterval = setInterval(()=>{\n let sampleRate = generateSampleRate(); // 生成随机的sampleRate\n let pcmData = generatePcmData(1000); // 生成长度为1000的pcmData数组\n this.wave.input(pcmData, powerLevel, sampleRate);\n },40)\n }\n stopWave(){\n clearInterval(this.waveInterval)\n }\n ngAfterViewInit(){\n\n }\n ngOnInit(){\n setTimeout(() => {\n // 绑定当前形象插件动作函数\n this.fmodeChat.playAnimation = this.playAnimation \n }, 1500);\n }\n playAnimation(){\n let that = this\n return (name:string)=>{\n let img = that.avatarImage.nativeElement\n that.animClass = name\n that.stopWave()\n switch (name) {\n case \"thinking\":\n img.style.animationPlayState = 'running';\n break;\n case \"talking\":\n img.style.animationPlayState = 'running';\n that.playWave()\n break;\n case \"listening\":\n img.style.animationPlayState = 'pause';\n break;\n case \"waiting\":\n img.style.animationPlayState = 'running';\n break;\n default:\n img.style.animationPlayState = 'paused';\n break;\n }\n }\n }\n}\n","<div class=\"page\">\n <div class=\"avatar\" [class]=\"animClass\">\n <div class=\"avatar-photo\">\n <img #avatarImage [src]=\"role?.get('thumb')\" alt=\"\">\n <!-- 音频波动 -->\n <div class=\"record-wave-avatar\">\n </div>\n </div>\n </div>\n</div>","import * as sdk from \"microsoft-cognitiveservices-speech-sdk\"\n\n/**\n * FmodeTTS\n * 每个类,表示一次独立的语音合成服务\n */\nexport class FmodeTTS{\n private speechConfig: sdk.SpeechConfig;\n private audioConfig: sdk.AudioConfig;\n private synthesizer: sdk.SpeechSynthesizer;\n private subscriptionKey: string;\n private authorizationToken:string;\n private region: string;\n\n constructor(config:{\n region:string,\n subscriptionKey:string,\n token:string,\n }){\n this.subscriptionKey = config?.subscriptionKey;\n this.authorizationToken = config?.token;\n this.region = config?.region;\n if(this.subscriptionKey){ // 直接资源APIKEY,调试或后端是使用\n this.speechConfig = sdk.SpeechConfig.fromSubscription(this.subscriptionKey, this.region);\n }\n if(this.authorizationToken){ // 加载调用STSToken,客户端使用\n this.speechConfig = sdk.SpeechConfig.fromAuthorizationToken(this.authorizationToken, this.region);\n console.log(this.authorizationToken,this.speechConfig)\n }\n console.log(this.speechConfig)\n // this.audioConfig = sdk.AudioConfig.fromDefaultSpeakerOutput();\n // this.synthesizer = new sdk.SpeechSynthesizer(this.speechConfig, this.audioConfig);\n this.synthesizer = new sdk.SpeechSynthesizer(this.speechConfig);\n }\n\n extractSSMLContent(inputString) {\n var regex = /<speak.*?<\\/speak>/;\n var match = inputString.match(regex);\n \n if (match) {\n return match[0];\n } else {\n return inputString;\n }\n }\n \n /**\n * 合成语言并播放\n * @param textOrSSML \n * @desc\n * 普通文本\n * SSML https://learn.microsoft.com/zh-cn/azure/ai-services/speech-service/how-to-speech-synthesis?tabs=browserjs%2Cterminal&pivots=programming-language-javascript#use-ssml-to-customize-speech-characteristics\n * @returns \n */\n public async speakAsync(textOrSSML: string): Promise<void> {\n // 正则匹配SSML部分\n textOrSSML = this.extractSSMLContent(textOrSSML);\n // 播放语音\n return new Promise((resolve, reject) => {\n const startTime = Date.now();\n let speekType = 'speakTextAsync'\n if(textOrSSML?.indexOf(\"<\")>-1){\n speekType = \"speakSsmlAsync\"\n }\n\n // 音频输出流\n // Create an audio output stream\n // const audioOutputStream = sdk.AudioOutputStream.createPullStream();\n // Create an audio configuration using the audio output stream\n // const audioConfig = sdk.AudioConfig.fromStreamOutput(audioOutputStream);\n\n // 播放组件\n // Get the audio data from the callback and create a Blob\n // const audioBlob = audioOutputStream.audioBlob();\n // const audioUrl = URL.createObjectURL(audioBlob);\n // const audioElement = new Audio(audioUrl);\n console.log(textOrSSML)\n this.synthesizer[speekType](\n textOrSSML,\n result => {\n /**\n * \n * @desc\n * {\n privAudioData: undefined\n privAudioDuration: undefined\n privErrorDetails: \"Unable to contact server. StatusCode: 1006,\\n wss://eastasia.tts.speech.microsoft.com/cognitiveservices/websocket/v1 Reason: undefined\"\n privProperties: PropertyCollection {privKeys: Array(1), privValues: Array(1)}\n privReason: 1\n privResultId: \"539694CFA6CB4BAD97F90AF76E608E69\"\n audioData: (...)\n audioDuration: (...)\n errorDetails: (...)\n properties: (...)\n reason: (...)\n resultId: (...)\n }\n */\n console.log(result)\n console.log(result.resultId)\n console.log(result.reason)\n if (result.reason === sdk.ResultReason.SynthesizingAudioCompleted) {\n const endTime = Date.now();\n let audioData = result?.audioData;\n this.playAudioData(audioData) // 需要记录播放的时长,绑定文本内容的对应关系\n console.log(`Audio synthesis finished. Duration: ${endTime - startTime} ms`);\n resolve();\n } else {\n reject(`Speech synthesis failed. Reason: ${result.errorDetails}`);\n }\n },\n error => {\n reject(`Error occurred during synthesis: ${error}`);\n }\n );\n });\n }\n\n // 把打断时的事件\n onBreak(options:{\n playedTime:string // 已播放时长\n playedText:string // 已播放文本\n leftText:string // 剩余文本\n }){\n \n }\n\n playAudioData(audioData){\n let blob = new Blob([audioData],{type:'audio/wav'});\n let url = URL.createObjectURL(blob);\n let audio = new Audio(url)\n audio.play();\n }\n}","import { Component,OnInit,Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ToastController } from \"@ionic/angular\"\n\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { IonicModule, NavController, Platform } from \"@ionic/angular\"\n\nimport { FmodeVoiceService } from '../../voice';\nimport { FmodeChat,ChatService } from '../../service-fmai/service-chat';\nimport { FmodeTTS } from '../../voice/tts';\nimport { NovaCloudService } from '../../../nova-cloud/nova-cloud.service';\n\n\n@Component({\n selector: 'fm-modal-chat-voice-input',\n standalone: true,\n imports: [CommonModule,\n IonicModule,RouterModule,\n],\n templateUrl: './modal-chat-voice-input.component.html',\n styleUrls: ['./modal-chat-voice-input.component.scss']\n})\nexport class ModalChatVoiceInputComponent implements OnInit{\n\n @Input() fmodeChat:FmodeChat|undefined\n\n /**\n * 开始讲话方式:click点击开始/点击结束 press按住讲话/松开结束\n * @default click\n */\n @Input() talkMode:\"click\"|\"press\"=\"click\"\n talkTips = \"点击话筒开始讲话\"\n\n errorText:string = ``\n\n constructor(\n private platform:Platform,\n private router:Router,\n public voiceServ:FmodeVoiceService,\n private toastCtrl:ToastController,\n private ncloud:NovaCloudService,\n public chatServ:ChatService,\n\n ){\n }\n ngOnInit(){\n if(this.talkMode==\"press\"){\n this.talkTips = \"轻触底部开始讲话\"\n }\n\n // 开启录音唤醒功能\n setTimeout(() => {\n this.initVoiceSevice()\n this.initVoiceASR()\n }, 500);\n }\n\n /**\n * ASR唤醒功能\n */\n async initVoiceASR(){\n // 开启录音权限\n this.voiceServ.requestPermission().then(()=>{\n this.voiceServ.openWithPriviledge()\n // 开始监听唤醒词 Nihao Hello\n this.startASRAwake()\n })\n }\n // ASR - 唤醒词\n async startASRAwake(){\n await this.voiceServ.openWithPriviledge();\n let speech = new this.voiceServ.webSpeech(this.platform);\n speech.startRecognition(\"Nihao | Hello\");\n }\n\n /**\n * 音频提示音播放\n */\n player = new Audio();\n\n playMusic(action){\n this.player.src = `/assets/avatar/voice/${action}.mp3`\n this.player.play();\n }\n\n /**\n * 初始化录音转录服务\n * @desc\n * 根据数字角色对话状态,设计语音转录各事件处理过程\n * 嵌入提示音\n * 嵌入动画\n * 嵌入唤醒词切换逻辑\n */\n initVoiceSevice(){\n this.fmodeChat.userInput = this.voiceServ.resultText\n this.voiceServ.requestPermission().then(()=>{\n this.voiceServ.openWithPriviledge()\n })\n\n // 开始录音前 播放倾听动画\n // 开始录音前 播放提示音\n this.voiceServ.onBeforeStartTalk = ()=>{\n this.fmodeChat.playAnimation(\"listening\")\n this.playMusic(\"start-talk\")\n }\n\n // 用户取消录音前 播放提示音\n this.voiceServ.onBeforeCancelTalk = ()=>{\n this.playMusic(\"interupt-talk\")\n this.fmodeChat.playAnimation(\"waiting\")\n }\n // 用户取消录音后 麦克风实时监听唤醒词\n this.voiceServ.onAfterCancelTalk = ()=>{\n this.startASRAwake() // 监听与麦克风冲突,需要重启\n }\n // 完成录音前 播放提示音\n // 完成录音后 执行处理过程\n this.voiceServ.onBeforeFinishTalk = ()=>{\n this.fmodeChat.playAnimation(\"thinking\")\n this.playMusic(\"stop-talk\")\n }\n this.voiceServ.onAfterFinishTalk = ()=>{\n console.log(\"onAfterFinishTalk\")\n this.fmodeChat.userInput = this.voiceServ?.resultText\n this.sendMessage() // 发送消息\n this.startASRAwake() // 监听与麦克风冲突,需要重启\n }\n }\n\n /** \n * 发送语音消息\n * \n */\n async sendMessage(){\n\n // 检测用户登录情况\n // let isLoginLock = await this.authServ.checkLoginLock()\n // if(!isLoginLock) return false\n \n // 检测余额及模型付费限制\n // let payCheck = await this.checkBalance()\n // if(!payCheck) return false\n \n // 检测用户输入内容空值\n if(!this.fmodeChat.userInput){\n this.errorText = `内容不能为空`\n let toast = await this.toastCtrl.create({\n message:this.errorText,\n position:\"top\",\n icon:'alert',\n color:\"warning-circle\",\n duration:1000\n })\n toast.present();\n return\n }\n \n // 正常发送消息\n this.fmodeChat?.sendMessage(this.voiceServ.resultText,null,(msg:any)=>{\n let content = msg.content;\n // this.testTTS(this.aiResponseText)\n this.playTTS(content)\n // 完整的消息,通过TTS合成进行讲话\n this.fmodeChat.playAnimation(\"talking\") // 应该是Talking动画,暂时用wating代替\n setTimeout(() => {\n this.fmodeChat.playAnimation(\"waiting\") // 应该是Talking动画,暂时用wating代替\n }, 6000);\n });\n this.fmodeChat.userInput = ``\n this.fmodeChat.userImage = ``\n }\n\n /**\n * TTS - 语音合成\n * \n */\n tts:FmodeTTS\n async initTTS(){\n // if(this.tts) return // 待明确sts有效期和次数进行优化,避免每次重复获取\n let config:any = await this.ncloud.apig(\"voice/voice/tts/token\",{company:localStorage.getItem(\"company\")})\n // 有TTS资源,使用情绪合成\n console.log(config)\n if(config?.token){\n let tts = new FmodeTTS(config);\n this.tts=tts;\n }\n }\n async playTTS(textOrSSML:string){\n await this.initTTS();\n console.log(this.tts)\n if(this.tts){\n try{\n await this.tts.speakAsync(textOrSSML)\n }catch(ttserr){\n console.error(ttserr)\n }\n }\n \n // 无TSS资源,调用Edge Speech\n }\n playTTSTeting(){\n this.playTTS(`<speak xmlns=\"http://www.w3.org/2001/10/synthesis\" xmlns:mstts=\"http://www.w3.org/2001/mstts\" xmlns:emo=\"http://www.w3.org/2009/10/emotionml\" version=\"1.0\" xml:lang=\"zh-CN\">\n <voice name=\"zh-CN-XiaoxiaoNeural\"><mstts:express-as style=\"angry\">”好没意思的话!去不去,关我什么事儿?又没叫你替我解闷儿,还许你<mstts:ttsbreak strength=\"none\" />从此<prosody contour=\"(24%, +49%) (59%, -2%)\">不</prosody><prosody rate=\"-15.00%\" contour=\"(24%, +49%) (59%, -2%)\">理</prosody><prosody contour=\"(24%, +49%) (59%, -2%)\">我呢</prosody>!”</mstts:express-as></voice>\n </speak>`)\n }\n testTTS(sentence?){\n console.log(sentence)\n sentence = sentence || \"你好呀,我是飞马小智!很高兴为您介绍脑控科技的发展历程。我们成立于2019年\"\n let speech = new this.voiceServ.webSpeech(this.platform);\n speech.speak(sentence)\n }\n testXunfeiTTS(){\n // this.voiceServ.ttsXunfei.connectWebSocket()\n }\n}\n\n"," \n <ng-container *ngIf=\"fmodeChat\">\n\n <!-- 用户输入 提示区域 -->\n <div class=\"user-asr-input\" style=\"text-align: center;\" *ngIf=\"!fmodeChat?.userInput && voiceServ.btnStatus!='OPEN'\">{{talkTips}}</div>\n <div class=\"user-asr-input\">{{fmodeChat?.userInput}}</div>\n \n <!-- 测试按钮 -->\n <div class=\"test-button-group\" *ngIf=\"false\">\n <button class=\"button-record\" (click)=\"voiceServ.toggleRecord()\">开始录制 {{voiceServ.connStatus}} {{voiceServ.btnStatus}}</button>\n <br>\n <button class=\"button-record\" (click)=\"voiceServ.playRecord()\">播放录制结果</button>\n <br>\n <button class=\"button-record\" (click)=\"voiceServ.playBuffers()\">播放Buffers结果</button>\n <button (click)=\"testTTS()\">测试TTS纯WEB</button>\n <button (click)=\"startASR()\">测试ASR</button> \n <button (click)=\"testXunfeiTTS()\">测试合成</button> \n </div>\n\n \n \n <!-- 交互按钮 -->\n <ion-fab slot=\"fixed\" horizontal=\"center\" vertical=\"bottom\">\n <ng-container *ngIf=\"talkMode=='click'\">\n <!-- 默认按钮:开始讲话 -->\n <ion-fab-button color=\"primary\" closeIcon=\"checkmark\" (click)=\"voiceServ.toggleRecord()\">\n <ion-icon name=\"mic-outline\"></ion-icon>\n </ion-fab-button>\n\n <!-- 讲话中:取消发送 -->\n <ion-fab-list side=\"end\">\n <ion-fab-button [class]=\"'loading'\" (click)=\"voiceServ.cancelTalk()\">\n <ion-icon name=\"pause-outline\"></ion-icon>\n </ion-fab-button>\n </ion-fab-list>\n </ng-container>\n \n <ng-container *ngIf=\"talkMode=='press'\">\n <ion-fab-button color=\"primary\" closeIcon=\"mic-outline\" (touchstart)=\"voiceServ.toggleRecord()\" (touchend)=\"voiceServ.cancelTalk()\">\n <ion-icon name=\"mic-outline\"></ion-icon>\n </ion-fab-button>\n </ng-container>\n </ion-fab>\n\n\n <!-- 音频波动 -->\n <div class=\"record-wave\">\n </div>\n</ng-container>\n","import { AfterViewInit, Component, ElementRef, Input, OnDestroy, ViewChild } from '@angular/core';\nimport { FmodeVoiceService } from '../../voice';\nimport { ChatService, FmodeChatCompletion } from '../../service-fmai/service-chat';\nimport { FmodeAvatarRoleComp } from '../interface-avatar-role';\nimport { IonicModule, NavController, Platform } from \"@ionic/angular\"\nimport { CommonModule } from '@angular/common';\nimport {CompAvatarParticleComponent} from \"../comp-avatar-particle/comp-avatar-particle.component\"\nimport {CompAvatarRoleImageComponent} from \"../comp-avatar-role-image/comp-avatar-role-image.component\"\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport * as Parse from \"parse\"\nimport { NovaCloudService } from '../../../nova-cloud/nova-cloud.service';\nimport { FmodeChat,HidexmlPipe } from '../../service-fmai/service-chat';\nimport { ModalChatVoiceInputComponent } from '../modal-chat-voice-input/modal-chat-voice-input.component';\n@Component({\n selector: 'app-comp-avatar-talk',\n standalone:true,\n imports:[\n CommonModule,RouterModule,FormsModule,IonicModule,CompAvatarParticleComponent,CompAvatarRoleImageComponent,\n ModalChatVoiceInputComponent,\n HidexmlPipe\n ],\n providers:[\n FmodeVoiceService,NovaCloudService,ChatService\n ],\n templateUrl: './comp-avatar-talk.component.html',\n styleUrls: ['./comp-avatar-talk.component.scss']\n})\nexport class CompAvatarTalkComponent implements AfterViewInit,OnDestroy{\n @ViewChild(\"avatar\") avatarComp:FmodeAvatarRoleComp\n roleId:string\n avatarRole:Parse.Object;\n fmodeChat:FmodeChat;\n \n constructor(\n public voiceServ:FmodeVoiceService,\n private platform:Platform,\n private router:Router,\n private navCtrl:NavController,\n private route:ActivatedRoute,\n public chatServ:ChatService,\n private ncloud:NovaCloudService,\n ){\n\n this.route.paramMap.subscribe(params=>{\n this.roleId = params.get(\"roleId\");\n this.loadAvatarRole(this.roleId)\n })\n // 切换黑暗模式\n document.body.classList.add('dark');\n }\n \n ngOnInit(){\n\n }\n ngOnDestroy(): void {\n document.body.classList.remove('dark');\n this.voiceServ.resultText = null;\n if(this.fmodeChat){\n this.fmodeChat.latestAIResponse = null;\n }\n }\n goBack(){\n document.body.classList.remove('dark');\n this.navCtrl.navigateRoot('/chat/pro/role/'+this.roleId)\n }\n // 根据ID加载数字角色\n async loadAvatarRole(roleId){\n let query = new Parse.Query(\"AvatarRole\")\n this.avatarRole = await query.get(roleId);\n let chat = await this.chatServ.createNewRoleChat(this.roleId)\n chat.isTalkMode = true;\n this.fmodeChat = chat\n }\n\n\n ngAfterViewInit(){\n \n this.listenDivChange()\n }\n @ViewChild(\"aiRespComp\") aiRespComp:ElementRef\n listenDivChange(){\n // 创建 MutationObserver 实例\n let observer = new MutationObserver(() => {\n this.scrollToBottom(this.aiRespComp);\n });\n // 配置观察选项\n let config = { childList: true, subtree: true, attributes:true };\n // 开始观察\n observer.observe(this.aiRespComp.nativeElement, config);\n }\n scrollToBottom(comp:ElementRef){\n if(comp?.nativeElement?.scrollHeight){\n comp.nativeElement.scrollTop = comp.nativeElement.scrollHeight\n }\n }\n \n\n /**\n * AI响应内容 fmodeChat.latestAIResponse\n */\n \n \n}\n","<ion-menu #menu contentId=\"main-content\" side=\"end\">\n <ion-header>\n <ion-toolbar>\n <ion-title>资料</ion-title>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n\n <ion-card style=\"margin: 0px;\">\n <img [src]=\"avatarRole?.get('thumb')\" alt=\"\">\n <ion-card-header>\n <ion-card-subtitle>{{avatarRole?.get('tags')}}</ion-card-subtitle>\n <ion-card-title>{{avatarRole?.get(\"name\")}}</ion-card-title>\n </ion-card-header>\n \n <ion-card-content>\n {{avatarRole?.get(\"desc\")}}\n\n <ion-list [inset]=\"true\" style=\"margin:0px;\">\n <!-- <ion-item>\n <ion-avatar *ngIf=\"avatarRole?.get('thumb')\" aria-hidden=\"true\" slot=\"start\">\n <img [src]=\"avatarRole?.get('thumb')\" />\n </ion-avatar>\n <ion-label>{{avatarRole?.get(\"name\")}}</ion-label>\n </ion-item> -->\n <ion-item lines=\"none\" *ngIf=\"avatarRole?.get('age')\">\n <ion-note slot=\"start\">年龄</ion-note>\n <ion-label>{{avatarRole?.get(\"age\")}}</ion-label>\n </ion-item>\n <ion-item lines=\"none\" *ngIf=\"avatarRole?.get('gender')\">\n <ion-note slot=\"start\">性别</ion-note>\n <ion-label>{{avatarRole?.get(\"gender\")}}</ion-label>\n </ion-item>\n <ion-item lines=\"none\">\n <ion-note slot=\"start\">称号</ion-note>\n <ion-label>{{avatarRole?.get(\"title\")}}</ion-label>\n </ion-item>\n \n <ion-item lines=\"none\">\n <ion-note slot=\"start\">擅长</ion-note>\n <ion-label>{{avatarRole?.get(\"tags\")?.join(',')}}</ion-label>\n </ion-item>\n\n </ion-list>\n </ion-card-content>\n </ion-card>\n \n \n \n </ion-content>\n</ion-menu>\n\n<div class=\"ion-page\" id=\"main-content\">\n <ion-header class=\"ion-no-border\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"goBack()\"> <ion-icon name=\"chevron-back-outline\"></ion-icon> </ion-button>\n </ion-buttons>\n <ion-title>\n <ion-chip *ngIf=\"avatarRole?.get('title')\">{{avatarRole?.get(\"title\")}}</ion-chip>\n </ion-title>\n <ion-buttons slot=\"end\">\n <!-- <ion-button (click)=\"playTTSTeting()\">TTS测试</ion-button> -->\n {{avatarRole?.get(\"name\")}}\n <ion-button (click)=\"menu.toggle()\"> <ion-icon name=\"ellipsis-horizontal-outline\"></ion-icon> </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n <ion-segment value=\"voice\">\n <ion-segment-button (click)=\"chatServ.createChatPanel(avatarRole)\" value=\"chat\">\n <ion-label>聊天</ion-label>\n </ion-segment-button>\n <ion-segment-button routerLink=\"{{'/avatar/role/'+avatarRole?.id}}\" value=\"voice\">\n <ion-label>语音</ion-label>\n </ion-segment-button>\n </ion-segment>\n\n <!-- 数字形象:动画效果 -->\n <fm-avatar-role-image *ngIf=\"avatarRole&&fmodeChat\" [fmodeChat]=\"fmodeChat\" [role]=\"avatarRole\" #avatar class=\"avatar\"></fm-avatar-role-image>\n <!-- <fm-avatar-role-particle #avatar class=\"avatar\"></fm-avatar-role-particle> -->\n\n <!-- AI回复的最新消息 -->\n <div class=\"ai-resp-input\" #aiRespComp>{{fmodeChat?.latestAIResponse | hidexml}}</div>\n\n <fm-modal-chat-voice-input *ngIf=\"fmodeChat\" [fmodeChat]=\"fmodeChat\"></fm-modal-chat-voice-input>\n\n</div>\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule, Routes } from '@angular/router';\nimport { HttpClientModule } from '@angular/common/http';\nimport { CompAvatarTalkComponent } from \"./comp-avatar-talk/comp-avatar-talk.component\"\n\nexport const AvatarRoutes: Routes = [\n {\n path: \"role/:roleId\",\n component: CompAvatarTalkComponent,\n runGuardsAndResolvers: \"always\",\n }\n]\n\n@NgModule({\n declarations: [\n ],\n imports: [\n CommonModule,\n FormsModule,\n HttpClientModule,\n ReactiveFormsModule,\n RouterModule.forChild(AvatarRoutes),\n CompAvatarTalkComponent,\n ],exports:[\n CompAvatarTalkComponent,\n ]\n})\nexport class AvatarModule { }\n","import { Component,AfterViewInit } from '@angular/core';\nimport * as AMapLoader from \"@amap/amap-jsapi-loader\"\n(window as any)._AMapSecurityConfig = {\n securityJsCode:'32aa3f4ab0fa0061de03edd4eafdd50a',\n}\n// import \"@amap/amap-jsapi-types\"\n\ninterface MapPlace{\n name:string,\n location:Array<number>,\n marker?: any // AMap.Marker\n}\n\n@Component({\n selector: 'app-page-map.start',\n templateUrl: './page-map.start.component.html',\n styleUrls: ['./page-map.start.component.scss']\n})\nexport class PageMapStartComponent implements AfterViewInit {\n AMap:any\n map: any // AMap.Map\n placeList:Array<MapPlace> = [\n {name:\"江财蛟桥校区\",location:[115.855125,28.744335]},\n {name:\"江财枫林校区\",location:[115.835639,28.734119]},\n {name:\"江财麦庐校区\",location:[115.816717,28.728899]},\n ]\n ngAfterViewInit(): void {\n this.initMap();\n }\n async initMap(){\n await this.createMap()\n this.goAndMarkPlace(this.placeList[1])\n }\n async createMap(){\n this.AMap = await AMapLoader.load({\n key: \"473b52010df7d3a32db0a2f5db245c8e\", // 申请好的Web端开发者Key,首次调用 load 时必填\n version: \"2.0\", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15\n })\n this.map = new this.AMap.Map('container');\n }\n /**\n * 添加点标记 Marker\n */\n async addMarks(){\n // JS API 提供了在地图之上绘制覆盖物的能力,现在我们添加add()一个默认的点标记Marker。\n let marker = new this.AMap.Marker({\n position:[115.835639,28.734119] //位置\n })\n this.map.add(marker); //添加到地图\n }\n goAndMarkPlace(place:any){\n this.map.setCenter(place.location)\n this.map.setZoom(18)\n console.log(this.placeList)\n if(place.marker) return\n place.marker = new this.AMap.Marker({\n position:place.location\n })\n this.map.add(place.marker);\n }\n clearMark(place:any){\n place?.marker?.remove()\n }\n /**\n * 路线规划 地点1 => 地点2\n */\n planRoute(p1,p2){\n let transfer;\n this.map.plugin([\"AMap.Transfer\"], () => { //加载公交换乘插件\n let transOptions = {\n map: this.map,\n city: '南昌市',\n panel: 'panel',\n // cityd:'经开区',\n policy: this.AMap.TransferPolicy.LEAST_TIME\n };\n console.log(this.AMap)\n console.log(this.AMap.TransferPolicy)\n //构造公交换乘类\n transfer = new this.AMap.Transfer(transOptions);\n //根据起、终点坐标查询公交换乘路线\n transfer.search(new this.AMap.LngLat(p1.location[0], p1.location[1]), new this.AMap.LngLat(p2.location[0], p2.location[1]), (status, result) => {\n // result即是对应的公交路线数据信息,相关数据结构文档请参考 https://lbs.amap.com/api/javascript-api/reference/route-search#m_TransferResult\n if (status === 'complete') {\n console.log('绘制公交路线完成:')\n console.log(result)\n } else {\n console.error('公交路线数据查询失败' + result)\n }\n });\n // transOptions = {\n // city: '北京市', //公交城市\n // policy: AMap.TransferPolicy.LEAST_TRANSFER //乘车策略\n // };\n // trans = new AMap.Transfer (transOptions); //构造公交换乘类\n // AMap.Event.addListener(trans, \"complete\", trans_CallBack); //返回导航查询结果\n // AMap.Event.addListener(trans, \"error\", function(e){alert(e.info);}); //返回错误信息\n // //根据起、终点坐标查询公交换乘路线\n // trans.search(new AMap.LngLat(116.379018, 39.865026), new AMap.LngLat(116.42732, 39.903752));\n });\n\n\n }\n}\n","<!-- 全屏地图 -->\n<div id=\"container\"></div>\n\n<!-- 右侧地点 -->\n<div class=\"place-list\">\n <ng-container *ngFor=\"let place of placeList\">\n <div class=\"place-item\" (click)=\"goAndMarkPlace(place)\">\n {{place.name}}\n <button (click)=\"clearMark(place)\">清除标记</button>\n </div>\n </ng-container>\n\n <button (click)=\"planRoute(placeList[0],placeList[1])\">从蛟桥到枫林</button>\n \n</div>","import { Component, Input, Output, EventEmitter, ViewChild, AfterViewInit, ElementRef } from '@angular/core';\nimport Parse from \"parse\";\n// 弹窗依赖\nimport { IonModal } from '@ionic/angular';\nimport { OverlayEventDetail } from '@ionic/core';\n\n// 高德依赖\nimport * as AMapLoader from \"@amap/amap-jsapi-loader\"\n(window as any)._AMapSecurityConfig = {\n securityJsCode:'32aa3f4ab0fa0061de03edd4eafdd50a',\n}\n\n@Component({\n selector: 'fm-map-poi-picker',\n templateUrl: './comp-poi-picker.component.html',\n styleUrls: ['./comp-poi-picker.component.scss']\n})\nexport class CompPoiPickerComponent implements AfterViewInit{\n @ViewChild(\"container\") container:ElementRef\n @ViewChild(\"panel\") panel:ElementRef\n @Input(\"name\") _name:string // 地标名称\n get name(){\n return this._name\n }\n set name(v){\n this._name = v;\n this.nameChange.emit(v)\n }\n @Output() nameChange:EventEmitter<string> = new EventEmitter()\n\n\n @Input(\"address\") _address:string // 详细地址\n get address(){\n return this._address\n }\n set address(v){\n this._address = v;\n this.addressChange.emit(v)\n }\n @Output() addressChange:EventEmitter<string> = new EventEmitter()\n\n @Input(\"location\") _location:Parse.GeoPoint // 经纬度数组\n get location(){\n return this._location\n }\n set location(v){\n this._location = v;\n this.locationChange.emit(v)\n }\n @Output() locationChange:EventEmitter<Parse.GeoPoint> = new EventEmitter()\n constructor(){\n }\n /**\n * 弹窗效果区域\n */\n isModalOpen:boolean = false;\n @ViewChild(IonModal) modal: IonModal;\n\n cancel() {\n this.isModalOpen = false;\n this.modal.dismiss(null, 'cancel');\n }\n\n confirm() {\n this.isModalOpen = false;\n this.modal.dismiss(this.address, 'confirm');\n }\n\n onWillDismiss(event: Event) {\n const ev = event as CustomEvent<OverlayEventDetail<string>>;\n if (ev.detail.role === 'confirm') {\n console.log(\"确认\")\n }\n }\n openModal(){\n this.isModalOpen=true\n setTimeout(() => {\n this.initMap()\n }, 800);\n }\n /**\n * 高德地图插件区域\n */\n AMap:any;\n map:any;\n ngAfterViewInit(): void {\n }\n initMap(){\n this.createMap();\n }\n async createMap(){\n this.AMap = await AMapLoader.load({\n key: \"473b52010df7d3a32db0a2f5db245c8e\", // 申请好的Web端开发者Key,首次调用 load 时必填\n version: \"2.0\", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15\n })\n let containerEl = this.container.nativeElement\n this.map = new this.AMap.Map(containerEl);\n this.goCurrentCenter()\n }\n goCurrentCenter(){\n this.AMap.plugin([\"AMap.Geolocation\"], () => {\n // 创建定位对象\n let geolocation = new this.AMap.Geolocation({\n enableHighAccuracy: true, // 是否使用高精度定位,默认为true\n timeout: 10000, // 超过10秒后停止定位,默认:无穷大\n maximumAge: 0, // 定位结果缓存0毫秒,默认:0\n convert: true, // 自动偏移坐标,偏移后的坐标为高德坐标,默认:true\n showButton: true, // 显示定位按钮,默认:true\n buttonPosition: 'RB', // 定位按钮停靠位置,默认:'LB',左下角\n buttonOffset: new this.AMap.Pixel(10, 10), // 定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)\n showMarker: false, // 定位成功后在定位到的位置显示点标记,默认:true\n showCircle: false, // 定位成功后用圆圈表示定位精度范围,默认:true\n panToLocation: true, // 定位成功后将定位到的位置作为地图中心点,默认:true\n zoomToAccuracy: false // 定位成功后将定位精度范围显示在地图上,默认:true\n });\n\n // 添加定位插件\n this.map.addControl(geolocation);\n\n // 获取当前位置信息\n geolocation.getCurrentPosition(function (status, result) {\n if (status === 'complete') {\n // 定位成功\n console.log('当前位置经度:' + result.position.getLng());\n console.log('当前位置纬度:' + result.position.getLat());\n } else {\n // 定位失败\n console.log('定位失败:' + result.message);\n }\n });\n})\n }\n searchByAddress(){\n let panelEl = this.panel.nativeElement\n this.AMap.plugin([\"AMap.PlaceSearch\"], () => {\n //构造地点查询类\n let placeSearch = new this.AMap.PlaceSearch({\n pageSize: 3, // 单页显示结果条数\n pageIndex: 1, // 页码\n // city: \"010\", // 兴趣点城市\n // citylimit: true, //是否强制限制在设置的城市内搜索\n map: this.map, // 展现结果的地图实例\n panel: panelEl, // 结果列表将在此容器中进行展示。\n autoFitView: true // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围\n });\n // 预设地点选择后事件\n placeSearch.on('selectChanged', (event) => {\n // 在这里处理选择的点的具体值\n this.name = event.selected.data.name\n this.address = event.selected.data.address\n this.location = new Parse.GeoPoint({latitude:event.selected.data.location.lat,longitude:event.selected.data.location.lng})\n this.createCenterMarker();\n })\n // this.AMap.event.addListener(placeSearch, 'selectChanged', (event) => {\n // // 在这里处理选择的点的具体值\n // console.log(event);\n // });\n \n // 关键字查询\n placeSearch.search(this.address);\n });\n }\n centerMarker:any\n createCenterMarker(){\n if(this.centerMarker) { // 避免多次创建\n return\n }\n this.centerMarker = new this.AMap.Marker({\n position: this.map.getCenter(), // Marker标记的初始位置为地图中心点\n offset: new this.AMap.Pixel(-15, -15), // 设置Marker标记的偏移量,使其在地图中心显示\n // content: '<div class=\"marker\"></div>', // 自定义Marker标记的样式,可以是一个HTML元素\n // map: this.map // 将Marker标记添加到地图上\n });\n this.map.add(this.centerMarker)\n this.map.on('dragging', () => { // 地图拖动中:自动更新中央标点位置\n this.centerMarker.setPosition(this.map.getCenter());\n });\n this.map.on('dragend', () => { // 拖动结束后:设置中央位置为经纬度\n let pos = this.centerMarker.getPosition()\n this.location = new Parse.GeoPoint({latitude:pos.lat,longitude:pos.lng})\n });\n }\n}\n","<!-- 未选点 -->\n<ion-button (click)=\"openModal()\" expand=\"block\">开始选点</ion-button>\n\n<!-- 已选点 -->\n\n<ion-modal [isOpen]=\"isModalOpen\" (willDismiss)=\"onWillDismiss($event)\">\n<ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"cancel()\">Cancel</ion-button>\n </ion-buttons>\n <ion-title>地图选点<ng-container *ngIf=\"location\">({{location.latitude}},{{location.longitude}})</ng-container></ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"confirm()\" [strong]=\"true\">Confirm</ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\" style=\"height:100%\">\n <!-- 详细地址 -->\n <ion-item>\n <ion-input\n label=\"请输入详细地址\"\n labelPlacement=\"stacked\"\n type=\"text\"\n placeholder=\"精确到门牌号\"\n [(ngModel)]=\"address\"\n ></ion-input>\n <ion-button slot=\"end\" (click)=\"searchByAddress()\">搜索</ion-button>\n </ion-item>\n \n <!-- 地图选点 -->\n <div #container class=\"container\"></div>\n <div #panel class=\"panel\"></div>\n\n </ion-content>\n</ng-template>\n</ion-modal>\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { CompPoiPickerComponent } from './comp-poi-picker.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\n\n\n@NgModule({\n declarations: [CompPoiPickerComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n IonicModule.forRoot({mode:\"ios\"})\n ],\n exports:[\n CompPoiPickerComponent\n ]\n})\nexport class CompPoiPickerModule { }\n","import { Component } from '@angular/core';\nimport Parse from \"parse\";\nimport * as AMapLoader from \"@amap/amap-jsapi-loader\"\n(window as any)._AMapSecurityConfig = {\n securityJsCode:'32aa3f4ab0fa0061de03edd4eafdd50a',\n}\n\n@Component({\n selector: 'app-page-plan-route',\n templateUrl: './page-plan-route.component.html',\n styleUrls: ['./page-plan-route.component.scss']\n})\nexport class PagePlanRouteComponent {\n AMap:any\n map: any // AMap.Map\n placeList:Array<any> = [\n ]\n currentTab:string = \"place\"\n constructor(){\n this.addNewPlace()\n this.addNewPlace()\n this.currentTab = \"plan\"\n }\n addNewPlace(){\n if(this.placeList?.length>=1){\n this.placeList.push({\n name:\"秋水广场\",\n address:\"南昌市秋水广场\",\n location:new Parse.GeoPoint({latitude:28.682634,longitude:115.86273})\n })\n }else{\n this.placeList.push({\n name:\"八一广场\",\n address:\"南昌市八一广场\",\n location:new Parse.GeoPoint({latitude:28.673856,longitude:115.904477})\n })\n }\n\n }\n ngAfterViewInit(): void {\n }\n async initMap(){\n await this.createMap()\n this.goAndMarkPlace(this.placeList[0])\n }\n async createMap(){\n this.AMap = await AMapLoader.load({\n key: \"473b52010df7d3a32db0a2f5db245c8e\", // 申请好的Web端开发者Key,首次调用 load 时必填\n version: \"2.0\", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15\n })\n this.map = new this.AMap.Map('container-plan');\n }\n \n goAndMarkPlace(place:any){\n this.map.setCenter([place.location.latitude,place.location.longitude])\n this.map.setZoom(18)\n if(place.marker) return\n place.marker = new this.AMap.Marker({\n position:[place.location.latitude,place.location.longitude]\n })\n this.map.add(place.marker);\n }\n clearMark(place:any){\n place?.marker?.remove()\n }\n /**\n * 路线规划 地点1 => 地点2\n */\n planRoute(p1,p2){\n let transfer;\n this.map.plugin([\"AMap.Transfer\"], () => { //加载公交换乘插件\n let transOptions = {\n map: this.map,\n city: '南昌市',\n panel: 'panel',\n // cityd:'经开区',\n policy: this.AMap.TransferPolicy.LEAST_TIME\n };\n //构造公交换乘类\n transfer = new this.AMap.Transfer(transOptions);\n //根据起、终点坐标查询公交换乘路线\n let p1pos = new this.AMap.LngLat(p1.location.longitude, p1.location.latitude)\n let p2pos = new this.AMap.LngLat(p2.location.longitude, p2.location.latitude)\n transfer.search(p1pos, p2pos, (status, result) => {\n // result即是对应的公交路线数据信息,相关数据结构文档请参考 https://lbs.amap.com/api/javascript-api/reference/route-search#m_TransferResult\n if (status === 'complete') {\n console.log('绘制公交路线完成:')\n console.log(result)\n } else {\n console.error('公交路线数据查询失败' + result)\n }\n });\n });\n\n\n }\n async createPlan(){\n await this.initMap();\n this.planRoute(this.placeList[0],this.placeList[1]);\n }\n}\n","<ion-segment value=\"place\">\n <ion-segment-button (click)=\"currentTab='place'\" value=\"place\">\n <ion-label>景点选择</ion-label>\n </ion-segment-button>\n <ion-segment-button (click)=\"currentTab='plan'\" value=\"plan\">\n <ion-label>路线规划</ion-label>\n </ion-segment-button>\n </ion-segment>\n \n\n<ng-container *ngIf=\"currentTab=='place'\">\n <h1>选择旅游计划景点</h1>\n\n <ng-container *ngFor=\"let place of placeList\">\n <ion-card>\n <h2>{{place?.name}}</h2>\n <span *ngIf=\"place.address\">详细地址:{{place.address}}</span>\n <span *ngIf=\"place.location\">地图坐标:{{place.location.latitude}},{{place.location.longitude}}</span>\n <fm-map-poi-picker [(name)]=\"place.name\" [(address)]=\"place.address\" [(location)]=\"place.location\"></fm-map-poi-picker>\n </ion-card>\n </ng-container>\n <ion-button (click)=\"addNewPlace()\" expand=\"block\">添加新景点</ion-button>\n</ng-container>\n\n<ng-container *ngIf=\"currentTab=='plan'\">\n <ion-button (click)=\"createPlan()\" expand=\"block\">创建规划路线</ion-button>\n\n <div id=\"container-plan\"></div>\n <div id=\"panel\"></div>\n</ng-container>\n\n","import { AfterViewInit, Component } from '@angular/core';\nimport * as AMapLoader from \"@amap/amap-jsapi-loader\";\ndeclare const Loca:any;\n(window as any)._AMapSecurityConfig = {\n securityJsCode:'32aa3f4ab0fa0061de03edd4eafdd50a',\n}\n@Component({\n selector: 'app-page-loca-scatter',\n templateUrl: './page-loca-scatter.component.html',\n styleUrls: ['./page-loca-scatter.component.scss']\n})\nexport class PageLocaScatterComponent implements AfterViewInit{\n AMap:any\n map: any // AMap.Map\n ngAfterViewInit(): void {\n this.initMap();\n }\n async initMap(){\n await this.createMap()\n await this.createLoca()\n }\n async createLoca(){\n let loca = (window as any).loca = new Loca.Container({\n map:this.map,\n });\n\n // 蓝色普通点\n let geo = new Loca.GeoJSONSource({\n url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road.json',\n });\n let scatter = new Loca.ScatterLayer({\n zIndex: 111,\n opacity: 1,\n visible: true,\n zooms: [2, 22],\n });\n scatter.setSource(geo);\n scatter.setStyle({\n color: 'rgba(43,156,75,1)',\n unit: 'meter',\n size: [150, 150],\n borderWidth: 0,\n });\n loca.add(scatter);\n\n // 红色呼吸点\n let geoLevelF = new Loca.GeoJSONSource({\n // data: [],\n url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road_F.json',\n });\n let breathRed = new Loca.ScatterLayer({\n loca,\n zIndex: 113,\n opacity: 1,\n visible: true,\n zooms: [2, 22],\n });\n breathRed.setSource(geoLevelF);\n breathRed.setStyle({\n unit: 'meter',\n size: [2600, 2600],\n borderWidth: 0,\n texture: 'https://a.amap.com/Loca/static/loca-v2/demos/images/breath_red.png',\n duration: 500,\n animate: true,\n });\n\n // 黄色呼吸点\n let geoLevelE = new Loca.GeoJSONSource({\n // data: [],\n url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road_E.json',\n });\n let breathYellow = new Loca.ScatterLayer({\n loca,\n zIndex: 112,\n opacity: 1,\n visible: true,\n zooms: [2, 22],\n });\n breathYellow.setSource(geoLevelE);\n breathYellow.setStyle({\n unit: 'meter',\n size: [1000, 1000],\n borderWidth: 0,\n texture: 'https://a.amap.com/Loca/static/loca-v2/demos/images/breath_yellow.png',\n duration: 1000,\n animate: true,\n });\n\n // 启动渲染动画\n loca.animate.start();\n\n let dat = new Loca.Dat();\n dat.addLayer(scatter, ' 贴地');\n dat.addLayer(breathRed, '红色');\n dat.addLayer(breathYellow, '黄色');\n }\n async createMap(){\n this.AMap = await AMapLoader.load({\n key: \"473b52010df7d3a32db0a2f5db245c8e\", // 申请好的Web端开发者Key,首次调用 load 时必填\n version: \"2.0\", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15\n \"Loca\":{ // 是否加载 Loca, 缺省不加载\n \"version\": '2.0.0' // Loca 版本,缺省 1.3.2\n },\n })\n\n this.map = new this.AMap.Map('container',{\n zoom: 11.7,\n center: [113.97199630737305, 22.5807295363949],\n pitch: 40,\n showLabel: false,\n mapStyle: 'amap://styles/dark',\n viewMode: '3D',\n });\n }\n}\n","<div id=\"container\"></div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule, Routes } from '@angular/router';\n// import { EditAmapPositionPickerModule } from './edit-amap-position-picker';\nimport { PageMapStartComponent } from './page-map.start/page-map.start.component';\nimport { CompPoiPickerModule } from './comp-poi-picker/comp-poi-picker.module';\nimport { PagePlanRouteComponent } from './page-plan-route/page-plan-route.component';\nimport { IonicModule } from '@ionic/angular';\nimport { PageLocaScatterComponent } from './page-loca-scatter/page-loca-scatter.component';\n\nconst routes: Routes = [\n {\n path:\"start\", component:PageMapStartComponent\n },\n {\n path:\"plan/route\", component:PagePlanRouteComponent\n },\n {\n path:\"loca/scatter\", component:PageLocaScatterComponent\n }\n];\n@NgModule({\n declarations: [\n PageMapStartComponent,\n PagePlanRouteComponent,\n PageLocaScatterComponent\n ],\n imports: [\n CommonModule,\n // EditAmapPositionPickerModule,\n RouterModule.forChild(routes),\n // \n IonicModule.forRoot({mode:\"ios\"}),\n // 引用自定义独立组件模块\n CompPoiPickerModule\n ],\n exports:[\n CompPoiPickerModule\n ]\n})\nexport class FmodeMapModule { }\n","import { Injectable } from '@angular/core';\nimport ObsClient from \"esdk-obs-browserjs\"\nimport Parse from \"parse\";\n\n/**\n * HwobsDir 华为OBS目录接口\n * @public\n */\nexport interface HwobsDir{\n Prefix:string // \"storage/2023/\"\n\n}\n\n/**\n * HwobsDir 华为OBS文件接口\n * @public\n */\nexport interface HwobsFile{\n ETag: \"\\\"f0ec968fe51ab48348307e06476122eb\\\"\"\n Key:string //\"storage/3mkf41033623275.png\"\n LastModified:string //\"2023-11-08T12:03:13.008Z\"\n Owner:object // {ID: '09971a1979800fb60fbbc00ada51f7e0'}\n Size:string //\"25839\"\n StorageClass:string //\"STANDARD\"\n}\n\n/**\n * HwobsService 华为OBS文件服务\n * @public\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HwobsService {\n obsClient:ObsClient\n bucketName:string\n host:string\n constructor() {\n this.host = \"https://web3-test.obs.cn-south-1.myhuaweicloud.com/\"\n this.bucketName = \"web3-test\"\n this.obsClient = new ObsClient({\n access_key_id: '6UIET20WHUI5TLXWOVNA', \n secret_access_key: 'YaoY8Kj3TeGZHEcBzplTMZiPGNL13Y3frEavC1kF',\n // 这里以华南-广州为例,其他地区请按实际情况填写\n server: 'https://obs.cn-south-1.myhuaweicloud.com'\n });\n }\n\n /**\n * 目录及检索相关函数\n */\n listDir(prefix):Promise<{\n dirs:Array<HwobsDir>,\n files:Array<HwobsFile>\n }>{\n return new Promise((resolve,reject)=>{\n this.obsClient.listObjects({\n Bucket : this.bucketName,\n Prefix : prefix,\n Delimiter: '/'\n }, (err, result) => {\n if(err){ \n console.error('Error-->' + err); \n reject(err) \n }else{ \n console.log('Status-->' + result.CommonMsg.Status);\n console.log(result)\n if(result.CommonMsg.Status < 300 && result.InterfaceResult){\n for(var j in result.InterfaceResult.Contents){\n console.log('Contents[' + j + ']:');\n console.log('Key-->' + result.InterfaceResult.Contents[j]['Key']);\n console.log('Owner[ID]-->' + result.InterfaceResult.Contents[j]['Owner']['ID']);\n }\n } \n let dirs:HwobsDir[] = result.InterfaceResult.CommonPrefixes\n let files:HwobsFile[] = result.InterfaceResult.Contents\n resolve({dirs:dirs,files:files}) \n }\n });\n })\n\n }\n\n /**\n * 文件上传相关函数\n * @param file \n * @param key \n * @returns \n */\n async uploadFile(file:File,key:string):Promise<Parse.Object>{\n // key 文件上传后的全部路径\n // /storage/<公司账套>/<应用名称>/年月日/<文件名>.<文件后缀>\n // /storage/web2023/<学号>/年月日/<文件名>.<文件后缀>\n let attach = await this.checkFileExists(file);\n if(attach?.id) return attach\n return new Promise((resolve,reject)=>{\n this.obsClient.putObject({\n Bucket : this.bucketName,\n Key : key,\n SourceFile : file\n }, async (err, result) => {\n if(err){\n console.error('Error-->' + err);\n reject(err)\n }else{\n console.log('Status-->' + result.CommonMsg.Status);\n let attach = await this.saveAttachment(file,key)\n resolve(attach)\n }\n });\n })\n }\n Attachment = Parse.Object.extend(\"Attachment\")\n\n async checkFileExists(file):Promise<Parse.Object>{\n let hash = await this.getFileHash(file)\n // 文件HASH查重,避免重复上传\n let attach:Parse.Object\n let query = new Parse.Query(\"Attachment\")\n query.equalTo(\"hash\",hash);\n query.equalTo(\"size\",file.size);\n let exists:any = await query.first();\n if(!exists?.id) exists = new this.Attachment()\n attach = exists\n return attach\n }\n async saveAttachment(file:File,key:string){\n let hash = await this.getFileHash(file)\n let attach = await this.checkFileExists(file)\n attach.set(\"name\",file.name)\n attach.set(\"size\",file.size)\n attach.set(\"mime\",file.type)\n attach.set(\"url\",this.host + key)\n attach.set(\"hash\",hash)\n attach = await attach.save()\n return attach\n }\n\n async getFileHash(file:File) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = async (event:any) => {\n const buffer = event.target.result;\n const hashBuffer = await crypto.subtle.digest('SHA-256', buffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join('');\n resolve(hashHex);\n };\n reader.onerror = (event:any) => {\n reject(event.target.error);\n };\n reader.readAsArrayBuffer(file);\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\nimport { HwobsDir, HwobsFile, HwobsService } from '../service-hwobs/hwobs.service';\n\n@Component({\n standalone:true,\n imports:[\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n IonicModule\n ],\n selector: 'fm-storage-hwobs-manager',\n templateUrl: './hwobs-manager.component.html',\n styleUrls: ['./hwobs-manager.component.scss']\n})\nexport class HwobsManagerComponent {\n dirs: HwobsDir[] = [];\n files: HwobsFile[] = [];\n prefix: string = \"storage/\"\n openFile(file: any) {\n console.log('Opening file:', file);\n // Add your logic to open the file details here\n }\n openDir(dir?:HwobsDir|null,type:string=\"pre\"){\n if(dir){\n this.prefix = dir.Prefix\n this.listDir(dir.Prefix)\n }else{\n if(type==\"pre\"){\n let list = this.prefix.split(\"/\")\n if(list.length>1){\n let prefix = list.splice(0,list.length-1).join(\"/\")\n console.log(prefix)\n this.prefix = prefix\n this.listDir(prefix)\n }\n }\n }\n }\n showName(name:string){\n return name.replaceAll(this.prefix,\"\")\n }\n constructor(\n private hwobs:HwobsService\n ){\n this.listDir(this.prefix)\n }\n\n async listDir(prefix:string){\n let {dirs,files} = await this.hwobs.listDir(prefix)\n this.dirs = dirs\n this.files = files\n }\n}\n","<ion-header>\n <ion-toolbar>\n <ion-title>\n File Manager\n </ion-title>\n </ion-toolbar>\n </ion-header>\n \n <ion-content>\n <ion-list>\n <ion-item (click)=\"openDir(null,'pre')\">\n <ion-icon [name]=\"'folder'\" slot=\"start\"></ion-icon>\n <ion-label>../</ion-label>\n </ion-item>\n <ion-item *ngFor=\"let item of dirs\" (click)=\"openDir(item)\">\n <ion-icon [name]=\"'folder'\" slot=\"start\"></ion-icon>\n <ion-label>{{ showName(item.Prefix) }}</ion-label>\n </ion-item>\n <ion-item *ngFor=\"let item of files\" (click)=\"openFile(item)\">\n <ion-icon [name]=\"'document'\" slot=\"start\"></ion-icon>\n <ion-label>{{ showName(item.Key) }}</ion-label>\n </ion-item>\n </ion-list>\n </ion-content>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { HwobsManagerComponent } from './comp-hwobs-manager/hwobs-manager.component';\nimport { IonicModule } from '@ionic/angular';\nimport { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';\nimport { NovaUploadService } from './service-upload';\n\n@NgModule({\n declarations: [\n ],\n imports: [\n CommonModule,\n IonicModule.forRoot({mode:\"ios\"}),\n // 独立组件\n HwobsManagerComponent,\n ],\n exports:[\n HwobsManagerComponent\n ],\n providers:[\n Diagnostic,\n NovaUploadService\n ]\n})\nexport class FmodeStorgeModule { }\n","/*\n * Public API Surface of fmode-ng\n */\n\nexport * from './lib/aigc';\nexport * from './lib/map';\nexport * from './lib/storage';\nexport * from './lib/platform';\n\nexport * from \"./lib/nova-cloud\"","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Parse","i1","i2.NovaCloudService","i3","i4.CrossService","i2","i3.NovaUploadService","i1.ImagineService","i2.ChatService","i3.FmodeVoiceService","i4.NovaCloudService","i5.ChatService","i6","i1.FmodeVoiceService","i4.ChatService","i5.NovaCloudService","i3.CompPoiPickerComponent","i1.HwobsService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fmode-ng.mjs","sources":["../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/chat-class.ts","../../../projects/fmode-ng/src/lib/nova-cloud/nova-cloud.service.ts","../../../projects/fmode-ng/src/lib/platform/cross.service.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/chat.service.ts","../../../projects/fmode-ng/src/lib/storage/service-upload/util-file-md5.ts","../../../projects/fmode-ng/src/lib/storage/service-upload/nova-upload.service.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-imagine/imagine.service.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/fmai.service.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/mask-list.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/utilnow.pipe.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/pipes/chat-content.pipe.ts","../../../projects/fmode-ng/src/lib/aigc/service-fmai/service-chat/pipes/hidexml.pipe.ts","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/plugins/md-mathjax/index.ts","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/markdown-parse.ts","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/markdown-preview.component.ts","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/markdown-preview.component.html","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/markdown-preview.module.ts","../../../projects/fmode-ng/src/lib/aigc/comp-markdown-preview/clipboard.service.ts","../../../projects/fmode-ng/src/lib/aigc/voice/lib/pcm2wav.ts","../../../projects/fmode-ng/src/lib/aigc/voice/lib/resample.ts","../../../projects/fmode-ng/src/lib/aigc/voice/class-asr.ts","../../../projects/fmode-ng/src/lib/aigc/voice/fmode-voice.service.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-particle/role-points.class.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-particle/comp-avatar-particle.component.html","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-role-image/comp-avatar-role-image.component.html","../../../projects/fmode-ng/src/lib/aigc/voice/tts/fmode-tts-class.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/modal-chat-voice-input/modal-chat-voice-input.component.html","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.ts","../../../projects/fmode-ng/src/lib/aigc/avatar/comp-avatar-talk/comp-avatar-talk.component.html","../../../projects/fmode-ng/src/lib/aigc/avatar/avatar.module.ts","../../../projects/fmode-ng/src/lib/map/page-map.start/page-map.start.component.ts","../../../projects/fmode-ng/src/lib/map/page-map.start/page-map.start.component.html","../../../projects/fmode-ng/src/lib/map/comp-poi-picker/comp-poi-picker.component.ts","../../../projects/fmode-ng/src/lib/map/comp-poi-picker/comp-poi-picker.component.html","../../../projects/fmode-ng/src/lib/map/comp-poi-picker/comp-poi-picker.module.ts","../../../projects/fmode-ng/src/lib/map/page-plan-route/page-plan-route.component.ts","../../../projects/fmode-ng/src/lib/map/page-plan-route/page-plan-route.component.html","../../../projects/fmode-ng/src/lib/map/page-loca-scatter/page-loca-scatter.component.ts","../../../projects/fmode-ng/src/lib/map/page-loca-scatter/page-loca-scatter.component.html","../../../projects/fmode-ng/src/lib/map/map.module.ts","../../../projects/fmode-ng/src/lib/storage/service-hwobs/hwobs.service.ts","../../../projects/fmode-ng/src/lib/storage/comp-hwobs-manager/hwobs-manager.component.ts","../../../projects/fmode-ng/src/lib/storage/comp-hwobs-manager/hwobs-manager.component.html","../../../projects/fmode-ng/src/lib/storage/storage.module.ts","../../../projects/fmode-ng/src/public-api.ts","../../../projects/fmode-ng/src/fmode-ng.ts"],"sourcesContent":["import { bufferTime, concatMap, Observable, Observer,delay, finalize } from \"rxjs\"\n// var bufferTime:any, concatMap:any, Observable:any, Observer:any,delay:any, finalize:any,Observer:any\nimport Parse from \"parse\";\n// var Parse:any = {}\n// const API_BASE:string = \"http://127.0.0.1:7337/api/apig/aigc/gpt\"\nconst API_BASE:string = \"https://server.fmode.cn/api/apig/aigc/gpt\"\n// const API_BASE:string = \"https://test.fmode.cn/api/apig/aigc/gpt\"\n\nexport function getMessageContentText(content:any|string|Array<ChatImageContentItem>){\n let text = \"\"\n if(typeof content == \"string\") text = content\n if(typeof content == \"object\") text = content?.find(item=>item?.text)?.text || \"\"\n return text\n}\nexport function getMessageImageUrl(content:any|string|Array<ChatImageContentItem>){\n if(typeof content == \"object\") return content?.find(item=>item?.image_url)?.image_url?.url || \"\"\n return null\n }\n\nexport interface ChatImageContentItem{type:string,text?:string,image_url?:{url:string}}\n\nexport interface FmodeChatMessage{\n role:string // user 用户 assistant AI system 系统\n content:string|Array<ChatImageContentItem> // 消息内容\n json?:any\n hidden?:boolean\n createdAt?:Date // 创建时间\n complete?:boolean // Stream流式加载完成\n /**AI回复消息字段 */\n cid?:string // AI补全内容,包含cid,指向数据库 chatcmpl-uDfGFOwIHyi4vM9LkB6kVxcg4i1DZ\n}\n\n/**\n * FmodeChat 聊天对话类\n * @public\n */\nexport class FmodeChat{\n\n title:string\n sessionId:string\n ChatSession = Parse.Object.extend(\"ChatSession\")\n chatSession:Parse.Object\n role:any\n messageList:FmodeChatMessage[] = [{role:\"system\",content:\"系统提示:AI仅供参考\"}]\n latestAIResponse:string|undefined = ``\n chatServ:any\n public userInput:string = ``;\n public userImage:string = ``;\n\n /**\n * 是否开启语音对话模式\n * @desc\n * 开启ssml system提示词\n * 开启回答文本除xml显示模式\n */\n isTalkMode:boolean = false;\n SSMLRoleVoice:string = \"zh-CN-XiaoxiaoNeural\";\n\n\n constructor(sessionId:string,role?:Parse.Object,chatSession?:Parse.Object,chatServ?:any){\n this.chatServ = chatServ\n this.role = role\n this.sessionId = sessionId\n if(chatSession?.id){\n this.chatSession = chatSession;\n this.messageList = this.chatSession.get(\"messageList\");\n this.sessionId = chatSession?.id;\n }\n }\n /**\n * 会话Avatar控制\n */\n playAnimation = (animName:string)=>{\n console.log(animName)\n return\n }\n\n\n /**\n * 对话模型提示词\n */\n loadTalkSystemPrompt(role:Parse.Object){\n if(!role) return\n // 加载声音模型:默认为晓晓\n if(role?.get('gender')=='男'){\n this.SSMLRoleVoice = \"zh-CN-YunyeNeural\"\n }else{\n this.SSMLRoleVoice = \"zh-CN-XiaoxiaoNeural\"\n }\n this.SSMLRoleVoice = role?.get(\"voiceConfig\")?.voice || this.SSMLRoleVoice \n let SSMLPromptTemplate = `您的语言简短且口语化`+\n `,每句话都要用mstts:express-as标签,style属性情绪表达(advertisement_upbeat,affectionate,angry,assistant,calm,chat,cheerful,customerservice,depressed,disgruntled,documentary-narration,embarrassed,empathetic,envious,excited,fearful,friendly,gentle,hopeful,lyrical,narration-professional,narration-relaxed,newscast,newscast-casual,newscast-formal,poetry-reading,sad,serious,shouting,sports_commentary,sports_commentary_excited,whispering,terrified,unfriendly,)`+\n `,styledegree属性语气强度(默认1,从0.01最轻柔到2最强调),并适当用break增加自然停顿效果。`+\n `并编写成带<speak xmlns=\"http://www.w3.org/2001/10/synthesis\" xmlns:mstts=\"http://www.w3.org/2001/mstts\" xmlns:emo=\"http://www.w3.org/2009/10/emotionml\" version=\"1.0\" xml:lang=\"zh-CN\"><voice name=\"${this.SSMLRoleVoice }\">标签的SSML返回。`\n\n let prompt = role.get(\"prompt\") || \"请你扮演脑控科技的人工智能专家。\"\n prompt += SSMLPromptTemplate;\n let promptMsg:FmodeChatMessage = {role:\"user\",content:prompt,hidden:true}\n\n // 查重\n let content = this.messageList?.map(item=>item?.content).join()\n if(content.indexOf(prompt)>-1){\n // 提示词已经存在\n return\n }\n // 补全提示词\n let systemIndex = this.messageList?.findIndex(item=>item?.role==\"system\");\n let insertIndex = systemIndex+1\n this.messageList.splice(insertIndex,0,promptMsg)\n return \n }\n /**\n * 角色提示词\n * @returns \n */\n loadRolePrompt(){\n // 角色提示\n let prompt = this.role?.get(\"prompt\")\n let promptMsg:FmodeChatMessage = {role:\"user\",content:prompt,hidden:true}\n if(!prompt) return // 无提示词无需添加\n // 内容检查\n let content = this.messageList?.map(item=>item?.content).join()\n if(content.indexOf(prompt)>-1){\n // 提示词已经存在\n return\n }\n // 补全提示词\n let systemIndex = this.messageList?.findIndex(item=>item?.role==\"system\");\n let insertIndex = systemIndex+1\n this.messageList.splice(insertIndex,0,promptMsg)\n console.log(this.messageList)\n }\n /**\n * 发送消息\n * @param message \n * @param imageUrl \n */\n sendMessage(message:string=\"FmodeAiTest测试问题\",imageUrl?:string,onComplete?:Function){\n // 为消息列表补全提示词\n this.loadTalkSystemPrompt(this.role);\n this.loadRolePrompt();\n // 用户输入消息,添加到历史消息清单中\n if(!imageUrl){ // 纯文本\n // console.log(\"纯文本\")\n this.messageList.push({\n role:\"user\",\n content:message,\n complete:true,\n createdAt:new Date()\n })\n }else{ // 带图片\n this.messageList.push({\n \"role\": \"user\",\n \"content\": [\n {\n \"type\": \"image_url\",\n \"image_url\": {\"url\":imageUrl},\n },\n {\n \"type\": \"text\", \n \"text\": message\n },\n ],\n complete:true,\n createdAt:new Date()\n })\n }\n // 创建并发起一条新的消息补全\n // console.log(\"send\",this.messageList)\n let completion = new FmodeChatCompletion(this.fixMessageList(this.messageList),{\n model:this.chatServ?.currentModel?.get(\"code\") || \"fmode-3.6-16k\"\n })\n console.log(this.chatServ?.currentModel?.toJSON())\n // 持续更新事件推送的消息体内容至消息列表\n let isDirect = false\n if(this.isTalkMode){\n isDirect = true\n }\n let send$ = completion.sendCompletion({isDirect:isDirect,onComplete:onComplete||null}).pipe(finalize(()=>{ // 管道finalize替代了旧版的(complete)=>{}\n this.messageList[completion.indexOfList].complete = true\n })).subscribe(message=>{\n this.messageList[completion.indexOfList] = message;\n if(typeof message?.content == \"string\"){\n this.latestAIResponse = message?.content\n }else{\n this.latestAIResponse = message?.content?.[0]?.text || ``\n }\n \n let savedList = this.chatSession?.get(\"messageList\")?.length;\n // 生命周期:会话创建后,有新消息时,创建保存会话\n if(this.messageList?.length > savedList){\n console.log(\"cycle新会话\")\n this.saveChatSession();\n }\n\n if(message?.complete){\n // 生命周期:消息发送完成后,保存聊天记录\n this.saveChatSession(); \n send$.unsubscribe();\n }\n // console.log(message)\n })\n }\n /**\n * 保存单次会话\n */\n async saveChatSession(){\n if(this.sessionId == \"new\"){\n this.chatSession = new this.ChatSession()\n }\n\n this.chatSession.set(\"title\",this.genTitle())\n this.chatSession.set(\"role\",this.role?.toPointer())\n this.chatSession.set(\"messageList\",this.messageList)\n this.chatSession.set(\"user\",Parse.User.current()?.toPointer())\n this.chatSession = await this.chatSession.save();\n this.sessionId = this.chatSession?.id\n if(this.sessionId){ \n // 修改URL地址为sessionId,方便分享或切换\n let newHref = `${window.location.origin}/chat/pro/chat/${this.sessionId}`\n newHref = this.getInviteUrl(newHref)\n window.history.replaceState(null, null, newHref);\n // 修改最新条chatList数据\n let newChat = {\n sid:this.chatSession?.id,\n rid:this.role?.id,\n name:this.role?.get('name'),\n message:this.chatSession?.get('messageList')?.[this.chatSession?.get('messageList')?.length-1]?.content?.slice(0,20),\n latest:this.chatSession?.createdAt\n }\n if(!this.chatServ?.chatList?.length) this.chatServ.chatList = []\n let index = this.chatServ?.chatList?.find(item=>item?.sid==newChat?.sid)\n if(index>-1){\n this.chatServ.chatList[index] = newChat;\n } else{\n this.chatServ?.chatList.unshift(newChat)\n }\n\n }\n }\n getInviteUrl(url){\n // 判断是否有参数\n let connectChar = \"?\"\n if(url?.indexOf(\"?\")>-1){\n connectChar = \"&\"\n }else{\n connectChar = \"?\"\n }\n // 附加invite参数\n let id = Parse.User?.current()?.id\n if(url?.indexOf(\"invite=\"+id)==-1){\n if(!id) return url\n url += connectChar+ 'invite=' + id\n }\n return url\n }\n // 根据聊天内容及问题,生成标题\n genTitle(){\n if(this.title) return this.title\n let content:string|Array<ChatImageContentItem> = this.messageList.find(item=>item.role==\"user\")?.content\n if(typeof content==\"string\"){ // 截图文本内容文字部分\n this.title = content?.slice(0,15) || \"\"\n }\n if(typeof content==\"object\"){ // 截图复合内容文字部分\n this.title = content?.find(item=>item?.text)?.text || \"\"\n }\n return this.title\n }\n fixMessageList(messages:FmodeChatMessage[]){\n return messages.map(msg=>{return {role:msg.role,content:msg.content}})\n }\n\n nowStr(){\n let now = new Date();\n return `${now.getFullYear()}/${now.getMonth()+1}/${now.getDate()} ${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}`\n }\n \n}\n\n/**\n * FmodeChatCompletion 文本补全类\n * @public\n */\nexport class FmodeChatCompletion{\n indexOfList:number\n model:string\n messages:FmodeChatMessage[] // 补全前提示词列表\n content:string = \"\" // 本次接收消息结果\n contentBuffer:string[] = []\n contentPusher:any\n isCompleted:boolean = false;\n constructor(messages:FmodeChatMessage[],options?:{\n model?:string\n }){\n this.indexOfList = Number(messages.length)\n this.messages = messages\n this.model = options?.model || \"fmode-3.6-16k\"\n }\n /**\n * @param options\n * @param options.isDirect 是否不等待逐字获取,直接完成内容推送\n * @param options.intTime 是否不等待逐字获取,直接完成内容推送\n * @returns \n */\n sendCompletion(options:{\n isDirect?:boolean,\n intTime?:number,\n onComplete?:Function\n }={}):Observable<FmodeChatMessage>{\n options.intTime = options?.intTime || 50 // 按毫秒逐字推送\n options.isDirect = options?.isDirect || false\n if(options?.isDirect) options.intTime = 1\n\n let that = this;\n let opts = {\n \"messages\":this.messages,\n \"stream\":true,\n \"model\":this.model,\n \"temperature\":0.5,\n \"presence_penalty\":0,\n \"frequency_penalty\":0\n }\n console.log(opts)\n let $messageReceiver = new Observable((observer: Observer<FmodeChatMessage>) => {\n let subscription = RequestFmodeChatApi(\"/v1/chat/completions\", opts)\n .subscribe(data => {\n // Handle each chunk of data\n /** Chunk文本数据格式如下:\n 正常消息:\n 'data: {\"id\":\"chatcmpl-y2PLKqPDnwAFJIj2L5aqdH5TWK9Yv\",\"object\":\"chat.completion.chunk\",\"created\":1696770162,\"model\":\"gpt-3.5-turbo-0613\",\"choices\":[{\"index\":0,\"delta\":{\"content\":\"本提示词仅用于测试。\"},\"finish_reason\":null}]}',\n 终止原因:\n 'data: {\"id\":\"chatcmpl-y2PLKqPDnwAFJIj2L5aqdH5TWK9Yv\",\"object\":\"chat.completion.chunk\",\"created\":1696770162,\"model\":\"gpt-3.5-turbo-0613\",\"choices\":[{\"index\":0,\"delta\":{},\"finish_reason\":\"stop\"}]}',\n 结束消息:\n 'data: [DONE]'\n */\n let chunk = String(data);\n // Check if the completion message is received\n console.log(chunk)\n if (chunk == 'data: [DONE]') { \n this.isCompleted = true; // 标记完成 => 等待interval推送\n console.log(options?.isDirect,this.isCompleted)\n if(options?.isDirect && this.isCompleted){\n observer.next({\n role:\"assistant\",\n // cid:chunkjson?.['id'],\n content:this.content,\n complete:true, // 推送完成\n createdAt:new Date()\n })\n subscription.unsubscribe(); // Unsubscribe when done\n options?.onComplete&&options.onComplete({\n role:\"assistant\",\n // cid:chunkjson?.['id'],\n content:this.content,\n complete:true, // 推送完成\n createdAt:new Date()\n })\n observer.complete();\n }\n }\n // console.log(chunk)\n if(chunk.indexOf(\"data:\\ {\")>-1){\n let chunkjson = chunkToJson(chunk)\n // console.log(chunk)\n // console.log(chunkjson?.choices?.[0]?.delta)\n let words = chunkjson?.choices?.[0]?.delta?.content || \"\"\n this.contentBuffer.push(words);\n\n // 消息返回模式:定时器推送,模拟逐字输出\n if(options?.isDirect){\n this.content += (words || \"\");\n \n // 默认累加消息结果\n if(!this.isCompleted){\n observer.next({\n role:\"assistant\",\n cid:chunkjson?.['id'],\n content:this.content,\n createdAt:new Date()\n })\n }\n }\n if(!options?.isDirect&&!this.contentPusher){\n this.contentPusher = setInterval(()=>{\n if(this.isCompleted && this.contentBuffer?.length==0){ // 推送完毕,清除计时器\n observer.next({\n role:\"assistant\",\n cid:chunkjson?.['id'],\n content:this.content,\n complete:true, // 推送完成\n createdAt:new Date()\n })\n subscription.unsubscribe(); // Unsubscribe when done\n clearInterval(this.contentPusher)\n observer.complete();\n }\n if(this.contentBuffer?.length>=0){\n if(this.contentBuffer?.length>0){\n this.content += this.contentBuffer.shift()\n }\n observer.next({\n role:\"assistant\",\n cid:chunkjson?.['id'],\n content:this.content,\n createdAt:new Date()\n })\n }\n },options?.intTime)\n }\n // console.log(this.content)\n \n }\n\n });\n })\n return $messageReceiver.pipe(\n bufferTime(100), // 每100ms收集消息\n concatMap(messages => messages), // 使用 concatMap 逐个发送消息\n delay(200) // 延迟200ms输出每条消息\n )\n }\n\n}\n\nfunction chunkToJson(chunk){\n let chunkjson:any\n try{\n chunkjson = JSON.parse(chunk.replaceAll(\"data:\\ \",\"\"));\n }catch(errdj){\n console.error(errdj)\n }\n return chunkjson || {}\n}\nfunction RequestFmodeChatApi(apipath, body, method = \"POST\") {\n return new Observable((observer: Observer<any>) => {\n let url = API_BASE + apipath;\n let API_TOKEN = Parse.User.current()?.getSessionToken() || localStorage.getItem(\"FMODE_AI_TOKEN\");\n // 通过body传递token参数,避免no-cors模式下Authoriztion头部无效\n let AUTH_TOKEN = `Bearer ${API_TOKEN}`\n body.token = AUTH_TOKEN;\n if(body) body = JSON.stringify(body)\n fetch(url, {\n \"headers\": {\n // \"Authorization\": AUTH_TOKEN,\n \"Content-Type\": \"text/plain\",\n \"Cache-Control\": \"no-cache\"\n },\n \"body\": body || null,\n \"method\": method,\n \"credentials\":\"omit\",\n \"mode\": \"cors\"\n }).then(response => {\n let isStream = true || response.headers?.get(\"Content-Type\")?.indexOf(\"text/event-stream\") > -1\n let remainingData = ``;\n\n function processData(data) {\n let combinedData = remainingData + data;\n let messages = combinedData.split('\\n');\n \n if(messages?.length>1){ // 至少分割2条消息时进行处理\n // 处理每个完整的消息\n for (let i = 0; i < messages.length - 1; i++) {\n let message = messages[i];\n observer.next(message)\n }\n\n // 保存最后一个不完整的消息\n remainingData = messages[messages.length - 1];\n }\n }\n\n if (isStream) {\n let greader = response.body?.getReader();\n const decoder = new TextDecoder();\n\n let rstream = new ReadableStream({\n start(controller) {\n function read() {\n greader.read().then(({ done, value }) => {\n if (done) {\n controller.close();\n observer.complete(); // Complete the observer when stream processing is done\n return;\n }\n controller.enqueue(value);\n read();\n });\n }\n\n read();\n }\n });\n\n let reader = rstream.getReader();\n\n function processStream({ done, value }) {\n if (done) {\n return;\n }\n\n let text = decoder.decode(value)\n processData(text) // Emit each chunk of data\n reader.read().then(processStream);\n }\n\n reader.read().then(processStream);\n }\n })\n .catch(error => observer.error(error)); // Handle any errors\n\n // Return the subscription logic\n return () => {\n // Clean up logic, if needed\n };\n });\n }\n \n function JsonToFormData(json) {\n const formData = new FormData();\n \n function appendFormData(data, path = '') {\n if (Array.isArray(data)) {\n data.forEach((value, index) => {\n appendFormData(value, `${path}[${index}]`);\n });\n } else if (typeof data === 'object' && data !== null) {\n Object.keys(data).forEach(key => {\n const newPath = path ? `${path}.${key}` : key;\n appendFormData(data[key], newPath);\n });\n } else {\n formData.append(path, data);\n }\n }\n \n appendFormData(json);\n \n return formData;\n }","import { Injectable } from '@angular/core';\nimport { HttpClient,HttpHeaders } from \"@angular/common/http\";\nimport Parse from \"parse\";\n@Injectable({\n providedIn: 'root'\n})\nexport class NovaCloudService {\n\n serverURL = \"https://server.fmode.cn/api\"\n // serverURL = \"http://127.0.0.1:7337/api\"\n constructor(\n private http:HttpClient,\n ) { \n localStorage.setItem(\"NOVA_APIG_SERVER\",'aHR0cHMlM0ElMkYlMkZzZXJ2ZXIuZm1vZGUuY24lMkZhcGklMkZhcGlnJTJG')\n }\n\n novaql(sql:string,params:Array<any>){\n let url = this.serverURL + '/novaql/select'\n let options:any = {sql:sql}\n if(options&¶ms?.length>0){\n options.params = JSON.stringify(params)\n }\n return new Promise((resolve,reject)=>{\n this.http.post(url,options,{\n headers:new HttpHeaders({\n \"Content-Type\":\"application/json\"\n }),\n withCredentials: false\n }).subscribe(result=>{\n if(result&&(result as any).code == 200){\n let data:any = (result as any).data;\n resolve(data)\n }\n },(err)=>{\n reject(err)\n })\n })\n }\n apig(url:string,body:any,method:string=\"post\"){\n localStorage.setItem(\"NOVA_APIG_SERVER\",'aHR0cHMlM0ElMkYlMkZzZXJ2ZXIuZm1vZGUuY24lMkZhcGklMkZhcGlnJTJG')\n let apigURL = localStorage.getItem(\"NOVA_APIG_SERVER\")\n apigURL = decodeURIComponent(atob(apigURL));\n url = apigURL + url\n console.log(url)\n let user = Parse.User.current();\n return new Promise((resolve,reject)=>{\n try {\n this.http.request(method,url,{\n body:body || null,\n headers:new HttpHeaders({\n \"Content-Type\":\"application/json\",\n \"Authorization\":`Bearer ${user?.getSessionToken()}`\n }),\n withCredentials: false\n }).subscribe(result=>{\n if(result&&(result as any).code == 200 || result&&(result as any).code == 1 || result&&(result as any).code == 0){\n let data:any = (result as any)?.data;\n resolve(data)\n }else{\n resolve(null)\n }\n },(err)=>{\n console.error(err.mess)\n reject(err)\n })\n } catch (error) {\n return console.error('请求出错')\n }\n })\n }\n apigTest(url:string,body:any,method:string=\"post\"){\n let apigURL = \"https://test.fmode.cn/api/apig/\"\n url = apigURL + url\n console.log(url)\n let user = Parse.User.current();\n body.token = `Bearer ${user?.getSessionToken()}`\n return new Promise((resolve,reject)=>{\n try {\n this.http.request(method,url,{\n body:body || null,\n headers:new HttpHeaders({\n \"Content-Type\":\"application/json\",\n // \"Authorization\":`Bearer ${user?.getSessionToken()}`\n }),\n withCredentials: false\n }).subscribe(result=>{\n if(result&&(result as any).code == 200 || result&&(result as any).code == 1 || result&&(result as any).code == 0){\n let data:any = (result as any)?.data;\n resolve(data)\n }else{\n resolve(null)\n }\n },(err)=>{\n console.error(err.mess)\n reject(err)\n })\n } catch (error) {\n return console.error('请求出错')\n }\n })\n }\n api(url:string,body:any):Promise<{code:number|string,data?:any,mess?:string}>{\n url = this.serverURL + url\n return new Promise((resolve,reject)=>{\n this.http.post(url,body,{\n headers:new HttpHeaders({\n \"Content-Type\":\"application/json\"\n }),\n withCredentials: false\n }).subscribe(result=>{\n if(result&&(result as any).code == 200 || result&&(result as any).code == 1){\n let data:any = (result as any).data;\n resolve(data)\n }else{\n resolve(null)\n }\n },(err)=>{\n reject(err)\n })\n })\n }\n searchParse(search?:string):any{\n search = search || location.search;\n let resultObj = {};\n if (search && search.length > 1) {\n search = search.substring(1);\n let items = search.split(\"&\");\n for (let index = 0; index < items.length; index++) {\n if (!items[index]) {\n continue;\n }\n let kv = items[index].split(\"=\");\n resultObj[kv[0]] = typeof kv[1] === \"undefined\" ? \"\" : kv[1];\n }\n }\n return resultObj;\n }\n}\n","import { HostListener, Injectable } from '@angular/core';\nimport { ModalController, NavController, Platform } from '@ionic/angular';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CrossService {\n mobileWidth = 915;\n clientWidth:number = document.body.clientWidth;\n getMenuType(){\n this.clientWidth = document.body.clientWidth;\n this.onResizeScreen()\n return this.navMenuType\n }\n leftMenuMode:string\n navMenuType:string\n fixInterval:any\n constructor(\n private platform:Platform,\n private modalCtrl:ModalController,\n private navCtrl:NavController,\n ){\n this.clientWidth = document.body.clientWidth\n this.updateWidth()\n this.onResizeScreen()\n }\n async dismisModalTop(event?:Event){\n // 尝试获取顶层的模态对话框\n let topModal = await this.modalCtrl.getTop();\n if (topModal) {\n event?.preventDefault&&event?.preventDefault()\n // 如果存在模态对话框,则关闭它\n topModal.dismiss();\n topModal.isOpen = false;\n }\n }\n updateWidth(){\n this.fixInterval = setInterval(()=>{\n if(this.clientWidth) {\n clearInterval(this.fixInterval);\n delete this.fixInterval\n return\n }\n console.log(document.body.clientWidth)\n this.clientWidth = document.body.clientWidth;\n },200)\n }\n // 监听窗体缩放事件\n onResizeScreen(ev?){\n this.clientWidth = document.body.clientWidth\n if(this.clientWidth>=this.mobileWidth){\n this.leftMenuMode= \"horizontal\";\n this.navMenuType = \"pc\";\n }else{\n this.leftMenuMode= \"inline\";\n this.navMenuType = \"mobile\";\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\n// import { MASK_LIST } from './mask-list';\nimport { FmodeChat } from './chat-class';\nimport Parse from \"parse\";\nimport { NovaCloudService } from '../../../nova-cloud';\nimport { AlertController, NavController, Platform, ToastController } from '@ionic/angular';\nimport { CrossService } from '../../../platform';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ChatService {\n\n // 已加载聊天信息临时存储\n chatMap:{\n [key:string]:FmodeChat\n } = {}\n isCapacitor:boolean = false;\n\n constructor(\n private router:Router,\n private ncloud:NovaCloudService,\n private platform:Platform,\n private alertCtrl:AlertController,\n private navCtrl:NavController,\n private cross:CrossService\n ) { \n this.isCapacitor = this.platform.is(\"capacitor\")\n\n }\n\n modelList:Array<Parse.Object>\n currentModel:Parse.Object\n async loadModelList(model?:Parse.Object){\n let query = new Parse.Query(\"ChatModel\")\n query.notEqualTo(\"isDeleted\",true)\n query.equalTo(\"isEnabled\",true)\n query.addAscending(\"index\")\n this.modelList = await query.find();\n this.currentModel = model || this.modelList?.find(item=>item.get(\"code\")==\"fmode-3.6-16k\")\n }\n platformMap = {\n \"pc\":\"电脑端\",\n \"mobile\":\"移动端\",\n }\n async doButtonAction(button){\n let type = this.cross.navMenuType\n let platforms = button?.platform?.map(item=>this.platformMap[item]).join(\"、\")\n if(button?.platform?.length>0 && button?.platform?.indexOf(type)==-1){\n let alert = await this.alertCtrl.create({\n header:\"注意\",\n subHeader:\"终端不符\",\n message:`请您使用${platforms}开启本功能。`,\n buttons:[\n {\n role:\"ok\",text:\"知道了\",\n },\n ]\n })\n alert.present();\n return\n }\n if(button?.path){\n this.navCtrl.navigateRoot(button?.path);\n }\n }\n // 初始化未加载会话\n async initChatMap(sessionId){\n if(this.chatMap[sessionId]) return this.chatMap[sessionId]\n let query = new Parse.Query(\"ChatSession\")\n query.include(\"role\",\"role.model\")\n let session = await query.get(sessionId)\n let chat = new FmodeChat(session?.id,session?.get(\"role\"),session,this);\n this.chatMap[sessionId] = chat;\n return this.chatMap[sessionId]\n }\n // 获得历史会话窗口\n chatList:Array<any>\n async getChatSession(){\n if(!Parse?.User?.current()?.id) return // 用户必须登录\n let limit = 10 // 普通用户限查看10条历史记录\n let query = new Parse.Query(\"ChatSession\")\n query.include(\"role\",\"role.model\")\n query.addDescending(\"updatedAt\")\n query.equalTo(\"user\",Parse.User.current().toPointer())\n query.notEqualTo('isDeleted', true);\n query.limit(limit)\n let list = await query.find();\n this.chatList = list.map(item=>{\n // 添加缓存\n this.chatMap[item?.id] = new FmodeChat(item?.id,item?.get(\"role\"),item); \n return {\n session:item,\n sid:item?.id,\n isHidden:false,\n rid:item?.get(\"role\")?.id,\n name:item?.get(\"role\")?.get(\"name\"),\n thumb:item?.get(\"role\")?.get(\"thumb\"),\n title:item?.get(\"title\") || item?.get(\"role\")?.get(\"name\"),\n message:item?.get(\"messageList\")?.[item?.get(\"messageList\")?.length-1]?.content?.slice(0,20),\n latest:item?.createdAt\n }\n })\n }\n async getChatSessionDistinct(){\n let limit = 10 // 普通用户限查看10条历史记录\n let sql = `SELECT t1.\"objectId\" as sid , \"AvatarRole\".\"objectId\" as rid, * FROM (\n SELECT *,ROW_NUMBER() OVER (PARTITION BY \"user\", \"role\" ORDER BY \"createdAt\" DESC) AS rn\n FROM \"ChatSession\" WHERE \"user\"=$1\n ) as t1\n LEFT JOIN \"AvatarRole\" ON \"AvatarRole\".\"objectId\" = t1.\"role\"\n WHERE t1.rn=1\n LIMIT $2\n ;`\n let result:any = await this.ncloud.novaql(sql,[Parse.User.current()?.id,limit])\n let chatList = result?.map(item=>{\n return {\n sid:item?.sid,\n rid:item?.rid,\n name:item?.name,\n message:item?.messageList?.[item?.messageList?.length-1]?.content?.slice(0,20),\n latest:item?.createdAt\n }\n })\n this.chatList = chatList\n return this.chatList\n }\n\n /**\n * 重建新对话窗口\n */\n createChatPanel(role?:any,chat?:any){\n let sessionId = chat?.id||\"new\"\n chat = new FmodeChat(sessionId,role,chat,this);\n this.chatMap[sessionId] = chat; // new 窗口如果没有消息转换成带ID的,每次就会清空\n this.router.navigate([\"/chat/pro/chat/\"+sessionId])\n }\n async createNewRoleChat(roleId):Promise<FmodeChat>{\n let query = new Parse.Query(\"AvatarRole\")\n query.include(\"model\")\n let role = await query.get(roleId);\n // console.log(\"role\",role)\n let chat = new FmodeChat(\"new\",role,null,this);\n return chat\n }\n async restoreChatPanel(options?:{\n rid:string,\n sid:string,\n }){\n let queryr = new Parse.Query(\"AvatarRole\")\n let querys = new Parse.Query(\"ChatSession\")\n let role = await queryr.get(options?.rid);\n let session = await querys.get(options?.sid);\n // let sessionId = \"new\"\n let chat = new FmodeChat(options?.sid,role,session);\n this.chatMap[options?.sid] = chat;\n this.router.navigate([\"/chat/pro/chat/\"+options?.sid])\n\n }\n async callRole(role){\n // 暂时开启全端进入语音对话\n if(false && !this.isCapacitor){\n let alert = await this.alertCtrl.create({\n header:\"注意\",\n subHeader:\"语音对话,限手机APP端可用\",\n message:\"请联系客服获取内测资格哦!\",\n buttons:[\n {\n role:\"ok\",text:\"知道了\",\n },\n ]\n })\n alert.present();\n return\n\n }\n document.body.classList.add('dark');\n this.router.navigate([`/avatar/role/${role.id}`,{\n type:\"phone\"\n }])\n }\n}\n","import SparkMD5 from 'spark-md5';\nexport function calcFileMd5(file: File): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = (event) => {\n try {\n const data = event.target?.result;\n if (data) {\n const spark = new SparkMD5.ArrayBuffer();\n spark.append(data as ArrayBuffer);\n const hash = spark.end();\n resolve(hash);\n } else {\n reject(new Error(\"Failed to load file\"));\n }\n } catch (error) {\n reject(error);\n }\n };\n reader.onerror = (error) => {\n reject(error);\n };\n reader.readAsArrayBuffer(file);\n });\n}\n","import { DatePipe } from '@angular/common';\nimport { Injectable } from '@angular/core';\nimport { Platform } from '@ionic/angular';\nimport { Camera,CameraResultType, CameraSource } from \"@capacitor/camera\"\nimport { Capacitor } from \"@capacitor/core\";\nimport { Filesystem } from \"@capacitor/filesystem\";\nimport { FilesystemWeb } from '@capacitor/filesystem/dist/esm/web.js'\nimport * as qiniu from \"qiniu-js\"\nimport Parse from \"parse\";\nimport { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';\n\n/**\n * MediaCapture插件\n * @private\n * @description\n * 依赖:File\n * npm i -S cordova-plugin-file @awesome-cordova-plugins/file\n */\nimport { MediaCapture,MediaFile,CaptureVideoOptions,CaptureError } from \"@awesome-cordova-plugins/media-capture\"\nimport { calcFileMd5 } from './util-file-md5';\n\n/**\n * NovaFile 文件类型\n * @public\n */\nexport interface NovaFile{\n id:string\n key:string\n url:string\n name:string\n type:string\n size:number\n md5?:string\n}\n\n/**\n * NovaUploadService 上传服务\n * @public\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class NovaUploadService {\n\n company:string\n uptoken:string\n qiniuConf:any \n domain:string\n\n constructor(\n private platform:Platform,\n private diagnostic: Diagnostic, \n ) { \n this.getUptoken(true)\n this.requestPermission();\n this.queryDomain();\n }\n /**\n * 全端通用上传方法\n * @params file:File 待上传文件\n * @params onProgress:Function 上传进度回调函数\n * @returns\n * progressData {\n \"total\": {\n \"size\": 8491,\n \"loaded\": 8490,\n \"percent\": 99.98822282416675\n }\n }\n * novafileData {\n \"id\":\"xxxxxxxxxx\" // Attachment.objectId\n \"hash\": \"FoYHjpyTif1t8uOMv6N6sVIeGTvq\",\n \"key\": \"E4KpGvTEto/20230901/053605467.jpg\",\n \"url\": \"https://file-cloud.fmode.cn/E4KpGvTEto/20230901/053605467.jpg\",\n \"name\": \"20230901173605.jpg\",\n \"type\": \"image/jpg\",\n \"size\": 7853\n }\n */\n async upload(file:File,onProgress?:Function):Promise<NovaFile>{\n // 解析文件类型,并获得文件后缀\n let type = file.type \n\n let nameList = file.name?.split(\".\")\n let format = nameList[nameList.length-1] // 文件后缀\n\n // 计算文件md5\n let md5File\n try{\n md5File = await calcFileMd5(file)\n }catch(errmd5){}\n // 转换文件blob\n let blob = this.fileToBlob(file)\n\n // 图片上传\n let uploadFile:NovaFile\n if(type.indexOf('image')>-1){\n uploadFile = await this.saveQiniuImageFile(blob,format,null,onProgress)\n }else{\n uploadFile = await this.saveQiniuMediaFile(file,blob,null,onProgress)\n }\n uploadFile.md5 = md5File\n\n // 纠正file.url\n if(uploadFile?.url?.indexOf('undefined')>-1){\n uploadFile.url = (this.qiniuDomain || \"https://file-cloud.fmode.cn/\") + uploadFile.url.replace(\"undefined/\", \"\");\n }\n\n // 保存附件\n let attachment\n if(uploadFile?.url){\n attachment = await this.saveAttachment(uploadFile,this.qiniuDomain,null,this.getCompanyId())\n }\n if(attachment?.id){\n uploadFile.id = attachment?.id\n }\n return uploadFile\n }\n\n /**\n * 移动端上传专用方法\n * @returns \n */\n isCapacitor(){\n return this.platform.is(\"capacitor\") || this.platform.is(\"cordova\")\n }\n async requestPermission(){\n if(!this.isCapacitor()) return\n await this.requestStoagePermission();\n await this.requestCameraPermission();\n }\n async requestStoagePermission(){\n let isAvailable = await this.diagnostic.isExternalStorageAuthorized()\n console.log(\"permisson_STORAGE:\", isAvailable)\n if (!isAvailable) {\n let data = await this.diagnostic.requestExternalStorageAuthorization()\n }\n return\n }\n async requestCameraPermission(){\n let isAvailable = await this.diagnostic.isCameraAuthorized()\n console.log(\"permisson_Camera:\", isAvailable)\n if (!isAvailable) {\n let data = await this.diagnostic.requestCameraAuthorization()\n }\n return\n}\n\n/**\n * 上传Token获取方法\n * @returns \n */\n async getUptoken(refresh:boolean=false) {\n console.log(\"getUptoken\")\n if(!this.qiniuConf && !refresh) return;\n try {\n console.log(this.getCompanyId())\n let data = await Parse.Cloud.run(\"qiniu_uptoken\", {\n company: this.getCompanyId(),\n })\n console.log(data)\n this.qiniuConf = data\n } catch (err) {\n console.error(err)\n }\n }\n /**\n * 生成文件上传Key值:<公司id>/<yyyymmdd>/<file.id><hhMMss>.<ext>\n * @desc 用于对象存储含全路径的文件名称\n */\n genFileKey(file:{id:string,name:string},company?){\n let today = new Date()\n let dp = new DatePipe(\"en\")\n if(!company){\n company = this.getCompanyId();\n }\n return \"\" + company + \"/\" + dp.transform(today, \"yMMdd\") + \"/\" + String(file.id).substr(20, 6) + dp.transform(today, \"hhmmssSSS\") + /\\.[^\\.]+/.exec(file.name);\n }\n\n /**\n * 获取当前登录用户公司ID\n * @returns 公司ID\n */\n getCompanyId(){\n // 获取公司ID,或无指定值,则获取localStorage中company\n if(this.company){\n return this.company\n }\n let id = localStorage.getItem(\"company\")\n return id\n }\n qiniuDomain:string\n async queryDomain() {\n let Company = new Parse.Query('Company')\n let company = await Company.get(this.getCompanyId())\n if (company.get(\"configQiniu\") && company.get(\"configQiniu\").domain) {\n console.log(company.get(\"configQiniu\").domain)\n this.qiniuDomain = company.get(\"configQiniu\").domain;\n } else{\n this.qiniuDomain = 'https://file-cloud.fmode.cn';\n }\n }\n\n /**\n * 保存上传信息至附件表 Attachment\n * @param file 附件信息\n * @returns attachment Parse.Object\n */\n async saveAttachment(file:NovaFile|{url:string,size:string,name:string,type:string,md5?:string},domain,cateId?,company?):Promise<Parse.Object> {\n let url = file.url\n if (url.startsWith(\"http\")) {\n } else {\n url = domain + url\n }\n url = url.replace(/undefined\\//, \"\");\n\n\n // 帐套参数默认加载本地存储\n if(!company){\n company = localStorage.getItem(\"company\")\n }\n let user = Parse.User.current();\n\n // 检测文件是否存在\n let query = new Parse.Query(\"Attachment\");\n query.equalTo(\"url\", url);\n let attachment = await query.first();\n\n if (attachment && attachment.id) {\n console.error(\"该文件已存在,无需重复上传\");\n return attachment\n } else {\n let Attachment = Parse.Object.extend(\"Attachment\")\n attachment = new Attachment();\n attachment.set(\"size\", file.size)\n attachment.set(\"url\", url)\n attachment.set(\"name\", file.name)\n attachment.set(\"mime\", file.type)\n attachment.set(\"md5\",file?.md5)\n if(user?.id){\n attachment.set(\"user\",user.toPointer())\n }\n if(company){\n attachment.set(\"company\", {\n __type: \"Pointer\",\n className: \"Company\",\n objectId: localStorage.getItem(\"company\")\n })\n }\n if (cateId) {\n attachment.set(\"category\", {\n __type: \"Pointer\",\n className: \"Category\",\n objectId: cateId\n })\n }\n return await attachment.save()\n }\n}\n\n/**\n * 录像并上传\n */\nasync captureVideo(conf): Promise<any>{\n this.qiniuConf = conf;\n if(!this.isCapacitor()) return;\n // {\"name\":\"VID_20230513_182235.mp4\",\"localURL\":\"https://localhost/__cdvfile_sdcard__/DCIM/Camera/VID_20230513_182235.mp4\",\"type\":\"video/mp4\",\"lastModified\":null,\"lastModifiedDate\":1683973355000,\"size\":6100161,\"start\":0,\"end\":0,\"fullPath\":\"file:///storage/emulated/0/DCIM/Camera/VID_20230513_182235.mp4\"}\n let mediaFile:any = await this.cameraCaptureVideoFile();\n // let mediaData:string = await this.getMediaFileDataString(mediaFile);\n let fileBlob = await this.getMediaFileDataString(mediaFile);\n // let fileBlob = await this.base64ToBlobType(mediaData,mediaFile.type);\n let qiniuFile = await this.saveQiniuMediaFile(mediaFile,fileBlob)\n return qiniuFile\n}\nasync cameraCaptureVideoFile():Promise<MediaFile|any|null>{\n let options: CaptureVideoOptions = {\n limit:1,\n // quality:50\n }\n let mediaCapture = MediaCapture;\n let list:MediaFile[] | CaptureError | any= await mediaCapture.captureVideo(options)\n if(list?.length>0){\n return list[0]\n }\n return null\n}\n\n\nasync getMediaFileDataString(mediafile){\n let filesystem = new FilesystemWeb()\n let path = mediafile.fullPath.replaceAll(\"///\",\"//\")\n \n let stat = await Filesystem.stat({ path:mediafile.fullPath});\n let webUri = Capacitor.convertFileSrc(stat.uri)\n let content = await fetch(webUri)\n let blob = await content.blob()\n console.log(blob.size)\n \n console.log(JSON.stringify(stat))\n // CapacitorConver\n\n // file:///storage/emulated/0/DCIM/Camera/VID_20230612_125907030.mp4\n // let filesystem = Filesystem\n // let content = await filesystem.readFile({\n // path:mediafile.fullPath\n // })\n console.log(JSON.stringify(content))\n console.log(JSON.stringify(Object.keys(content)))\n // console.log(content?.data)\n if(blob){\n return blob\n }else{\n throw \"读取文件失败\"\n }\n}\n /**\n * 拍照并上传\n * @returns -- {hash?:string,url:string,name:string,size:number,key:stirng}\n */\n async takePicture(conf): Promise<any>{\n this.qiniuConf = conf;\n if(!this.isCapacitor()) return\n await this.getUptoken();\n let image = await this.cameraTakePictureDataUrl()\n // image.format\n if(!image?.dataUrl) return\n let blob = await this.base64ToBlob(image?.dataUrl)\n let qiniuFile = await this.saveQiniuImageFile(blob,image?.format)\n console.log(JSON.stringify(qiniuFile))\n // this.saveAttachment()\n return qiniuFile\n };\n async cameraTakePictureDataUrl(){ // WebUrl + Base64\n if(!this.isCapacitor()) return\n const image = await Camera.getPhoto({\n quality: 90,\n allowEditing: false,\n // saveToGallery:true,\n source:CameraSource.Camera,\n resultType: CameraResultType.DataUrl\n });\n return image;\n }\n\n maxSize = 5 * 1024 * 1024\n /**\n * 七牛上传函数:无需前端组件\n * @param imageBlob: Blob\n * @param format: string\n */\n async saveQiniuImageFile(imageBlob: Blob,format:string,company?:string,onProgress?:Function): Promise<NovaFile|any> {\n // let that = this\n let maxSize = this.maxSize\n if (imageBlob.size > maxSize) {\n await console.log(`照片过大,超出限制5MB`)\n throw \"超出文件大小\"\n }\n let dp = new DatePipe(\"en\")\n let id = dp.transform(new Date(), \"yyyyMMddHHmmss\")\n let name = `${id}.${format}`\n let type = `image/${format}`\n // let file = new File([imageBlob], filename, { type: \"image/jpeg\" })\n let putExtra = {\n fname: name,\n params: {},\n mimeType: \"image/*\",\n }\n let config = {\n useCdnDomain: true, //使用cdn加速\n forceDirect:true // 强制不分片,放置上传报错\n }\n console.log(this.qiniuConf)\n\n let qiniuFileKey = this.genFileKey({id:id,name:name})\n console.log(\"图片上传前\")\n return new Promise((resolve, reject) => {\n console.log(\"进入了上传\")\n let observable = (qiniu as any).upload(\n imageBlob,\n qiniuFileKey,\n this.qiniuConf?.uptoken,\n putExtra,\n config\n )\n observable.subscribe({\n next: (result_2) => {\n // 主要用来展示进度\n console.log(result_2)\n onProgress&&onProgress(result_2)\n },\n error: async (err_1) => {\n // this.$notify('上传图片失败');\n // await that.presentToast(`检测失败`, 1500, \"danger\")\n console.log(err_1)\n },\n complete: (res_1) => {\n console.log(\"上传完成\")\n console.log(`${this.qiniuConf?.domain}${res_1.key}`)\n res_1.url = `${this.qiniuConf?.domain}${res_1.key}`\n res_1.name = name\n res_1.type= type\n res_1.size = imageBlob.size;\n resolve(res_1)\n },\n })\n })\n }\n async saveQiniuMediaFile(mediafile:any,fileBlob: Blob,company?:string,onProgress?:Function): Promise<NovaFile|any> {\n // let that = this\n let name = mediafile.name\n let type = mediafile.type\n let size = mediafile.size\n let maxSize = 100 * 1024 * 1024 // 限100M\n if (size > maxSize) {\n console.log(`视频过大,超出限制100MB`)\n throw \"超出文件大小\"\n }\n let dp = new DatePipe(\"en\")\n let id = dp.transform(new Date(), \"yyyyMMddHHmmss\")\n // let file = new File([mediaBlob], filename, { type: \"image/jpeg\" })\n let putExtra = {\n fname: name,\n params: {},\n mimeType: type,\n }\n let config = {\n useCdnDomain: true, //使用cdn加速\n forceDirect:true // 强制不分片,放置上传报错\n }\n\n let qiniuFileKey = this.genFileKey({id:id,name:name})\n console.log(\"图片上传前\")\n console.log(mediafile.name,fileBlob.size)\n console.log(fileBlob.size)\n console.log(fileBlob.size/1024/1024)\n return new Promise((resolve, reject) => {\n console.log(\"进入了上传\")\n let observable = (qiniu as any).upload(\n fileBlob,\n qiniuFileKey,\n this.qiniuConf?.uptoken,\n putExtra,\n config\n )\n observable.subscribe({\n next: (result_2) => {\n // 主要用来展示进度\n console.log(\"主要用来展示进度\")\n onProgress&&onProgress(result_2)\n console.log(JSON.stringify(result_2))\n },\n error: async (err_1) => {\n console.log(\"上传失败\")\n // this.$notify('上传图片失败');\n // await that.presentToast(`检测失败`, 1500, \"danger\")\n console.log(JSON.stringify(err_1))\n },\n complete: (res_1) => {\n console.log(\"上传完成\")\n console.log(JSON.stringify(res_1))\n // console.log(`${this.qiniuConf?.domain}${res_1.key}`)\n // res_1.url = `${this.qiniuConf?.domain}${res_1.key}`\n // res_1.name = name\n // res_1.type= type\n // res_1.size = size;\n mediafile.key = res_1.key\n console.log(mediafile.type)\n mediafile.url = `${this.qiniuConf?.domain}${res_1.key}`\n console.log(mediafile.url)\n resolve(mediafile)\n },\n })\n })\n }\n\n //string转File文件\n async base64ToBlobType(string,type){\n let base64Response = await fetch(`data:${type};base64,${string}`);\n let blob = await base64Response.blob();\n return blob\n string = atob(string)\n return new Blob([string],{\n type:type\n })\n }\n //base64转File文件\n async base64ToBlob(base64Img: string) {\n let base64Response = await fetch(base64Img);\n let blob = await base64Response.blob();\n return blob\n }\n fileToBlob(file:File):Blob {\n const blob = file.slice(0, file.size, file.type);\n return new Blob([blob], { type: file.type });\n }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { NovaCloudService } from '../../../nova-cloud/nova-cloud.service';\nimport Parse from \"parse\";\nimport { NovaUploadService } from '../../../storage/service-upload/nova-upload.service';\n\n/**\n * DalleOptions 绘画参数接口\n * @public\n */\nexport interface DalleOptions{\n prompt:string\n quality?:null | \"hd\"\n n?:1\n model?: \"dall-e-3\" | \"dall-e-2\"\n size?: \"1024x1024\" | \"1792x1024\" | \"1024x1792\"\n style?:\"vivid\" | \"natural\" \n}\n//高级AI绘图 api文档 https://www.showdoc.com.cn/2307900595645609/10319677266305138\nexport interface StableDiffusionOptions{\n prompt :string //支持中英文\n modelStyleId :number\t//模型风格配置ID,请使用我们官方提供的风格列表\n//基础参数\n negativePrompt ?:string //仅支持中文\n\n width ?:number\t//宽,默认512,不可超过2048\n height ?:number\t//高,默认512,不可超过2048\n steps ?:number\t//迭代步数,默认20,不可超过50\n seed ?:number\t//随机种子,默认不传则为随机生成\n cfgScale\t ?:number\t//提示词引导系数,取值范围1-30\n//额外参数 仅图生图\n hrScale ?:number\t//高清修复倍率,仅在文生图模式生效,取值不可以超过3\n hrSteps ?:number\t//高清迭代步数,默认20,不可超过30(不建议少于15,会严重影响画面生成效果)\n//额外参数 \n upscale\t ?:number\t//AI放大倍数,取值不可以超过3\n batchSize\t ?:number\t//生成图片数,取值不可以超过6\n//额外参数\n faceFix\t ?:boolean\t//是否开发脸部修复,注意,开启此功能需额外扣除2积分\n detailsLevel ?:number\t//脸部修复细节刻画等级,取值范围1-9\n //以下为图生图\n img ?:string //图片URL保证公网可查看\n imgOptions ?:imgOptions\n denoisingStrength?:number\t//重绘幅度,仅在img字段有传值的时候生效,取值范围0~1,取值越大画面与参考图差别越大\n controlnet?:{\n units?:ControlnetUnits[]\n }\n}\n\n/**\n * imgOptions 图像配置参数\n * @public\n */\nexport interface imgOptions{\n removeBackground ?:boolean //是否自动移除图片中的人物背景,一般用于重绘背景有效,注意:开启此功能需额外扣除2积分\n redrawBackground ?:boolean //是否保留画面中的主体,仅绘制画面中的背景注意:开启此功能需额外扣除2积分\n mainObjectType ?:\"human\"\t| \"general\" //自定识别画面中的主体,用于背景处理。取值:general:通用场景识别,用于自动识别画面中的主体,human:识别并保留画面中的人物。当removeBackground或者redrawBackground为true的时候,画面中的主体类型,请根据您的画面中的实际情况传值,默认为human\n facePreservation ?:boolean //自动检测图片中的人脸,使生成后的人脸与原始人脸保持高度相似。注意,开启此功能需额外扣除2积分\n facePreservationCount?:number\t //开启人脸保持后,画面中最多处理的人脸数量,默认为1,最大值可以为5\n genderDetect ?:boolean \t//是否自动检测图片中的人物性别,尽量使生成前后的人物性别不发生变化,如果图片中有多个人物性别则效果会不准确。注意,开启此功能需额外扣除1积分\n}\n\n/**\n * ControlnetUnits 控制网络单元\n * @public\n */\nexport interface ControlnetUnits{\n isOpen ?:boolean // 是否启用该控制参数\n type\t ?:string //\t\tcontrolnet干预形式\n preprocess\t ?:boolean //\t\t是否需要对参考图进行预处理提取可用信息\n image\t ?:string //\t\tcontrolnet需要参考的图片,不传默认为图生图的原始图片,可以为base64图片或者图片url\n controlMode\t ?:number //\t\tcontrolnet控制模式,0、平衡模式(默认),1:提示词更重要,2:controlnet更重要\n weight\t ?:number //\t\tcontrolnet权重,范围为0~2,默认为1,\n controlStart ?:number //\t\tcontrolnet生效时机,范围为0~1,默认为0\n controlEnd\t ?:number //\t\tcontrolnet退出时机,范围为0~1,默认为1\n paramsA\t ?:number //\t\tcontrolnet预处理器对应参数A\n paramsB\t ?:number //\t\tcontrolnet预处理器对应参数B\n controlArray ?:any[]\n}\n\n/**\n * ImagineService AI绘画服务\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ImagineService {\n\n /**\n * 图片生成接口主机地址\n */\n constructor(\n private http:HttpClient,\n private ncloud:NovaCloudService,\n private uploadServ:NovaUploadService,\n ) {}\n /**\n * DALL-E-3 图片生成函数\n * @description\n * @see \n * https://p4.hosteagle.club/docs/api-reference?__cpo=aHR0cHM6Ly9wbGF0Zm9ybS5vcGVuYWkuY29t\n * @param {DalleOptions} options\n * @param {string} options.prompt 1000 characters for dall-e-2 and 4000 characters for dall-e-3.\n * @param {string} options.model dall-e-3 dall-e-2\n * @param {string} options.quality dall-e-3 only hd means more details & consistency\n * @param {string} options.response_format url | b64_json\n * @param {string} options.size 1024x1024, 1792x1024, or 1024x1792 for dall-e-3\n * @param {string} options.style vivid | natural dall-e-3 only\n */\n async drawDalle(options:DalleOptions){\n options.size = options?.size || \"1024x1024\"\n options.style = options?.style || \"natural\"\n options.quality = options?.quality || null\n \n let reqDalle = {\n \"model\": \"dall-e-3\", \n \"prompt\": options.prompt,\n \"n\": 1,\n \"quality\":options.quality,\n // response_format:\"b64_json\",\n response_format:\"url\",\n \"size\": options.size,\n \"style\": options.style\n }\n if(options.prompt?.length>3000){\n throw \"prompt maximum < 4000 characters\"\n }\n let data:any = await this.ncloud.apigTest(\"aigc/gpt/v1/images/generations\",reqDalle)\n console.log(data)\n if(data?.id){\n let query = new Parse.Query(\"ImagineWork\")\n query.get(data?.id);\n let work = await query.first();\n console.log(work)\n if(work?.id) this.newWorkList.unshift(work)\n }\n return data\n /**\n * @param json.data[0].b64_json 图片二进制的b64格式\n Response {\n \"created\": 1589478378,\n \"data\": [\n {\n \"url\": \"https://...\"\n },\n {\n \"url\": \"https://...\"\n }\n ]\n }\n */\n }\n priceDalle(options:DalleOptions){\n let priceList:Array<any> = [\n {\"model\":\"dall-e-3\",quality:null,\t\"size\":\"1024x1024\",\t \"credit\": 2*10*8*0.04},\n {\"model\":\"dall-e-3\",quality:null,\t\"size\":\"1024x1792\",\t \"credit\": 2*10*8*0.08},\n {\"model\":\"dall-e-3\",quality:null,\t\"size\":\"1792x1024\",\t \"credit\": 2*10*8*0.08},\n {\"model\":\"dall-e-3\",quality:\"hd\",\t\"size\":\"1024x1024\",\t \"credit\": 2*10*8*0.08},\n {\"model\":\"dall-e-3\",quality:\"hd\",\t\"size\":\"1024x1792\",\t \"credit\": 2*10*8*0.12},\n {\"model\":\"dall-e-3\",quality:\"hd\",\t\"size\":\"1792x1024\",\t \"credit\": 2*10*8*0.12},\n {\"model\":\"dall-e-2\",quality:null,\t\"size\":\"1024x1024\",\t \"credit\": 2*10*8*0.02},\n {\"model\":\"dall-e-2\",quality:null,\t\"size\":\"512x512\",\t \"credit\": 2*10*8*0.018},\n {\"model\":\"dall-e-2\",quality:null,\t\"size\":\"256x256\",\t \"credit\": 2*10*8*0.016}\n ]\n let price = priceList.find(item=>item.model==options.model && item.quality==options.quality && item.size==options.size)\n let credit = price?.credit || 2*10*8*0.12\n return credit\n }\n priceStableDiffusion(options:StableDiffusionOptions){\n let size = options.width*options.height\n let num = 0.3 //飞码能量换算常数\n let credit = size*0.000000763*options.steps\n + size*0.00002278 * (options?.upscale || 0)\n + (options?.hrSteps || 0)*size*( options?.hrScale || 0) *( options?.hrScale || 0)* 0.000000763\n + (options?.faceFix? 2:0)\n + (options?.imgOptions?.removeBackground? 2:0)\n + (options?.imgOptions?.redrawBackground? 2:0)\n + (options?.imgOptions?.facePreservation? 2:0)\n + (options?.imgOptions?.genderDetect? 1:0)\n + (options?.controlnet?.units?.length || 0)*2\n // console.log(credit);\n\n credit = credit * num *options.batchSize\n\n \n // console.log(credit);\n\n return credit\n }\n b64DataToBase64Image(b64_json){\n let data = atob(b64_json)\n let blob = new Blob([data], { type: 'image/webp' });\n new Promise(resolve=>{\n // 使用 FileReader 将 Blob 对象转换为 base64 字符串\n let reader = new FileReader();\n reader.onloadend = function() {\n let base64data = reader.result;console.log(base64data)\n resolve(base64data)\n };\n reader.readAsDataURL(blob);\n })\n }\n /**\n * Huashi6专用绘图函数\n * @param reqBody \n * @see\n * 接口reqBody参数,参考:https://www.showdoc.com.cn/2307900595645609/10319675987319598\n * 密码:123456\n * @returns \n */\n async draw(reqBody:any){\n let data:any = await this.ncloud.apig(\"aigc/sdapi/v1/draw\",reqBody)\n // 正常生成taskId后,获取数据添加到列表中\n let taskId = data?.paintingSign\n if(taskId){\n setTimeout(async () => {\n let query = new Parse.Query(\"ImagineWork\")\n query.equalTo(\"taskId\",taskId);\n let work = await query.first();\n console.log(work)\n if(work?.id) this.newWorkList.unshift(work)\n }, 1000);\n }\n return data\n }\n /**\n * 已完成的直接加载,未完成的再接口更新\n * @param taskId \n * @returns \n */\n async taskDetail(taskId:string){\n let data:any = await this.ncloud.apig(\"aigc/sdapi/v1/task/detail\",{taskId:taskId})\n console.log(data)\n this.taskDetailMap[taskId] = data\n return data\n }\n taskDetailMap:any = {}\n\n /**\n * 我的绘画作品共享方法\n */\n newWorkList:Array<Parse.Object> = []\n myWorkList:Array<Parse.Object> = []\n getMyWorkQuery(){\n let user = Parse.User.current()\n if(!user?.id) return\n let query = this.getWorkQuery()\n query.include(\"model\",\"module\",\"user\")\n query.equalTo(\"user\",user.toPointer());\n return query\n }\n getWorkQuery(){\n\n // 获取 1 分钟前的时间\n let oneMinutesAgo = new Date(new Date().getTime() - 1 * 60 * 1000);\n\n let query = Parse.Query.fromJSON(\"ImagineWork\",{\n where:{\n $or:[\n // 超时60秒,且进度不为0\n {createdAt:{$lte:oneMinutesAgo},progress:{$ne:0}},\n // 60秒内,不限进度\n {createdAt:{$gt:oneMinutesAgo}}\n ]\n }\n });\n query.include(\"model\",\"module\",\"user\");\n query.notEqualTo(\"isDeleted\",true)\n query.notEqualTo(\"isFailed\",true)\n query.doesNotExist(\"respData.error\") // DE 算力瓶颈\n query.doesNotExist(\"respData.data.taskLimitCount\") // SD并发超限\n query.addDescending(\"createdAt\");\n return query;\n }\n getimg(): Promise<string> {\n return new Promise((resolve, reject) => {\n let input = document.createElement('input');\n input.type = 'file';\n input.click();\n \n let handleChange = async () => {\n input.removeEventListener('change', handleChange);\n if (input.files && input.files.length > 0) {\n let file = input.files[0];\n let fileResult = await this.uploadServ.upload(file,(res)=>{\n console.log(res) // 上传进度,可以同步更新页面上传百分比\n res.total.percent.toFixed(2)//上传进度\n });\n // 测试使用固定图片\n // let fileResult = {\n // url: \"https://file-cloud.fmode.cn/E4KpGvTEto/20230808/s12uh1092414597.png\"\n // };\n \n resolve(fileResult.url);\n } else {\n reject(\"未选择文件\");\n }\n };\n \n input.addEventListener('change', handleChange);\n });\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ChatService } from './service-chat/chat.service';\nimport { ImagineService } from './service-imagine/imagine.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FmaiService {\n\n constructor(\n private imagine:ImagineService,\n private chat:ChatService\n ) { }\n\n \n\n}\n","let colorMap = [\n \"primary\",\n \"secondary\",\n \"tertiary\",\n \"success\",\n \"warning\",\n \"danger\",\n \"light\",\n \"medium\",\n \"dark\"\n]\n\nexport const MASK_LIST = [\n // 数字员工\n {\n name:\"执行李\",\n type:\"employee\",\n title:\"首席执行官\",\n desc:\"一位富有远见和领导才能的创业新秀。她具备战略思维和决策能力,能够为公司设定长期目标并领导团队实现这些目标。\",\n color:colorMap[0],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_48766.jpg?e=1695974629&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:oPkQSsyQLLD08R_J4SMeO1f1RdM=\"\n },\n {\n name:\"技术刘\",\n type:\"employee\",\n title:\"首席技术官\",\n desc:\"一位技术专家,拥有广泛的技术知识和经验。他善于解决复杂的技术问题,并能够领导开发团队实施创新的技术解决方案。\",\n color:colorMap[1],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/9/29/9_619877.jpg?e=1695952672&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:LDuSg8_n5g4Rj_8F5PKrGzV4T54=\",\"https://imgsource.huashi6.com/images/ai/2023/9/27/20_17767.jpg?e=1695819037&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:a9uOeeJMN2oopK-3WQZzldPXfH0=\"]\n },\n {\n name:\"点子王\",\n type:\"employee\",\n title:\"首席运营官\",\n desc:\"一位富有创意和市场洞察力的市场营销专家。她擅长制定营销策略,了解目标受众,并能够利用各种渠道和工具推广公司的产品或服务。\",\n color:colorMap[2],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/9_186291.jpg?e=1695952125&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:EhEUtwnC9hpu-SXXsBrp2Q-rcJk=\"\n },\n {title:\"设计总监\",\n name:\"李欣\",\n type:\"employee\",\n desc:\"一位富有创造力和用户导向思维的设计师。她能够理解用户需求,并通过设计直观、易用且吸引人的用户界面来提供出色的用户体验。\",\n color:colorMap[3],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/9_18099.jpg?e=1695952201&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:G_a60v52iTTqvJgeTSa_8zJUY2w=\"\n }, \n\n {title:\"运营经理\",\n name:\"刘洁\",\n type:\"employee\",\n desc:\"一位组织能力强、注重细节并擅长解决问题的运营专家。她能够协调各个部门的工作,并确保公司的运营流程高效运行。\",\n color:colorMap[4],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/9_842519.jpg?e=1695952125&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:FM_kKZDzkcLQ1EX4266dXU46cRc=\"\n\n },\n\n {title:\"销售经理\",\n name:\"张伟\",\n type:\"employee\",\n desc:\"一位富有销售天赋和人际交往能力的销售专家。他善于与客户建立良好的关系,并能够推动销售团队实现业绩目标。\",\n color:colorMap[5],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_739110.jpg?e=1695974920&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:vg_sn-qn67MJS-7j2o7mWzOCUSk=\"\n },\n\n\n {title:\"数据分析师\",\n name:\"杨晨\",\n type:\"employee\",\n desc:\"一位善于解读数据和提供商业洞察的数据分析专家。她能够收集、分析和解释数据,为公司的决策制定提供有力的支持。\",\n color:colorMap[6],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_204321.jpg?e=1695974779&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:dC2sGmJekSPBTCycPF76BkQPBoo=\"\n },\n\n\n {title:\"财务经理\",\n name:\"赵晓\",\n type:\"employee\",\n desc:\"一位精通财务管理和分析的专业人士。她能够制定财务战略、管理公司的财务流程,并提供准确的财务报告和预测。\",\n color:colorMap[7],\n cover:\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_947878.jpg?e=1695974779&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:TFGn0_l2PqhUTe9G4A3it769hcU=\"\n },\n {title:\"品牌专员\",\n name:\"王雅\",\n type:\"employee\",\n desc:\"一位富有创意和品牌意识的专业人士。她能够塑造和管理公司的品牌形象,制定品牌营销策略,并与内部和外部利益相关者建立良好的合作关系。\",\n color:colorMap[8],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_129581.jpg?e=1695975151&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:YQrpiv1hBKRPIdaEbDDDkLFuPG8=\",\"https://imgsource.huashi6.com/images/ai/2023/9/29/15_912136.jpg?e=1695975151&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:8SVMU1rdKD8eaJ1gH_qGQzcrMhM=\"]\n },\n // 数字教师\n {\n title:\"全科\",\n name:\"孔博\",\n type:\"teacher\",\n desc:\"擅长全科教学的金牌教师,知识面广泛,博古通今,因材施教,耐心稳重。\",\n color:colorMap[0],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/12_40958.jpg?e=1697604189&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:U7r1Td30lXdf9mE1TMVAnDhBP6c=\"]\n },\n {\n title:\"语文\",\n name:\"王明\",\n type:\"teacher\",\n desc:\"激发学生对文学的热爱,引导他们成为优秀的作家和沟通者。\",\n color:colorMap[1],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/11_698893.jpg?e=1697602689&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:hK_AuY7BA1pp33QVeUue5QjIg4o=\"]\n },\n {\n title:\"数学\",\n name:\"万红\",\n type:\"teacher\",\n desc:\"以清晰的逻辑和耐心的指导,帮助学生掌握数学的基础知识和解题技巧。\",\n color:colorMap[2],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/11_256253.jpg?e=1697603314&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:K2iqp_ZzHYzXNu_0VJlywyANHp8=\"]\n },\n {\n title:\"英语\",\n name:\"张瑞\",\n type:\"teacher\",\n desc:\"激发学生对英语学习的兴趣,培养他们的听、说、读、写能力,让他们自信地运用英语。\",\n color:colorMap[3],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/12_266171.jpg?e=1697603707&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:uhpxBbT-jlSt_KjAnj0SFsFAjWU=\"]\n },\n {\n title:\"物理\",\n name:\"金晓\",\n type:\"teacher\",\n desc:\"通过实验和案例,帮助学生理解物理原理,培养他们的科学思维和实验技能。\",\n color:colorMap[4],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/11_694925.jpg?e=1697603071&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:FznZxhkYUrZ-BzX05dvNt8acTUw=\"]\n },\n {\n title:\"化学\",\n name:\"陈华\",\n type:\"teacher\",\n desc:\"激发学生对化学的好奇心,教授他们化学知识和实验技巧,培养他们的实验和分析能力。\",\n color:colorMap[5],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/11_942234.jpg?e=1697603169&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:__2T8cxLl4J0AwMR9MJdDiooDF0=\"]\n },\n {\n title:\"生物\",\n name:\"杨婷\",\n type:\"teacher\",\n desc:\"引导学生探索生命的奥秘,培养他们的科学观察和实验能力,让他们热爱生物科学。\",\n color:colorMap[6],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/12_330738.jpg?e=1697603491&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:2K5-DHPnUQ-R9GGxtWKiEG68QlE=\"]\n },\n {\n title:\"历史\",\n name:\"赵亮\",\n type:\"teacher\",\n desc:\"帮助学生了解历史事件和文化背景,培养他们的历史意识和批判思维。\",\n color:colorMap[7],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/11_256302.jpg?e=1697602689&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:YP7ffC1YKO-Pb0C3ks4caT0QqZk=\"]\n },\n {\n title:\"地理\",\n name:\"林丽\",\n type:\"teacher\",\n desc:\"引导学生探索地球的奥秘,培养他们的地理观察和分析能力,让他们热爱地理科学。\",\n color:colorMap[8],\n cover:[\"https://imgsource.huashi6.com/images/ai/2023/10/18/12_555804.jpg?e=1697604054&token=qFZErZx7WS1v5B4rgQE2KLMHlYHVNaCuXeaA9OLD:xLN4QW0x9jx9lEB4EFHWvI_gEsI=\"]\n }\n]\n\n/**\n 当涉及到互联网创业公司的九大岗位时,以下是一些常见的角色,以及为每个角色提供的虚拟员工的中文名称和特点描述:\n\n1. 创始人/首席执行官(CEO):\n - 员工姓名:张明(Zhang Ming)\n - 特点描述:张明是一位富有远见和领导才能的创业家。他具备战略思维和决策能力,能够为公司设定长期目标并领导团队实现这些目标。\n\n2. 技术总监(CTO):\n - 员工姓名:王磊(Wang Lei)\n - 特点描述:王磊是一位技术专家,拥有广泛的技术知识和经验。他善于解决复杂的技术问题,并能够领导开发团队实施创新的技术解决方案。\n\n3. 市场营销经理:\n - 员工姓名:李婷(Li Ting)\n - 特点描述:李婷是一位富有创意和市场洞察力的市场营销专家。她擅长制定营销策略,了解目标受众,并能够利用各种渠道和工具推广公司的产品或服务。\n\n4. 用户体验设计师(UX Designer):\n - 员工姓名:陈宇(Chen Yu)\n - 特点描述:陈宇是一位富有创造力和用户导向思维的设计师。他能够理解用户需求,并通过设计直观、易用且吸引人的用户界面来提供出色的用户体验。\n\n5. 运营经理:\n - 员工姓名:刘洁(Liu Jie)\n - 特点描述:刘洁是一位组织能力强、注重细节并擅长解决问题的运营专家。她能够协调各个部门的工作,并确保公司的运营流程高效运行。\n\n6. 销售经理:\n - 员工姓名:张伟(Zhang Wei)\n - 特点描述:张伟是一位富有销售天赋和人际交往能力的销售专家。他善于与客户建立良好的关系,并能够推动销售团队实现业绩目标。\n\n7. 数据分析师:\n - 员工姓名:杨晨(Yang Chen)\n - 特点描述:杨晨是一位善于解读数据和提供商业洞察的数据分析专家。他能够收集、分析和解释数据,为公司的决策制定提供有力的支持。\n\n8. 财务经理:\n - 员工姓名:赵晓(Zhao Xiao)\n - 特点描述:赵晓是一位精通财务管理和分析的专业人士。她能够制定财务战略、管理公司的财务流程,并提供准确的财务报告和预测。\n\n9. 品牌管理专员:\n - 员工姓名:王雅(Wang Ya)\n - 特点描述:王雅是一位富有创意和品牌意识的专业人士。她能够塑造和管理公司的品牌形象,制定品牌营销策略,并与内部和外部利益相关者建立良好的合作关系。\n\n这些角色和员工姓名的选择是为了展示不同岗位的特点和职责。当然,在实际创业公司中,具体的岗位和员工姓名可能会因公司的规模、行业和需求而有所不同。\n */","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'utilnow',\n standalone: true\n})\nexport class UtilnowPipe implements PipeTransform {\n\n transform(value: Date, args?: any): any {\n let now = new Date();\n let time = now.getTime() - value.getTime();\n let seconds = time / 1000\n if(seconds<=60){\n return this.handleArgs(seconds.toFixed(0),\"秒钟前\",args)\n }\n let minutes = seconds / 60\n if(minutes < 60){\n return this.handleArgs(minutes.toFixed(0),\"分钟前\",args)\n }\n let hours = minutes / 60\n if(hours < 24){\n return this.handleArgs(hours.toFixed(0),\"小时前\",args)\n }\n let days = hours / 24\n if(days < 7){\n return this.handleArgs(days.toFixed(0),\"天前\",args)\n }\n\n let dateStr = `${value?.getFullYear()}-${value?.getMonth()+1}-${value?.getDate()}`\n return dateStr\n }\n\n // 时间标记\n enLocale:any = {\n \"秒钟前\":\" seconds ago\",\n \"分钟前\":\" minutes ago\",\n \"小时前\":\" hours ago\",\n \"天前\":\" days ago\",\n }\n handleArgs(value:any,unit:any,args:any):any{\n if(args==\"en\"){\n unit = this.enLocale[unit]\n }\n if(args?.constructor?.name == \"TranslateService\"){\n console.log(unit)\n if(args?.getDefaultLang()==\"en\"){\n unit = this.enLocale[unit]\n }\n // unit = await new Promise(resolve=>{\n // args?.get(unit).subscribe(data=>{\n // console.log(data)\n // resolve(data) \n // })\n // })\n }\n if(args==\"json\"){\n return {unit,value}\n }else{\n return value+unit\n }\n\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { getMessageContentText, getMessageImageUrl } from '../chat-class';\n\n@Pipe({\n name: 'chatContent',\n pure:true, // 输入变化时,仅渲染一次\n standalone: true\n})\nexport class ChatContentPipe implements PipeTransform {\n\n transform(content: unknown, ...args: unknown[]): unknown {\n console.log(args);\n let arg = args?.[0] || \"text\"\n if(arg==\"text\"){\n return getMessageContentText(content)\n }\n if(arg==\"image_url\"){\n return getMessageImageUrl(content)\n }\n return content;\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * 文字生成过程中 xml格式标签自动隐藏 用于语音对话答复字符显示\n * @desc\n */\n@Pipe({\n name: 'hidexml',\n standalone:true,\n})\nexport class HidexmlPipe implements PipeTransform {\n\n transform(value: string, ...args: unknown[]): unknown {\n if(!value) return \"\"\n return this.hideXmlTags(value);\n }\n\n hideXmlTags(xmlString) {\n // 使用正则表达式替换所有的 XML 标签\n return xmlString.replace(/<[^>]*>/g, '');\n}\n\n}\n","\n\nimport { mathjax } from \"mathjax-full/js/mathjax\";\nimport { TeX } from \"mathjax-full/js/input/tex\";\nimport { SVG } from \"mathjax-full/js/output/svg\";\nimport { CHTML } from \"mathjax-full/js/output/chtml\";\nimport { AllPackages } from \"mathjax-full/js/input/tex/AllPackages\";\nimport { liteAdaptor } from \"mathjax-full/js/adaptors/liteAdaptor\";\nimport { RegisterHTMLHandler } from \"mathjax-full/js/handlers/html\";\n\nexport class MarkdownMathJax{\n\n options:any\n adaptor:any\n constructor(options?:any){\n this.options = options;\n this.adaptor = liteAdaptor();\n RegisterHTMLHandler(this.adaptor);\n }\n text_to_mathjax(math:any,options?:any):any{\n if(!math?.length) return \"\"\n if(!math?.replace) return \"\"\n options = options || this.options\n let output:any = new SVG({fontCache:'local'});\n if(options?.output==\"chtml\"){\n output = new CHTML()\n }\n // 设置输入输出参数\n const mathjax_document:any = mathjax.document('',{\n skipHtmlTags:[\n 'script',\"noscript\",'style',\"textarea\",\"pre\",\"code\",\"annotation\",\"annotation-xml\"\n ],\n InputJax:new TeX({\n // displayMath: [['\\$\\$', '\\$\\$'], ['\\\\\\[', '\\\\\\]']],\n // inlineMath: [['\\$', '\\$'],['\\\\\\(', '\\\\\\)']],\n processEscapes: true,\n packages:AllPackages,\n }),\n OutputJax:output\n })\n const mathjax_options = {\n em:16,\n ex:8,\n containerWidth:1280\n }\n \n // Preprocess the input to handle inline and block math separately\n let regxList = [\n /\\$\\$\\ (.+?)\\ \\$\\$/g,/\\$\\$(.+?)\\$\\$/g,/\\$\\$\\n(.+?)\\n\\$\\$/g,\n /\\$(.+?)\\$/g,/\\\\\\((.+?)\\\\\\)/g,/\\\\\\[(.+?)\\\\\\]/g\n ]\n regxList.forEach(regx=>{\n math = math\n .replace(regx, (match, p1) => {\n // Inline math\n let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n let nodeHtml = `<span class=\"mathjax raw\" style=\"margin-left:10px;margin-right:10px;\">${this.adaptor.innerHTML(node)}</span>`\n return nodeHtml;\n })\n })\n return math\n // math\n // .replace(/\\$\\$\\ (.+?)\\ \\$\\$/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // .replace(/\\$\\$(.+?)\\$\\$/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // .replace(/\\$\\$\\n(.+?)\\n\\$\\$/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // .replace(/\\$(.+?)\\$/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // .replace(/\\\\\\((.+?)\\\\\\)/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // .replace(/\\\\\\[(.+?)\\\\\\]/g, (match, p1) => {\n // // Inline math\n // let node = mathjax_document.convert(`${p1}`, mathjax_options) as any;\n // return this.adaptor.innerHTML(node);\n // })\n // return processedMath;\n \n // 内置Tex内容筛选(不如正则准确)\n // let node:any = mathjax_document.convert(math,mathjax_options) as any;\n // return adaptor.innerHTML(node);\n }\n \n}","import hljs from 'highlight.js';\nimport MarkdownIt from \"markdown-it\";\nimport $ from \"jquery\";\n\n/**\n * 自定义插件\n */\nimport { MarkdownMathJax } from './plugins/md-mathjax';\n\n/**\n * use插件\n */\n import abbr from 'markdown-it-abbr'\n import footnote from 'markdown-it-footnote'\n import deflist from 'markdown-it-deflist'\n import mark from 'markdown-it-mark'\n import ins from 'markdown-it-ins'\n import sub from 'markdown-it-sub'\n import sup from 'markdown-it-sup'\n// import imsize from 'markdown-it-imsize' // fs path\n import ruby from 'markdown-it-ruby'\n\nlet md = new MarkdownIt({\n html: true, // 在源码中启用 HTML 标签\n xhtmlOut: true, // 使用 '/' 来闭合单标签 (比如 <br />)。\n // 这个选项只对完全的 CommonMark 模式兼容。\n breaks: false, // 转换段落里的 '\\n' 到 <br>。\n // langPrefix: 'language-', // 给围栏代码块的 CSS 语言前缀。对于额外的高亮代码非常有用。\n linkify: false, // 将类似 URL 的文本自动转换为链接。\n \n // 启用一些语言中立的替换 + 引号美化\n typographer: false,\n \n // 双 + 单引号替换对,当 typographer 启用时。\n // 或者智能引号等,可以是 String 或 Array。\n //\n // 比方说,你可以支持 '«»„“' 给俄罗斯人使用, '„“‚‘' 给德国人使用。\n // 还有 ['«\\xA0', '\\xA0»', '‹\\xA0', '\\xA0›'] 给法国人使用(包括 nbsp)。\n quotes: '“”‘’',\n \n // 高亮函数,会返回转义的HTML。\n // 或 '' 如果源字符串未更改,则应在外部进行转义。\n // 如果结果以 <pre ... 开头,内部包装器则会跳过。\n // highlight: function (/*str, lang*/) { return ''; }\n highlight: function (str:any, lang:any) {\n if (lang && hljs.getLanguage(lang)) {\n try {\n let hljsCode = hljs.highlight(str, { language: lang }).value\n return `<pre style=\"position:relative;padding:10px;\" class=\"hljs lang-${lang}\"><code>${hljsCode}</code><small class=\"hljs-lang\"><span class=\"sr-only\">Language:</span>${lang}</small></pre>`;\n } catch (__) {}\n }\n \n return ''; // use external default escaping\n }\n });\n \n \n \n md.use(abbr)\n md.use(footnote)\n md.use(deflist)\n md.use(mark)\n md.use(ins)\n md.use(sub);\n md.use(sup);\n\n // md.use(katex);\n\n // md.use(figure, {\n // render: (content, displayMode) => {\n // // render tex here and return\n // },\n // }); // 加载@mdit/tex 被mathjax依赖\n // const mathjaxInstance = createMathjaxInstance({output:\"svg\"});\n // md.use(mathjax,mathjaxInstance)\n // import MathJax from 'mathjax';\n // (window as any).MathJax = MathJax;\n // (window as any).markdownitMathjax = {\n // messageStyle: 'none',\n // skipStartupTypeset: true,\n // tex2jax: {\n // inlineMath: [['$', '$'], ['\\\\[', '\\\\]'],['\\\\(', '\\\\)']],\n // processEscapes: true\n // },\n // TeX: {\n // extensions: ['mhchem.js']\n // }\n // };\n\n // (window as any).MathJax = {\n // messageStyle: 'none',\n // skipStartupTypeset: true,\n // tex2jax: {\n // inlineMath: [['$', '$'], ['\\\\(', '\\\\)']],\n // processEscapes: true\n // },\n // TeX: {\n // extensions: ['mhchem.js']\n // }\n // }\n\n // md.use(mathjax3)\n // md.use(mathjax())\n // md.use(mathjax({\n // beforeMath: '<span class=\"mathjax raw\">',\n // afterMath: '</span>',\n // beforeInlineMath: '<span class=\"mathjax raw\">\\\\(',\n // afterInlineMath: '\\\\)</span>',\n // beforeDisplayMath: '<span class=\"mathjax raw\">\\\\[',\n // afterDisplayMath: '\\\\]</span>'\n // }))\n\n // md.use(imsize)\n md.use(ruby)\n \n /**\n * PlantUML 插件\n */\n const mditConfig = {\n plantumlServer:'https://www.plantuml.com/plantuml'\n }\n \n import plantumlEncoder from 'plantuml-encoder'\n /**\n * uml代码转图片地址方法\n * @param {*} umlCode \n * @returns \n * @example\n * console.log(makePlantumlURL(`@startuml\n start\n :创建本地仓库;\n :运行git init;\n :使用git add .;\n :使用git commit -m \"xxx\";\n :使用git remote add origin xxx;\n :使用git push -u origin \"master\";\n stop\n @enduml`))\n */\n\n\n\n function makePlantumlURL(umlCode:any){\n const format = 'svg'\n const code = plantumlEncoder.encode(umlCode)\n return `${mditConfig.plantumlServer}/${format}/${code}`\n }\n \n\n // https://github.com/qjebbs/vscode-plantuml/tree/master/src/markdown-it-plantuml\n md.renderer.rules['plantuml'] = (tokens:any, idx:any, options:any, env:any, self:any) => {\n const token = tokens[idx]\n if (token.type !== 'plantuml') {\n return tokens[idx].content\n }\n const url = makePlantumlURL(token.content)\n return `\n <img src=\"${url}\" />\n <pre style=\"position:relative;padding:10px;\" class=\"hljs lang-plantuml\"><code>${token.content}</code><small class=\"hljs-lang\"><span class=\"sr-only\">Language:</span>plantuml</small></pre>\n `\n}\n// https://github.com/qjebbs/vscode-plantuml/tree/master/src/markdown-it-plantuml\n// 默认不支持rules['plantuml'] 需要通过ruler push\nmd.core.ruler.push('plantuml', (state:any) => {\n const blockTokens = state.tokens\n for (const blockToken of blockTokens) {\n if (blockToken.type === 'fence' && blockToken.info === 'plantuml') {\n blockToken.type = 'plantuml'\n }\n }\n })\n\n // regex for extra tags\n const spaceregex = /\\s*/\n const notinhtmltagregex = /(?![^<]*>|[^<>]*<\\/)/\n let coloregex = /\\[color=([#|(|)|\\s|,|\\w]*?)\\]/\ncoloregex = new RegExp(coloregex.source + notinhtmltagregex.source, 'g')\nlet nameregex = /\\[name=(.*?)\\]/\nlet timeregex = /\\[time=([:|,|+|-|(|)|\\s|\\w]*?)\\]/\nconst nameandtimeregex = new RegExp(nameregex.source + spaceregex.source + timeregex.source + notinhtmltagregex.source, 'g')\nnameregex = new RegExp(nameregex.source + notinhtmltagregex.source, 'g')\ntimeregex = new RegExp(timeregex.source + notinhtmltagregex.source, 'g')\n\nfunction replaceExtraTags (html:any) { \n console.log(\"replaceExtraTags\",html)\n html = html.replace(coloregex, '<span class=\"color\" data-color=\"$1\"></span>')\n html = html.replace(nameandtimeregex, '<small><i class=\"fa fa-user\"></i> $1 <i class=\"fa fa-clock-o\"></i> $2</small>')\n html = html.replace(nameregex, '<small><i class=\"fa fa-user\"></i> $1</small>')\n html = html.replace(timeregex, '<small><i class=\"fa fa-clock-o\"></i> $1</small>')\n console.log(\"replaceExtraTags\",html)\n return html\n}\n\n\n// 生命周期:生成HTML后,动态修正生成内容:dynamic event or object binding here\nfunction finishView (html:any) {\n\n let mdDivEl = $.parseHTML(`<html><body><div id=\"topmd\">${html}</div></body></html>`)[0]\n let mdhtml$ = $(mdDivEl)\n\n /************************************************\n * 第一步:需操作DOM,进行页面修正\n */\n /**\n * BlockQuote 引用增强插件\n */\n // blockquote 修正引用标签\n let blockquote = mdhtml$.find('blockquote.raw').removeClass('raw')\n blockquote = mdhtml$.find('blockquote')\n\n let blockquoteP = $(blockquote).find('p')\n blockquoteP.each((key:any, value:any) => {\n let htmlStr = $(value).html()\n htmlStr = replaceExtraTags(htmlStr)\n value.innerHTML = htmlStr\n $(value).html(htmlStr)\n blockquoteP[key].innerHTML = htmlStr;\n $(blockquoteP[key]).html(htmlStr)\n })\n\n // 引用标签颜色渲染 color tag in blockquote will change its left border color\n let blockquoteColor = blockquote.find('.color')\n blockquoteColor.each((key:any, value:any) => {\n let dataColor:any = $(value).attr('data-color')\n $(value).closest('blockquote').css('border-left-color', dataColor)\n })\n\n \n let style = `<style>\n .markdown-section {\n color: black;\n text-align: left;\n }\n .markdown-section pre .hljs-lang{\n text-transform: uppercase;\n font-weight: 700;\n font-size: .75rem;\n line-height: 1rem;\n padding-top: .25rem;\n padding-bottom: .25rem;\n padding-left: .5rem;\n padding-right: .5rem;\n background-color: rgba(0,0,0,.3);\n border-bottom-left-radius: .375rem;\n top:0;\n right:0;\n position:absolute;\n}\n\n }\n .markdown-section pre .hljs {\n position:relative!important;\n background: #272822!important;\n padding:10px!important;\n color: #ddd;\n text-shadow: none!important;\n }\n\n .markdown-section blockquote {\n margin: 0;\n margin-bottom: 0px;\n margin-bottom: .85em;\n padding: 0 15px;\n color: #858585;\n border-left: 4px solid #e5e5e5;\n border-left-color: rgb(229, 229, 229);\n }\n .markdown-section img {\n max-width:100%;\n }\n </style>`\n let result = style + (mdhtml$.html() || html)\n\n /************************************************\n * 第二步:无需操作DOM,替换文本信息\n */\n /**\n * uploads 修正附件地址\n */\n result = result.replaceAll('src=\"/uploads/','src=\"https://md.fmode.cn/uploads/')\n return result\n}\n\nexport class MarkdownParse{\n constructor(){\n } \n\n parseToHTML(markdown:any){\n this.info(\"markdown\",markdown)\n\n // 由于md=>html会转义原文本中的 \\( 为 (,\\[ 为 [,因此需要先mathjax转换再转markdown\n let mdMathJax = new MarkdownMathJax()\n markdown = mdMathJax.text_to_mathjax(markdown,{\n output:\"svg\"\n });\n\n let htmlResult = md.render(markdown);\n\n // this.info(\"html\",htmlResult)\n htmlResult = finishView(htmlResult);\n // this.info(\"html plus\",htmlResult)\n return htmlResult;\n }\n info(...args:any){\n // console.log(...args)\n }\n // Markdown Text to HTML\n // HTML DOM to Enhance HTML DOM\n}","import { AfterViewInit, Component, ElementRef, Input, Renderer2, ViewChild } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\nimport {MarkdownParse} from \"./markdown-parse\";\n\n/**\n * Markdown 文档高级渲染组件\n * @name fm-markdown-preview\n * @public\n */\n@Component({\n selector: 'fm-markdown-preview',\n templateUrl: './markdown-preview.component.html',\n styleUrls: ['./markdown-preview.component.scss']\n})\nexport class MarkdownPreviewComponent implements AfterViewInit {\n @Input() content:string = ``\n safeHTML:SafeHtml\n\n @ViewChild('mdContent') mdContent: ElementRef;\n \n /**\n * 是否开启MD渲染,默认开启\n * @default true\n */\n @Input() render:boolean = true\n constructor(\n private domSan:DomSanitizer,\n private renderer:Renderer2\n ){\n }\n\n ngAfterViewInit(){\n this.renderMdToHTML()\n }\n\n renderMdToHTML(){\n if(!this.render) return\n let mdparser = new MarkdownParse()\n let htmlResult = mdparser.parseToHTML(this.content)\n this.safeHTML = this.domSan.bypassSecurityTrustHtml(htmlResult)\n\n let mdDiv = this.renderer.createElement(\"div\");\n mdDiv.innerHTML = htmlResult;\n // console.log(mdDiv.innerHTML)\n\n this.renderer.appendChild(this.mdContent.nativeElement,mdDiv)\n \n }\n}\n","<div class=\"message-body\">\n <div *ngIf=\"render\" #mdContent class=\"markdown-section\">\n </div>\n <div *ngIf=\"!render\" class=\"pre-section\">\n {{content}}\n </div>\n</div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MarkdownPreviewComponent } from './markdown-preview.component';\n\n\n@NgModule({\n declarations: [\n MarkdownPreviewComponent\n ],\n imports: [\n CommonModule,\n ],\n exports:[\n MarkdownPreviewComponent\n ]\n})\nexport class MarkdownPreviewModule { }\n","import { Injectable } from '@angular/core';\nimport { ToastController } from '@ionic/angular';\nimport { Clipboard } from '@capacitor/clipboard';\n\n/**\n * 剪贴板服务:支持H5、微信、移动端\n * @public\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class ClipboardService {\n\n constructor(\n private toastCtrl:ToastController\n ) { \n\n }\n async copyToClipboard(content){\n try{\n await Clipboard.write({\n string: content\n });\n this.copySuccess()\n return\n }catch(error1){\n try{\n if (navigator.clipboard && window.isSecureContext) {\n await navigator?.clipboard?.writeText(content)\n this.copySuccess()\n return\n }else{\n throw false\n }\n }catch(error2){\n // 旧的方式\n // 创建一个文本域元素\n let textArea = document.createElement(\"textarea\");\n textArea.value = content;\n\n // 使文本域不在视线范围内\n textArea.style.position = \"fixed\";\n textArea.style.left = \"-9999px\";\n textArea.style.top = \"-9999px\";\n\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select(); // 选中文本\n\n try {\n // 执行复制命令\n let successful = document?.execCommand('copy');\n if (successful) {\n this.copySuccess();\n } else {\n console.error('无法复制文本');\n }\n } catch (err) {\n console.error('无法复制文本: ', err);\n }\n // 移除文本域\n document.body.removeChild(textArea);\n }\n }\n }\n async copySuccess(){\n let toast = await this.toastCtrl.create({\n duration:1000,\n message:\"复制成功\",\n color:'primary',\n icon:\"information-circle\",\n position:\"top\"\n })\n toast.present();\n }\n}\n\n\n\n\n\n","\nexport function pcmtoWav(pcmsrt, sampleRate, numChannels, bitsPerSample) {\n //参数->(base64编码的pcm流,采样频率,声道数,采样位数)\n let header = {\n // OFFS SIZE NOTES\n chunkId: [0x52, 0x49, 0x46, 0x46], // 0 4 \"RIFF\" = 0x52494646\n chunkSize: 0, // 4 4 36+SubChunk2Size = 4+(8+SubChunk1Size)+(8+SubChunk2Size)\n format: [0x57, 0x41, 0x56, 0x45], // 8 4 \"WAVE\" = 0x57415645\n subChunk1Id: [0x66, 0x6d, 0x74, 0x20], // 12 4 \"fmt \" = 0x666d7420\n subChunk1Size: 16, // 16 4 16 for PCM\n audioFormat: 1, // 20 2 PCM = 1\n numChannels: numChannels || 1, // 22 2 Mono = 1, Stereo = 2...\n sampleRate: sampleRate || 16000, // 24 4 8000, 44100...\n byteRate: 0, // 28 4 SampleRate*NumChannels*BitsPerSample/8\n blockAlign: 0, // 32 2 NumChannels*BitsPerSample/8\n bitsPerSample: bitsPerSample || 16, // 34 2 8 bits = 8, 16 bits = 16\n subChunk2Id: [0x64, 0x61, 0x74, 0x61], // 36 4 \"data\" = 0x64617461\n subChunk2Size: 0, // 40 4 data size = NumSamples*NumChannels*BitsPerSample/8\n }\n function u32ToArray(i) {\n return [i & 0xff, (i >> 8) & 0xff, (i >> 16) & 0xff, (i >> 24) & 0xff]\n }\n function u16ToArray(i) {\n return [i & 0xff, (i >> 8) & 0xff]\n }\n let pcm = new Uint8Array(pcmsrt)\n header.blockAlign = (header.numChannels * header.bitsPerSample) >> 3\n header.byteRate = header.blockAlign * header.sampleRate\n header.subChunk2Size = pcm.length * (header.bitsPerSample >> 3)\n header.chunkSize = 36 + header.subChunk2Size\n\n let wavHeader = header.chunkId.concat(\n u32ToArray(header.chunkSize),\n header.format,\n header.subChunk1Id,\n u32ToArray(header.subChunk1Size),\n u16ToArray(header.audioFormat),\n u16ToArray(header.numChannels),\n u32ToArray(header.sampleRate),\n u32ToArray(header.byteRate),\n u16ToArray(header.blockAlign),\n u16ToArray(header.bitsPerSample),\n header.subChunk2Id,\n u32ToArray(header.subChunk2Size)\n )\n let wavHeaderUnit8 = new Uint8Array(wavHeader)\n\n let mergedArray = new Uint8Array(wavHeaderUnit8.length + pcm.length)\n mergedArray.set(wavHeaderUnit8)\n mergedArray.set(pcm, wavHeaderUnit8.length)\n let blob = new Blob([mergedArray], { type: 'audio/wav' })\n let blobUrl = window.URL.createObjectURL(blob)\n return blobUrl\n}\n","export function resampleAudio(frameBuffer: number[], inputSampleRate: number, outputSampleRate: number): number[] {\n let inputLength = frameBuffer.length;\n let outputLength = Math.floor((inputLength / inputSampleRate) * outputSampleRate);\n let outputBuffer: number[] = [];\n \n for (let i = 0; i < outputLength; i++) {\n let index = Math.floor(i * (inputSampleRate / outputSampleRate));\n outputBuffer[i] = frameBuffer[index];\n }\n \n return outputBuffer;\n }\n\nexport function convertFrameBufferToBase64(frameBuffer: number[]): string {\n// 创建一个存储转换后数据的Uint8Array\nconst uint8Array = new Uint8Array(frameBuffer.length * 2); // 16位小端LE,每个样本占用2个字节\n\n// 将frameBuffer中的每个样本转换为16位小端字节序\nfor (let i = 0; i < frameBuffer.length; i++) {\n const sample = frameBuffer[i];\n uint8Array[i * 2] = sample & 0xff; // 低字节\n uint8Array[i * 2 + 1] = (sample >> 8) & 0xff; // 高字节\n}\n\n// 使用btoa函数将Uint8Array转换为base64字符串\nconst base64String = btoa(String.fromCharCode.apply(null, uint8Array));\n\nreturn base64String;\n}\n\nexport function resampleBuffer(buffer: Int16Array, fromRate: number, toRate: number): Int16Array {\n const ratio = fromRate / toRate;\n const length = Math.round(buffer.length / ratio);\n const result = new Int16Array(length);\n\n for (let i = 0; i < length; i++) {\n const j = Math.floor(i * ratio);\n result[i] = buffer[j];\n }\n\n return result;\n}","import { Platform } from \"@ionic/angular\"\n\n/**\n * 英文语音唤醒\n */\ndeclare var webkitSpeechRecognition:any\nconst SpeechRecognition = (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition\nconst SpeechGrammarList = (window as any).SpeechGrammarList || (window as any).webkitSpeechGrammarList\nexport class WebSpeech{\n constructor(\n private platform:Platform\n ){}\n /**\n * 语音识别\n * @desc\n * 注意:需要校验说话开始和结束时间2-3秒后,自动结束语音听取\n * @see\n * https://www.jianshu.com/p/e42638839475\n * @param word \n */\n recognition:any\n startRecognition(words=\"Nihao | Hello\"){\n if(!SpeechRecognition) return\n if(this.recognition)this.recognition.stop();\n console.log(\"startRecognition\")\n this.recognition = new SpeechRecognition();\n if(!this.recognition) return\n // this.recognition.lang = \"zh-CH\";\n this.recognition.continuous = true; // 持续识别不间断\n let grammar =\n `#JSGF V1.0; grammar words; public <word> = ${words} ;`;\n this.recognition = new SpeechRecognition();\n let speechRecognitionList = new SpeechGrammarList();\n speechRecognitionList.addFromString(grammar, 1);\n this.recognition.grammars = speechRecognitionList;\n this.recognition.start();\n this.recognition.onresult = (event)=>{ \n let results = event.results || []\n console.log(results)\n console.log(results[0]?.[0])\n if(results[0]?.[0]?.transcript?.indexOf(\"Nihao\")>-1){\n console.log(\"Nihao成功唤醒\")\n }\n if(results[0]?.[0]?.transcript?.indexOf(\"Hello\")>-1){\n console.log(\"Hello成功唤醒\")\n }\n this.startRecognition(); // 单词唤醒后,持续唤醒\n }\n this.recognition.onend = (event)=>{\n console.log(event)\n // this.startRecognition()\n }\n this.recognition.onerror = (err)=>{\n console.error(err)\n // this.startRecognition()\n }\n }\n\n /**\n * TTS合成\n * @param sentence:要说的句子\n * @param pitch: 音调,取值范围(0 - 2) 默认值:1\n * @param rate: 语速,取值范围(0.1 - 10) 默认值:1\n * @param volume: 音量,取值范围(0 - 1) 默认值:0.5\n * @see\n * https://zhuanlan.zhihu.com/p/141582231\n */\n speak(sentence, pitch=1,rate=1.2,volume=0.8) {\n // 优先插件播放\n if(this.platform.is(\"capacitor\")){\n\n return\n }\n\n // 保底Web播放\n this.speakWithEdge(sentence, pitch=1,rate=1.2,volume=0.8)\n }\n speakWithEdge(sentence, pitch=1,rate=1.2,volume=0.8){\n // window.speechSynthesis.pause();\n let utterance = new SpeechSynthesisUtterance(sentence)\n let voice = this.getVoiceByName(\"Yaoyao\");\n console.log(voice)\n if(voice) {\n utterance.voice = voice\n }\n utterance.rate = rate\n utterance.pitch = pitch\n utterance.volume = 10 // volume\n\n window.speechSynthesis.speak(utterance)\n }\n getVoiceByName(name){\n let voices = window.speechSynthesis.getVoices()\n let voice = voices.find(v=>v.name.indexOf(name)>-1)\n return voice\n }\n}","import { EventEmitter, Injectable, Output } from '@angular/core';\n// import RecorderManager from \"./lib/xunfei-recorder\"\n// import {RecorderManager} from \"./lib/recorder/recorder-manager\"\nimport Recorder from 'recorder-core'\nimport 'recorder-core/src/engine/pcm'\nimport 'recorder-core/src/engine/wav'\nimport 'recorder-core/src/extensions/waveview'\nimport CryptoJS from \"crypto-js\"\nimport { pcmtoWav } from './lib/pcm2wav';\nimport { convertFrameBufferToBase64, resampleAudio, resampleBuffer } from './lib/resample';\nimport { WebSpeech } from './class-asr';\nimport { Platform } from '@ionic/angular';\nimport { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';\n// import { FmodeTTSXunfei } fro./class-tts-xunfei.ts.bakfei'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FmodeVoiceService {\n\n /**\n * 关闭ASR:用于测试其他功能时,可关闭ASR节省语音接口消耗\n */\n disableASR:false;\n /**\n * 讯飞TTS语音合成\n */\n // ttsXunfei = new FmodeTTSXunfei()\n /**\n * WebSpeech 语音库\n */\n webSpeech = WebSpeech\n constructor(\n private platform:Platform,\n private diagnostic: Diagnostic, \n ) { \n this.requestPermission();\n // this.recorder.on(\"start\",() => {\n // })\n\n // this.recorder.on(\"frameRecorded\", ({ isLastFrame, frameBuffer }) => {\n // if (this.iatWS.readyState === this.iatWS.OPEN) {\n // this.iatWS.send(\n // JSON.stringify({\n // data: {\n // status: isLastFrame ? 2 : 1,\n // format: \"audio/L16;rate=16000\",\n // encoding: this.encodingType,\n // audio: this.toBase64(frameBuffer),\n // },\n // })\n // );\n // if (isLastFrame) {\n // this.changeBtnStatus(\"CLOSING\");\n // }\n // }\n // })\n\n // this.recorder.on(\"stop\",() => {\n // })\n\n\n }\n\n\n\n /**\n * 用户操作:录音按钮快捷触发操作\n */\n toggleRecord(){\n console.log(this.btnStatus)\n if (this.btnStatus === \"UNDEFINED\" || this.btnStatus === \"CLOSED\") {\n // 开始讲话\n this.startTalk()\n } else if (this.btnStatus === \"CONNECTING\" || this.btnStatus === \"OPEN\") {\n // 结束录音 并发送消息等待回复\n this.finishTalk()\n }\n }\n /**\n * 用户操作:完成录音,并处理转录结果\n */\n finishTalk(){\n this.onBeforeFinishTalk&&this.onBeforeFinishTalk()\n this.recordStop()\n setTimeout(() => {\n // 等待语音转义完成,处理转录结果\n // 需要准确判断websocket已经close了\n this.onAfterFinishTalk&&this.onAfterFinishTalk()\n }, 1000);\n }\n onBeforeFinishTalk: Function\n onAfterFinishTalk: Function\n /**\n * 用户操作:开始讲话,实时转录语言\n */\n async startTalk(evnet?){\n this.onBeforeStartTalk&&this.onBeforeStartTalk()\n event?.preventDefault()\n await this.openWithPriviledge()\n setTimeout(() => {\n this.connectWebSocket()\n }, 100);\n\n this.onAfterStartTalk&&this.onAfterStartTalk()\n }\n onBeforeStartTalk: Function\n onAfterStartTalk: Function\n \n /**\n * 用户操作:取消讲话,且不发送结果\n */\n cancelTalk(){\n this.onBeforeCancelTalk&&this.onBeforeCancelTalk()\n this.recordStop(); // 停止录制\n this.iatWS.close(); // 断开连接\n this.resultText = null; // 设置转录结果为空\n this.onAfterCancelTalk&&this.onAfterCancelTalk()\n }\n /**\n * 操作回调\n */\n onBeforeCancelTalk: Function\n onAfterCancelTalk: Function\n\n /**\n * 程序逻辑\n */\n async recordStart(){\n this.createRecorder();\n await this.openWithPriviledge()\n this.recorder.start();\n this.changeBtnStatus(\"OPEN\");\n }\n recordStop(){\n // console.log(\"record Stop trigger\")\n this.recorder?.stop((blob:Blob,duration:number)=>{\n\n //录音结束后,发送录音结束帧\n this.iatWS.send(\n JSON.stringify({\"data\":{\"status\":2,\"format\":\"audio/L16;rate=16000\",\"encoding\":this.encodingType,\"audio\":\"\"}})\n );\n\n //简单利用URL生成本地文件地址,注意不用了时需要revokeObjectURL,否则霸占内存\n //此地址只能本地使用,比如赋值给audio.src进行播放,赋值给a.href然后a.click()进行下载(a需提供download=\"xxx.mp3\"属性)\n let localUrl=(window.URL||webkitURL).createObjectURL(blob);\n console.log(blob,localUrl,\"时长:\"+duration+\"ms\");\n this.recordPcmBlob = blob\n this.recorder.close();//释放录音资源,当然可以不释放,后面可以连续调用start;但不释放时系统或浏览器会一直提示在录音,最佳操作是录完就close掉\n this.recorder=null;\n \n //已经拿到blob文件对象想干嘛就干嘛:立即播放、上传、下载保存\n \n /*** 【立即播放例子】 ***/\n // this.audioPlayer= new Audio();\n // this.audioPlayer.controls=true;\n // this.audioPlayer.src=localUrl;\n console.log(\"localUrl\",localUrl)\n },(msg)=>{\n console.log(\"录音失败:\"+msg);\n this.recorder.close();//可以通过stop方法的第3个参数来自动调用close\n this.recorder=null;\n })\n clearInterval(this.countdownInterval);\n this.changeBtnStatus(\"CLOSED\");\n }\n recordPcmBlob:Blob = null\n playRecord(){\n this.playPCM(this.recordPcmBlob,44100)\n }\n playPCM(pcmBlob, sampleRate) {\n let fileReader = new FileReader();\n \n // 读取Blob数据\n fileReader.onload = function(event) {\n let pcmData:any = event.target.result;\n // Convert PCM data to WAV format\n let wavUrl = pcmtoWav(pcmData, sampleRate,1,16);\n let audio = new Audio();\n audio.src = wavUrl;\n audio.play();\n };\n \n // 将Blob转换为ArrayBuffer\n fileReader.readAsArrayBuffer(pcmBlob);\n }\n buffers:Array<any>\n async playBuffers(){\n // let audioBuffer = []\n // this.buffers.forEach(buffer=>{\n // audioBuffer.push(buffer)\n // })\n let audioBlob = await this.BuffersToBlob(this.buffers)\n this.playPCM(audioBlob,44100)\n }\n BuffersToBlob(buffers) {\n let audioBuffer:any = []\n buffers.forEach(buffer=>{\n buffer.forEach(int16=>{\n audioBuffer.push(int16)\n })\n })\n return new Blob([audioBuffer], { type: 'audio/pcm' });\n }\n // 将录音数据分割为每次发送的音频片段 1280字节\n splitAudioData(audioData) {\n const segmentSize = 1280; // 目标切片大小,单位为字节\n const segmentCount = Math.ceil(audioData.length / segmentSize); // 切片数量\n const segments = [];\n \n for (let i = 0; i < segmentCount; i++) {\n const start = i * segmentSize;\n const end = start + segmentSize;\n const segment = audioData.slice(start, end);\n \n segments.push(segment);\n }\n \n return segments;\n }\n BufferToBlob(buffer) {\n return new Blob([buffer], { type: 'audio/pcm' });\n }\n recordType = \"pcm\"\n encodingType = \"raw\"\n createRecorder(){\n if(this.recorder) return\n this.recorder = Recorder({ //本配置参数请参考下面的文档,有详细介绍\n type:this.recordType,sampleRate:44100,bitRate:16 //pcm格式,指定采样率hz、比特率kbps,其他参数使用默认配置;注意:是数字的参数必须提供数字,不要用字符串;需要使用的type类型,需提前把格式支持文件加载进来,比如使用wav格式需要提前加载wav.js编码引擎\n ,onProcess:(buffers,powerLevel,bufferDuration,bufferSampleRate,newBufferIdx,asyncEnd)=>{\n //录音实时回调,大约1秒调用12次本回调,buffers为开始到现在的所有录音pcm数据块(16位小端LE)\n //可利用extensions/sonic.js插件实时变速变调,此插件计算量巨大,onProcess需要返回true开启异步模式\n //可实时上传(发送)数据,配合Recorder.SampleData方法,将buffers中的新数据连续的转换成pcm上传,或使用mock方法将新数据连续的转码成其他格式上传,可以参考文档里面的:Demo片段列表 -> 实时转码并上传-通用版;基于本功能可以做到:实时转发数据、实时保存数据、实时语音识别(ASR)等\n // 实时发送录音至接口\n // console.log(\"asyncEnd:\",asyncEnd)\n // console.log(buffers.length,bufferDuration,bufferSampleRate,newBufferIdx)\n let isLastFrame = false && this.btnStatus==\"CLOSED\"; // 主动关闭作为最后帧\n // 录音默认为 44100 采样率 pcm不支持再process中实时转换\n // 需要压缩为 16000 上传\n let frameBuffer = buffers.length&&buffers[buffers.length-1];\n this.buffers = buffers\n frameBuffer = resampleBuffer(frameBuffer,44100,16000);\n // this.playPCM(this.BufferToBlob(frameBuffer),16000) // 切片数据播放,采样率测试\n\n if (this.iatWS.readyState === this.iatWS.OPEN) {\n if(this.disableASR) return\n this.iatWS.send(\n JSON.stringify({\n data: {\n status: isLastFrame ? 2 : 1,\n format: \"audio/L16;rate=16000\",\n encoding: this.encodingType,\n audio: convertFrameBufferToBase64(frameBuffer)// this.toBase64(audioData),\n },\n })\n );\n \n if (isLastFrame) {\n this.changeBtnStatus(\"CLOSING\");\n }\n }\n //可实时绘制波形(extensions目录内的waveview.js、wavesurfer.view.js、frequency.histogram.view.js插件功能)\n this.waveClient?.input(buffers[buffers.length-1],powerLevel,bufferSampleRate);\n }\n });\n }\n \n async openWithPriviledge(){\n console.log(this.btnStatus)\n await this.requestPermission();\n this.createRecorder();\n if(Recorder.IsOpen()) return true\n return new Promise(resolve=>{\n //var dialog=createDelayDialog(); 我们可以选择性的弹一个对话框:为了防止移动端浏览器存在第三种情况:用户忽略,并且(或者国产系统UC系)浏览器没有任何回调,此处demo省略了弹窗的代码\n this.recorder.open(()=>{//打开麦克风授权获得相关资源\n //dialog&&dialog.Cancel(); 如果开启了弹框,此处需要取消\n //rec.start() 此处可以立即开始录音,但不建议这样编写,因为open是一个延迟漫长的操作,通过两次用户操作来分别调用open和start是推荐的最佳流程\n //创建可视化,指定一个要显示的div\n if(Recorder.WaveView)this.waveClient=Recorder.WaveView({elem:\".record-wave\"});\n resolve(true);\n },(msg,isUserNotAllow)=>{//用户拒绝未授权或不支持\n //dialog&&dialog.Cancel(); 如果开启了弹框,此处需要取消\n console.log((isUserNotAllow?\"UserNotAllow,\":\"\")+\"无法录音:\"+msg);\n });\n })\n\n }\n\n connStatus = \"\" // 录音中 建立连接中 关闭连接中\n\n btnStatus = \"UNDEFINED\"; // \"UNDEFINED\" \"CONNECTING\" \"OPEN\" \"CLOSING\" \"CLOSED\"\n\n waveClient:any // 用户波形\n recorder:any\n // recorder = new RecorderManager();\n // recorder = new RecorderManager(\"./lib/xunfei-recorder\");\n \n iatWS;\n resultText = \"\";\n resultTextTemp = \"\";\n countdownInterval;\n\n /**\n * 获取websocket url\n * 该接口需要后端提供,这里为了方便前端处理\n */\n APPID = \"23265215\";\n API_SECRET = \"YzMzMWUzMmFkYjU2ZjE5OTc4M2Q1NjE1\";\n API_KEY = \"8c58aa034946e1de30f2b145cf0cc3c3\";\n getWebSocketUrl() {\n // 请求地址根据语种不同变化\n let url = \"wss://iat-api.xfyun.cn/v2/iat\";\n let host = \"iat-api.xfyun.cn\";\n \n let apiKey = this.API_KEY;\n let apiSecret = this.API_SECRET;\n let date = new Date().toUTCString();\n let algorithm = \"hmac-sha256\";\n let headers = \"host date request-line\";\n let signatureOrigin = `host: ${host}\\ndate: ${date}\\nGET /v2/iat HTTP/1.1`;\n let signatureSha = CryptoJS.HmacSHA256(signatureOrigin, apiSecret);\n let signature = CryptoJS.enc.Base64.stringify(signatureSha);\n let authorizationOrigin = `api_key=\"${apiKey}\", algorithm=\"${algorithm}\", headers=\"${headers}\", signature=\"${signature}\"`;\n let authorization = btoa(authorizationOrigin);\n url = `${url}?authorization=${authorization}&date=${date}&host=${host}`;\n return url;\n }\n\n toBase64(buffer) {\n var binary = \"\";\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return window.btoa(binary);\n }\n\n /**\n * 倒计时:最长支持60秒实时语音转录,如果持续7-10秒无声音,服务端将自动CLOSE链接\n */\n countdown() {\n let seconds = 60;\n this.connStatus = `录音中(${seconds}s)`;\n this.countdownInterval = setInterval(() => {\n seconds = seconds - 1;\n console.log(seconds);\n if (seconds <= 0) {\n clearInterval(this.countdownInterval);\n this.recordStop();\n } else {\n this.connStatus = `录音中(${seconds}s)`;\n }\n }, 1000);\n }\n\n changeBtnStatus(status) {\n this.btnStatus = status;\n if (status === \"CONNECTING\") {\n this.connStatus = \"建立连接中\";\n this.resultText = \"\";\n this.resultTextTemp = \"\";\n } else if (status === \"OPEN\") {\n this.countdown();\n } else if (status === \"CLOSING\") {\n this.connStatus = \"关闭连接中\";\n } else if (status === \"CLOSED\") {\n this.connStatus = \"开始录音\";\n }\n }\n\n renderResult(resultData) {\n // 识别结束\n let jsonData = JSON.parse(resultData);\n // console.log(jsonData.data.result)\n if (jsonData.data && jsonData.data.result) {\n let data = jsonData.data.result;\n let str = \"\";\n let ws = data.ws;\n for (let i = 0; i < ws.length; i++) {\n str = str + ws[i].cw[0].w;\n console.log(str)\n }\n // 开启wpgs会有此字段(前提:在控制台开通动态修正功能)\n // 取值为 \"apd\"时表示该片结果是追加到前面的最终结果;取值为\"rpl\" 时表示替换前面的部分结果,替换范围为rg字段\n if (data.pgs) {\n if (data.pgs === \"apd\") {\n // 将this.resultTextTemp同步给this.resultText\n this.resultText = this.resultTextTemp;\n }\n // 将结果存储在this.resultTextTemp中\n this.resultTextTemp = this.resultText + str;\n } else {\n this.resultText = this.resultText + str;\n }\n this.resultTextTemp || this.resultText || \"\";\n }\n if (jsonData.code === 0 && jsonData.data.status === 2) {\n this.iatWS.close();\n }\n if (jsonData.code !== 0) {\n this.iatWS.close();\n console.error(jsonData);\n }\n }\n\n connectWebSocket() {\n console.log(\"connectWebSocket\");\n const websocketUrl = this.getWebSocketUrl();\n if (\"WebSocket\" in window) {\n this.iatWS = new WebSocket(websocketUrl);\n } else if (\"MozWebSocket\" in window) {\n // this.iatWS = new MozWebSocket(websocketUrl); // Moz兼容\n } else {\n alert(\"浏览器不支持WebSocket\");\n return;\n }\n console.log(\"connectWebSocket\",this.btnStatus);\n this.changeBtnStatus(\"CONNECTING\");\n this.iatWS.onopen = (e) => {\n // 开始录音\n this.recordStart();\n var params = {\n common: {\n app_id: this.APPID,\n },\n business: {\n language: \"zh_cn\",\n domain: \"iat\",\n accent: \"mandarin\",\n vad_eos: 5000,\n dwa: \"wpgs\",\n },\n data: {\n status: 0,\n format: \"audio/L16;rate=16000\",\n encoding: this.encodingType,\n // encoding: \"speex-wb\",\n },\n };\n this.iatWS.send(JSON.stringify(params));\n };\n this.iatWS.onmessage = (e) => {\n this.renderResult(e.data);\n };\n this.iatWS.onerror = (e) => {\n console.error(\"error\",e);\n this.recordStop();\n this.changeBtnStatus(\"CLOSED\");\n };\n this.iatWS.onclose = (e) => {\n // 5秒停顿会导致结束录制\n console.error(\"close\",e)\n this.recordStop();\n this.changeBtnStatus(\"CLOSED\");\n };\n }\n\n /**\n * 移动端兼容方法\n */\n\n /**\n * 移动端上传专用方法\n * @returns \n */\n isCapacitor(){\n return this.platform.is(\"capacitor\") || this.platform.is(\"cordova\")\n }\n async requestPermission(){\n if(!this.isCapacitor()) return\n try{\n await this.requestStoagePermission();\n await this.requestCameraPermission();\n await this.requestMicPermission();\n await this.requestRecordAudioPermission();\n }catch(err){\n console.error(err)\n }\n }\n async requestRecordAudioPermission(){\n let data = await this.diagnostic.requestRuntimePermissions([this.diagnostic.permission.RECORD_AUDIO])\n console.log(\"record permission request:\",data)\n return\n }\n async requestMicPermission(){\n let isAvailable = await this.diagnostic.isMicrophoneAuthorized()\n console.log(\"permisson_MIC:\", isAvailable)\n if (!isAvailable) {\n let data = await this.diagnostic.requestMicrophoneAuthorization()\n }\n return\n }\n async requestStoagePermission(){\n let isAvailable = await this.diagnostic.isExternalStorageAuthorized()\n console.log(\"permisson_STORAGE:\", isAvailable)\n if (!isAvailable) {\n let data = await this.diagnostic.requestExternalStorageAuthorization()\n }\n return\n }\n async requestCameraPermission(){\n let isAvailable = await this.diagnostic.isCameraAuthorized()\n console.log(\"permisson_Camera:\", isAvailable)\n if (!isAvailable) {\n let data = await this.diagnostic.requestCameraAuthorization()\n }\n return\n }\n}\n","\nimport * as BABYLON from '@babylonjs/core';\nimport '@babylonjs/loaders';\nimport { AvatarRole } from './avatar.role';\n\nexport class RolePointsCloud implements AvatarRole{\n scene:BABYLON.Scene\n engine:BABYLON.Engine\n constructor(scene,engine,camera){\n this.scene = scene\n this.engine = this.engine\n }\n Mesh:BABYLON.Mesh\n offsetPosition = new BABYLON.Vector3(0,1.25,0)\n animationGroup:BABYLON.AnimationGroup = new BABYLON.AnimationGroup(\"RoleAnimGroup\")\n AnimMap = {\n idle:null\n }\n async init(){\n this.Mesh = this.loadMesh();\n this.loadIdleAnim();\n }\n\n playAnim(anim){\n // this.Mesh.animations[0]\n // this.animationGroup.start(true,1,0,120,null)\n this.scene.beginDirectAnimation(this.Mesh, [this.AnimMap[anim]], 0, 120, true);\n }\n loadMesh(){\n let sphere = BABYLON.MeshBuilder.CreateSphere(\"sphere\", { diameter: 2 }, this.scene);\n sphere.position.addInPlace(this.offsetPosition)\n sphere.visibility = 1 // 不可见,仅用于粒子覆盖占位\n // 材质\n sphere.material = new BABYLON.StandardMaterial(\"mat\", this.scene);\n sphere.material.wireframe = true;\n // 设置初始缩放\n sphere.scaling = new BABYLON.Vector3(1, 1, 1);\n return sphere\n }\n loadIdleAnim(){\n // 创建动画\n let idleAnim = new BABYLON.Animation(\n \"idle\",\n \"scaling\",\n 30,\n BABYLON.Animation.ANIMATIONTYPE_VECTOR3,\n BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE\n );\n \n // 定义动画关键帧\n let keys = [];\n keys.push({\n frame: 0,\n value: new BABYLON.Vector3(1,1,1) // 初始缩放\n });\n keys.push({\n frame: 60,\n value: new BABYLON.Vector3(1.5,1.5,1.5) // 最大缩放\n });\n keys.push({\n frame: 120,\n value: new BABYLON.Vector3(1,1,1) // 初始缩放\n });\n idleAnim.setKeys(keys)\n // 将关键帧添加到动画\n this.Mesh.animations.push(this.AnimMap.idle)\n this.AnimMap.idle = idleAnim\n this.animationGroup.addTargetedAnimation(this.AnimMap.idle,this.Mesh)\n }\n \n}","import { CommonModule } from '@angular/common';\nimport { Component, AfterViewInit, ElementRef } from '@angular/core';\nimport { ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n/**\n * npm i -S @babylonjs/core\n * npm i -S @babylonjs/loaders\n */\nimport * as BABYLON from '@babylonjs/core';\n// import { CloudPoint } from '@babylonjs/core';\nimport '@babylonjs/loaders';\nimport { AvatarRole } from './avatar.role';\nimport { RolePointsCloud } from './role-points.class';\n\n@Component({\n selector: 'fm-avatar-role-particle',\n standalone:true,\n imports:[CommonModule,FormsModule],\n templateUrl: './comp-avatar-particle.component.html',\n styleUrls: ['./comp-avatar-particle.component.scss']\n})\nexport class CompAvatarParticleComponent implements AfterViewInit {\n @ViewChild(\"renderCanvas\") renderCanvas:ElementRef\n \n // 画布\n private canvas: HTMLCanvasElement|undefined;\n private engine: BABYLON.Engine|undefined;\n private scene: BABYLON.Scene|undefined;\n mainCamera:BABYLON.ArcRotateCamera|BABYLON.VRDeviceOrientationArcRotateCamera|undefined;\n constructor(private elementRef: ElementRef) {\n }\n ngAfterViewInit(): void {\n this.canvas = this.renderCanvas.nativeElement;\n console.log(this.canvas)\n if(this.canvas){\n let options:BABYLON.EngineOptions = {\n }\n this.engine = new BABYLON.Engine((this.canvas as any), true,options);\n console.log(this.engine)\n // 创建场景\n this.createScene();\n this.engine.runRenderLoop(() => {\n this.scene?.render();\n this.engine?.resize();\n });\n window.addEventListener('resize', () => {\n this.engine?.resize();\n });\n }\n }\n currentRole:AvatarRole\n async createScene() {\n // 创建场景\n this.scene = new BABYLON.Scene((this.engine as any));\n this.scene.clearColor = new BABYLON.Color4(0,0,0,1)\n // 创建舞台中央旋转相机\n this.mainCamera = this.createCamera();\n console.log(this.mainCamera)\n // 加载预设的角色\n this.currentRole = new RolePointsCloud(this.scene,this.engine,this.mainCamera)\n await this.currentRole.init()\n this.currentRole.playAnim(\"idle\") // 默认播放闲置画面\n this.currentRole.Mesh.visibility = 0; // 开启点云,原Mesh设置隐藏\n\n // 创建需要展示的主要资源\n // let prefab = this.prefabList[0]\n // await this.createPrefab(prefab)\n\n // 创建粒子效果\n // await this.createParticle()\n\n // 创建点云粒子\n await this.createCloudPoints()\n\n let light = new BABYLON.HemisphericLight('light1', new BABYLON.Vector3(0,1,0), this.scene);\n\n // let ground = BABYLON.MeshBuilder.CreateGround('ground1', {height:10, width:10, subdivisions: 2}, this.scene);\n // let groudMaterial = new BABYLON.StandardMaterial(\"groudMaterial\", this.scene);\n // groudMaterial.diffuseColor = new BABYLON.Color3(0.5, 0.5, 0.5); // 设置灰色\n // ground.material = groudMaterial;\n // 修正比例\n this.engine?.resize();\n\n }\n isWebVR:boolean = false\n createCamera(){\n // Parameters: alpha, beta, radius, target position, scene\n let CameraType = this.isWebVR?BABYLON.VRDeviceOrientationArcRotateCamera:BABYLON.ArcRotateCamera\n let camera = new CameraType(\"Camera\", 0, 0, 30, new BABYLON.Vector3(0, 0.5, 0), this.scene);\n // Positions the camera overwriting alpha, beta, radius\n camera.setPosition(new BABYLON.Vector3(0, 0, 5));\n // 设置相机的俯仰角度为45°\n camera.beta = Math.PI / 3;\n camera.alpha = Math.PI / 1.2;\n camera.radius = 15;\n // This attaches the camera to the canvas\n // camera.attachControl(this.canvas, true); // 关闭控制,由程序锁定镜头\n return camera\n }\n\n mainMesh:BABYLON.AbstractMesh|undefined\n // prefabList = [\n // {name:\"蓝色可爱小机器人\",dir:'/assets/avatar/prefab/bluerobot/',file:\"scene.gltf\",cameraPositon:[Math.PI / 1.2, Math.PI / 3,5]},\n // {name:\"紫色小精灵\",dir:'/assets/avatar/prefab/furby_purple/',file:\"scene.gltf\",cameraPositon:[0, 0,10]}\n // ]\n // async createPrefab(prefab:any){\n // // 加载模型\n // const model = await BABYLON.SceneLoader.ImportMeshAsync(null, prefab.dir, prefab.file, this.scene);\n\n // // 设置模型初始位置\n // this.mainMesh = model.meshes[0]\n // this.mainMesh.position = new BABYLON.Vector3(0, 0.1, 0);\n // console.log(this.mainMesh)\n\n // // 重设相机位置\n // // 方法一:加载人工预设镜头位置\n // this.mainCamera?.setPosition(new BABYLON.Vector3(prefab.cameraPositon[0],prefab.cameraPositon[1],prefab.cameraPositon[2]))\n // // 方法二:由于Mesh本身的空间信息缺失,导致无法智能识别\n // // this.setCameraToMeshCenter(this.mainCamera,this.mainMesh)\n // return\n // }\n\n pointsCloud:BABYLON.PointsCloudSystem\n pointsMesh:BABYLON.Mesh\n async createCloudPoints(){\n this.pointsMesh = this.currentRole.Mesh\n this.pointsCloud = new BABYLON.PointsCloudSystem(\"pcs\", 1, this.scene) \n // pcs.addPoints(10000);\n \n let color1 = new BABYLON.Color3(0.7, 0.8, 1.0);\n let color4 = new BABYLON.Color4(0.7, 0.8, 1.0);\n let color2 = new BABYLON.Color4(0.2, 0.5, 1.0);\n let colorDead = new BABYLON.Color4(0, 0, 0.2, 0.0);\n let pTexture = new BABYLON.Texture(\"/assets/avatar/particle/textures/flare.png\", this.scene);\n let pMaterial = new BABYLON.PBRMaterial(\"material\", this.scene);\n pMaterial.emissiveTexture = pTexture\n pMaterial.emissiveColor = color1\n \n this.pointsCloud.addVolumePoints(this.currentRole.Mesh, 5000,BABYLON.PointColor.Color,color4);\n\n this.pointsCloud.buildMeshAsync().then(()=>{\n // this.pointsCloud.mesh.material = pMaterial;\n this.playAnimation(\"waiting\");\n });\n\n this.scene.registerAfterRender(() => {\n this.pointsCloud.setParticles();\n });\n this.engine.runRenderLoop(() => {\n this.scene.render();\n });\n\n }\n\n playAnimation(name){\n \n // 材质颜色\n\n switch (name) {\n case \"waiting\":\n this.cloudAnim()\n break;\n case \"listening\":\n this.cloudAnim({\n rotateSpeed:0.01,\n breathing:false,\n })\n break;\n case \"thinking\":\n this.cloudAnim({\n rotateSpeed:0.2,\n breathing:false,\n })\n break;\n case \"talking\":\n // this.pointsCloud.particles\n this.animMap['idle']&&this.scene.beginDirectAnimation(this.pointsMesh, [this.animMap['talking']], 0, 20, true);\n default:\n break;\n }\n }\n cloudAnim(options={\n breathing:true,\n rotateSpeed:0.002\n }){\n this.animMap['idle']&&this.scene.beginDirectAnimation(this.pointsMesh, [this.animMap['idle']], 0, 120, true);\n let colorWhite = new BABYLON.Color4(1.0, 1.0, 1.0,1.0);\n let pTexture = new BABYLON.Texture(\"/assets/avatar/particle/textures/flare.png\", this.scene);\n let islog = 0\n\n this.pointsCloud.updateParticle = (particle:BABYLON.CloudPoint) =>{\n // 空间位置\n let sphereRadius = this.currentRole.Mesh.getBoundingInfo()?.boundingSphere?.radiusWorld\n let centerWorld = this.currentRole.Mesh.getBoundingInfo()?.boundingSphere?.centerWorld\n\n let index = particle.idx;\n particle.color = colorWhite;\n // 旋转\n particle.rotation.y += options.rotateSpeed; \n // 位置\n if(particle&&islog<3){\n console.log(this.currentRole.Mesh.getBoundingInfo())\n console.log(particle)\n islog ++\n }\n if(!(particle as any).initpos) (particle as any).initpos = particle.position\n if(options.breathing){\n let initpos = (particle as any).initpos\n let relativeVector = initpos.subtract(centerWorld);\n particle.position = new BABYLON.Vector3(relativeVector.x*sphereRadius,relativeVector.y*sphereRadius,relativeVector.z*sphereRadius).add(this.currentRole.offsetPosition);\n }\n return particle\n };\n }\n \n animMap:{\n [key:string]:BABYLON.Animation\n } = {}\n createSphere(){\n let sphere = BABYLON.MeshBuilder.CreateSphere(\"sphere\", { diameter: 2 }, this.scene);\n sphere.visibility = 1 // 不可见,仅用于粒子覆盖占位\n // 材质\n sphere.material = new BABYLON.StandardMaterial(\"mat\", this.scene);\n sphere.material.wireframe = true;\n // 设置初始缩放\n sphere.scaling = new BABYLON.Vector3(1, 1, 1);\n this.pointsMesh = sphere;\n /**\n * 呼吸动画\n */\n // 创建动画\n let animation = new BABYLON.Animation(\n \"breathingAnimation\",\n \"scaling\",\n 30,\n BABYLON.Animation.ANIMATIONTYPE_VECTOR3,\n BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE\n );\n\n // 定义动画关键帧\n let keys = [];\n keys.push({\n frame: 0,\n value: new BABYLON.Vector3(0.3,0.3,0.3) // 初始缩放\n });\n keys.push({\n frame: 60,\n value: new BABYLON.Vector3(0.5,0.5,0.5) // 最大缩放\n });\n keys.push({\n frame: 120,\n value: new BABYLON.Vector3(0.3,0.3,0.3) // 初始缩放\n });\n\n // 将关键帧添加到动画\n animation.setKeys(keys);\n this.animMap[\"idle\"]=animation;\n\n\n /**\n * 讲话动画\n */\n\n // 定义动画帧\n let animationFramesTalk = [\n { frame: 0, value: BABYLON.Vector3.One() },\n { frame: 10, value: new BABYLON.Vector3(1.2, 0.8, 1.2) },\n { frame: 20, value: BABYLON.Vector3.One() },\n ];\n\n // 创建动画\n let animationTalk = new BABYLON.Animation(\n \"talkAnimation\",\n \"scaling\",\n 30,\n BABYLON.Animation.ANIMATIONTYPE_VECTOR3,\n BABYLON.Animation.ANIMATIONLOOPMODE_CYCLE\n );\n\n // 设置动画帧\n animationTalk.setKeys(animationFramesTalk);\n this.animMap[\"talk\"]=animationTalk;\n\n\n // 启动动画\n this.scene.beginDirectAnimation(sphere, [this.animMap['idle']], 0, 120, true);\n\n return sphere\n }\n\n\n\n async createParticle(){\n // 创建球体\n let sphere = this.createSphere()\n\n // 创建粒子系统\n let particleSystem = new BABYLON.ParticleSystem(\"particles\", 2000, this.scene);\n particleSystem.particleTexture = new BABYLON.Texture(\"/assets/avatar/particle/textures/flare.png\", this.scene);\n particleSystem.emitter = sphere;\n particleSystem.minEmitBox = new BABYLON.Vector3(0, 0, 0); // Starting all from\n particleSystem.maxEmitBox = new BABYLON.Vector3(0, 0, 0); // To...\n // Colors of all particles\n particleSystem.color1 = new BABYLON.Color4(0.7, 0.8, 1.0, 1.0);\n particleSystem.color2 = new BABYLON.Color4(0.2, 0.5, 1.0, 1.0);\n particleSystem.colorDead = new BABYLON.Color4(0, 0, 0.2, 0.0);\n // Size of each particle (random between...\n particleSystem.minSize = 0.5;\n particleSystem.maxSize = 0.5;\n // Life time of each particle (random between...\n particleSystem.minLifeTime = 0.1;\n particleSystem.maxLifeTime = 0.1;\n // 角度速度\n particleSystem.minAngularSpeed = 0;\n particleSystem.maxAngularSpeed = Math.PI;\n particleSystem.minInitialRotation = 0;\n particleSystem.maxInitialRotation = Math.PI;\n // Emission rate// 设置粒子的初始速度\n // 禁用速度属性\n // particleSystem.manualEmitCount = particleSystem.getCapacity(); // 禁用自动发射\n particleSystem.minEmitPower = 0; // 最小发射速度\n particleSystem.maxEmitPower = 0; // 最大发射速度\n particleSystem.emitRate = 1500;\n // Speed\n particleSystem.updateSpeed = 0.01;\n // Blend mode : BLENDMODE_ONEONE, or BLENDMODE_STANDARD\n particleSystem.blendMode = BABYLON.ParticleSystem.BLENDMODE_ONEONE;\n particleSystem.direction1 = new BABYLON.Vector3(0,0,0)\n particleSystem.direction2 = new BABYLON.Vector3(0,0,0)\n particleSystem.start();\n // 设置粒子发射器为球形发射器\n let sphereEmitter = particleSystem.createSphereEmitter();\n sphereEmitter.radius = 2; // 球体半径\n // sphereEmitter.startPositionFunction = (worldMatrix: BABYLON.Matrix, positionToUpdate: BABYLON.Vector3, particle: BABYLON.Particle, isLocal: boolean)=>{\n // let sphereRadius = sphere.getBoundingInfo()?.boundingSphere?.radiusWorld\n // particle.position = particle.position.normalize().scale(sphereRadius);\n // }\n sphereEmitter.radiusRange = 0; // 开始发射半径范围 0 只在表面\n sphereEmitter.directionRandomizer = 0; // 开始发射方向随机性\n\n // 设置粒子效果\n particleSystem.gravity = new BABYLON.Vector3(0, 0, 0); // 关闭重力\n // 设置粒子系统停止后立即销毁粒子\n particleSystem.disposeOnStop = true;\n // 修改粒子更新函数,将粒子限制在球体表面\n particleSystem.updateFunction = (particles) =>{\n for (let index = 0; index < particles.length; index++) {\n let particle = particles[index];\n\n // // 将粒子位置限制在球体表面\n let sphereRadius = sphere.getBoundingInfo()?.boundingSphere?.radiusWorld\n particle.position = particle.position.normalize().scale(sphereRadius);\n // particle.scale = new BABYLON.Vector2(0.2,0.2)\n\n particle.age += this.scene.getEngine().getDeltaTime()/1000;\n // 检查粒子是否达到最大生命周期,如果是则使其消失\n if (particle.age >= particle.lifeTime) {\n particleSystem.recycleParticle(particle);\n index--; // 更新索引以避免跳过下一个粒子\n }\n // // 在一定时间后使粒子消失\n // if (particle.age > 0.19) {\n // particle.lifeTime = 0\n // }\n }\n };\n\n // 动画循环\n this.engine.runRenderLoop(() => {\n this.scene.render();\n // 更新粒子的位置和缩放\n particleSystem.worldOffset = sphere.position;\n // particle.position = particle.position.normalize().scale(sphereEmitter.radius);\n });\n }\n\n setCameraToMeshCenter(camera:BABYLON.ArcRotateCamera|undefined,mesh:BABYLON.AbstractMesh){\n // 获取网格体的边界信息\n mesh.computeWorldMatrix(true);\n let boundingInfo = mesh.getBoundingInfo();\n\n // 获取边界框的最小点和最大点\n let minimum = boundingInfo.minimum;\n let maximum = boundingInfo.maximum;\n\n // 计算网格体的长宽高\n let width = maximum.x - minimum.x;\n let height = maximum.y - minimum.y;\n let depth = maximum.z - minimum.z;\n let center = boundingInfo.boundingBox.center;\n console.log(\"宽度:\" + width);\n console.log(\"高度:\" + height);\n console.log(\"深度:\" + depth);\n console.log(\"中心点:\" + center);\n\n // camera?.setPosition(center)\n }\n}\n","<canvas #renderCanvas class=\"render-canvas\"></canvas>","import { AfterViewInit,OnInit, Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FmodeAvatarRoleComp } from '../interface-avatar-role';\n\nimport Recorder from 'recorder-core'\nimport 'recorder-core/src/extensions/waveview'\n\nimport Parse from \"parse\";\nimport { FormsModule } from '@angular/forms';\nimport { FmodeChat } from '../../service-fmai/service-chat/chat-class';\n\n@Component({\n selector: 'fm-avatar-role-image',\n standalone: true,\n imports: [CommonModule,FormsModule],\n templateUrl: './comp-avatar-role-image.component.html',\n styleUrls: ['./comp-avatar-role-image.component.scss']\n})\nexport class CompAvatarRoleImageComponent implements FmodeAvatarRoleComp,AfterViewInit,OnInit {\n @ViewChild(\"avatarImage\") avatarImage:ElementRef\n animClass:string = \"waiting\"\n\n @Input() fmodeChat:FmodeChat;\n @Input() role:Parse.Object;\n wave:any\n waveInterval:any\n playWave(){\n if(!this.wave&&Recorder.WaveView){\n this.wave=Recorder.WaveView({elem:\".record-wave-avatar\",keep:false});\n }\n\n // 生成随机的pcmData\n function generatePcmData(length) {\n const pcmData = [];\n for (let i = 0; i < length; i++) {\n pcmData.push(Math.floor(Math.random() * 65536) - 32768);\n }\n return pcmData;\n }\n\n // 生成随机的powerLevel\n function generatePowerLevel() {\n return Math.random() * 100;\n }\n\n // 生成随机的sampleRate\n function generateSampleRate() {\n const sampleRates = [44100, 48000, 88200, 96000];\n return sampleRates[Math.floor(Math.random() * sampleRates.length)];\n }\n // 生成示例数据\n \n let powerLevel = generatePowerLevel(); // 生成随机的powerLevel\n // 使用生成的数据调用wave.input函数\n this.waveInterval = setInterval(()=>{\n let sampleRate = generateSampleRate(); // 生成随机的sampleRate\n let pcmData = generatePcmData(1000); // 生成长度为1000的pcmData数组\n this.wave.input(pcmData, powerLevel, sampleRate);\n },40)\n }\n stopWave(){\n clearInterval(this.waveInterval)\n }\n ngAfterViewInit(){\n\n }\n ngOnInit(){\n setTimeout(() => {\n // 绑定当前形象插件动作函数\n this.fmodeChat.playAnimation = this.playAnimation \n }, 1500);\n }\n playAnimation(){\n let that = this\n return (name:string)=>{\n let img = that.avatarImage.nativeElement\n that.animClass = name\n that.stopWave()\n switch (name) {\n case \"thinking\":\n img.style.animationPlayState = 'running';\n break;\n case \"talking\":\n img.style.animationPlayState = 'running';\n that.playWave()\n break;\n case \"listening\":\n img.style.animationPlayState = 'pause';\n break;\n case \"waiting\":\n img.style.animationPlayState = 'running';\n break;\n default:\n img.style.animationPlayState = 'paused';\n break;\n }\n }\n }\n}\n","<div class=\"page\">\n <div class=\"avatar\" [class]=\"animClass\">\n <div class=\"avatar-photo\">\n <img #avatarImage [src]=\"role?.get('thumb')\" alt=\"\">\n <!-- 音频波动 -->\n <div class=\"record-wave-avatar\">\n </div>\n </div>\n </div>\n</div>","import * as sdk from \"microsoft-cognitiveservices-speech-sdk\"\n\n/**\n * FmodeTTS\n * 每个类,表示一次独立的语音合成服务\n */\nexport class FmodeTTS{\n private speechConfig: sdk.SpeechConfig;\n private audioConfig: sdk.AudioConfig;\n private synthesizer: sdk.SpeechSynthesizer;\n private subscriptionKey: string;\n private authorizationToken:string;\n private region: string;\n\n constructor(config:{\n region:string,\n subscriptionKey:string,\n token:string,\n }){\n this.subscriptionKey = config?.subscriptionKey;\n this.authorizationToken = config?.token;\n this.region = config?.region;\n if(this.subscriptionKey){ // 直接资源APIKEY,调试或后端是使用\n this.speechConfig = sdk.SpeechConfig.fromSubscription(this.subscriptionKey, this.region);\n }\n if(this.authorizationToken){ // 加载调用STSToken,客户端使用\n this.speechConfig = sdk.SpeechConfig.fromAuthorizationToken(this.authorizationToken, this.region);\n console.log(this.authorizationToken,this.speechConfig)\n }\n console.log(this.speechConfig)\n // this.audioConfig = sdk.AudioConfig.fromDefaultSpeakerOutput();\n // this.synthesizer = new sdk.SpeechSynthesizer(this.speechConfig, this.audioConfig);\n this.synthesizer = new sdk.SpeechSynthesizer(this.speechConfig);\n }\n\n extractSSMLContent(inputString) {\n var regex = /<speak.*?<\\/speak>/;\n var match = inputString.match(regex);\n \n if (match) {\n return match[0];\n } else {\n return inputString;\n }\n }\n \n /**\n * 合成语言并播放\n * @param textOrSSML \n * @desc\n * 普通文本\n * SSML https://learn.microsoft.com/zh-cn/azure/ai-services/speech-service/how-to-speech-synthesis?tabs=browserjs%2Cterminal&pivots=programming-language-javascript#use-ssml-to-customize-speech-characteristics\n * @returns \n */\n public async speakAsync(textOrSSML: string): Promise<void> {\n // 正则匹配SSML部分\n textOrSSML = this.extractSSMLContent(textOrSSML);\n // 播放语音\n return new Promise((resolve, reject) => {\n const startTime = Date.now();\n let speekType = 'speakTextAsync'\n if(textOrSSML?.indexOf(\"<\")>-1){\n speekType = \"speakSsmlAsync\"\n }\n\n // 音频输出流\n // Create an audio output stream\n // const audioOutputStream = sdk.AudioOutputStream.createPullStream();\n // Create an audio configuration using the audio output stream\n // const audioConfig = sdk.AudioConfig.fromStreamOutput(audioOutputStream);\n\n // 播放组件\n // Get the audio data from the callback and create a Blob\n // const audioBlob = audioOutputStream.audioBlob();\n // const audioUrl = URL.createObjectURL(audioBlob);\n // const audioElement = new Audio(audioUrl);\n console.log(textOrSSML)\n this.synthesizer[speekType](\n textOrSSML,\n result => {\n /**\n * \n * @desc\n * {\n privAudioData: undefined\n privAudioDuration: undefined\n privErrorDetails: \"Unable to contact server. StatusCode: 1006,\\n wss://eastasia.tts.speech.microsoft.com/cognitiveservices/websocket/v1 Reason: undefined\"\n privProperties: PropertyCollection {privKeys: Array(1), privValues: Array(1)}\n privReason: 1\n privResultId: \"539694CFA6CB4BAD97F90AF76E608E69\"\n audioData: (...)\n audioDuration: (...)\n errorDetails: (...)\n properties: (...)\n reason: (...)\n resultId: (...)\n }\n */\n console.log(result)\n console.log(result.resultId)\n console.log(result.reason)\n if (result.reason === sdk.ResultReason.SynthesizingAudioCompleted) {\n const endTime = Date.now();\n let audioData = result?.audioData;\n this.playAudioData(audioData) // 需要记录播放的时长,绑定文本内容的对应关系\n console.log(`Audio synthesis finished. Duration: ${endTime - startTime} ms`);\n resolve();\n } else {\n reject(`Speech synthesis failed. Reason: ${result.errorDetails}`);\n }\n },\n error => {\n reject(`Error occurred during synthesis: ${error}`);\n }\n );\n });\n }\n\n // 把打断时的事件\n onBreak(options:{\n playedTime:string // 已播放时长\n playedText:string // 已播放文本\n leftText:string // 剩余文本\n }){\n \n }\n\n playAudioData(audioData){\n let blob = new Blob([audioData],{type:'audio/wav'});\n let url = URL.createObjectURL(blob);\n let audio = new Audio(url)\n audio.play();\n }\n}","import { Component,OnInit,Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ToastController } from \"@ionic/angular\"\n\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport { IonicModule, NavController, Platform } from \"@ionic/angular\"\n\nimport { FmodeVoiceService } from '../../voice';\nimport { FmodeChat,ChatService } from '../../service-fmai/service-chat';\nimport { FmodeTTS } from '../../voice/tts';\nimport { NovaCloudService } from '../../../nova-cloud/nova-cloud.service';\n\n\n@Component({\n selector: 'fm-modal-chat-voice-input',\n standalone: true,\n imports: [CommonModule,\n IonicModule,RouterModule,\n ],\n providers:[\n FmodeVoiceService\n ],\n templateUrl: './modal-chat-voice-input.component.html',\n styleUrls: ['./modal-chat-voice-input.component.scss']\n})\nexport class ModalChatVoiceInputComponent implements OnInit{\n\n @Input() fmodeChat:FmodeChat|undefined\n\n /**\n * 开始讲话方式:click点击开始/点击结束 press按住讲话/松开结束\n * @default click\n */\n @Input() talkMode:\"click\"|\"press\"=\"click\"\n talkTips = \"点击话筒开始讲话\"\n\n errorText:string = ``\n\n constructor(\n private platform:Platform,\n private router:Router,\n public voiceServ:FmodeVoiceService,\n private toastCtrl:ToastController,\n private ncloud:NovaCloudService,\n public chatServ:ChatService,\n\n ){\n }\n ngOnInit(){\n if(this.talkMode==\"press\"){\n this.talkTips = \"轻触底部开始讲话\"\n }\n\n // 开启录音唤醒功能\n setTimeout(() => {\n this.initVoiceSevice()\n this.initVoiceASR()\n }, 500);\n }\n\n /**\n * ASR唤醒功能\n */\n async initVoiceASR(){\n // 开启录音权限\n this.voiceServ.requestPermission().then(()=>{\n this.voiceServ.openWithPriviledge()\n // 开始监听唤醒词 Nihao Hello\n this.startASRAwake()\n })\n }\n // ASR - 唤醒词\n async startASRAwake(){\n await this.voiceServ.openWithPriviledge();\n let speech = new this.voiceServ.webSpeech(this.platform);\n speech.startRecognition(\"Nihao | Hello\");\n }\n\n /**\n * 音频提示音播放\n */\n player = new Audio();\n\n playMusic(action){\n this.player.src = `/assets/avatar/voice/${action}.mp3`\n this.player.play();\n }\n\n /**\n * 初始化录音转录服务\n * @desc\n * 根据数字角色对话状态,设计语音转录各事件处理过程\n * 嵌入提示音\n * 嵌入动画\n * 嵌入唤醒词切换逻辑\n */\n initVoiceSevice(){\n this.fmodeChat.userInput = this.voiceServ.resultText\n this.voiceServ.requestPermission().then(()=>{\n this.voiceServ.openWithPriviledge()\n })\n\n // 开始录音前 播放倾听动画\n // 开始录音前 播放提示音\n this.voiceServ.onBeforeStartTalk = ()=>{\n this.fmodeChat.playAnimation(\"listening\")\n this.playMusic(\"start-talk\")\n }\n\n // 用户取消录音前 播放提示音\n this.voiceServ.onBeforeCancelTalk = ()=>{\n this.playMusic(\"interupt-talk\")\n this.fmodeChat.playAnimation(\"waiting\")\n }\n // 用户取消录音后 麦克风实时监听唤醒词\n this.voiceServ.onAfterCancelTalk = ()=>{\n this.startASRAwake() // 监听与麦克风冲突,需要重启\n }\n // 完成录音前 播放提示音\n // 完成录音后 执行处理过程\n this.voiceServ.onBeforeFinishTalk = ()=>{\n this.fmodeChat.playAnimation(\"thinking\")\n this.playMusic(\"stop-talk\")\n }\n this.voiceServ.onAfterFinishTalk = ()=>{\n console.log(\"onAfterFinishTalk\")\n this.fmodeChat.userInput = this.voiceServ?.resultText\n this.sendMessage() // 发送消息\n this.startASRAwake() // 监听与麦克风冲突,需要重启\n }\n }\n\n /** \n * 发送语音消息\n * \n */\n async sendMessage(){\n\n // 检测用户登录情况\n // let isLoginLock = await this.authServ.checkLoginLock()\n // if(!isLoginLock) return false\n \n // 检测余额及模型付费限制\n // let payCheck = await this.checkBalance()\n // if(!payCheck) return false\n \n // 检测用户输入内容空值\n if(!this.fmodeChat.userInput){\n this.errorText = `内容不能为空`\n let toast = await this.toastCtrl.create({\n message:this.errorText,\n position:\"top\",\n icon:'alert',\n color:\"warning-circle\",\n duration:1000\n })\n toast.present();\n return\n }\n \n // 正常发送消息\n this.fmodeChat?.sendMessage(this.voiceServ.resultText,null,(msg:any)=>{\n let content = msg.content;\n // this.testTTS(this.aiResponseText)\n this.playTTS(content)\n // 完整的消息,通过TTS合成进行讲话\n this.fmodeChat.playAnimation(\"talking\") // 应该是Talking动画,暂时用wating代替\n setTimeout(() => {\n this.fmodeChat.playAnimation(\"waiting\") // 应该是Talking动画,暂时用wating代替\n }, 6000);\n });\n this.fmodeChat.userInput = ``\n this.fmodeChat.userImage = ``\n }\n\n /**\n * TTS - 语音合成\n * \n */\n tts:FmodeTTS\n async initTTS(){\n // if(this.tts) return // 待明确sts有效期和次数进行优化,避免每次重复获取\n let config:any = await this.ncloud.apig(\"voice/voice/tts/token\",{company:localStorage.getItem(\"company\")})\n // 有TTS资源,使用情绪合成\n console.log(config)\n if(config?.token){\n let tts = new FmodeTTS(config);\n this.tts=tts;\n }\n }\n async playTTS(textOrSSML:string){\n await this.initTTS();\n console.log(this.tts)\n if(this.tts){\n try{\n await this.tts.speakAsync(textOrSSML)\n }catch(ttserr){\n console.error(ttserr)\n }\n }\n \n // 无TSS资源,调用Edge Speech\n }\n playTTSTeting(){\n this.playTTS(`<speak xmlns=\"http://www.w3.org/2001/10/synthesis\" xmlns:mstts=\"http://www.w3.org/2001/mstts\" xmlns:emo=\"http://www.w3.org/2009/10/emotionml\" version=\"1.0\" xml:lang=\"zh-CN\">\n <voice name=\"zh-CN-XiaoxiaoNeural\"><mstts:express-as style=\"angry\">”好没意思的话!去不去,关我什么事儿?又没叫你替我解闷儿,还许你<mstts:ttsbreak strength=\"none\" />从此<prosody contour=\"(24%, +49%) (59%, -2%)\">不</prosody><prosody rate=\"-15.00%\" contour=\"(24%, +49%) (59%, -2%)\">理</prosody><prosody contour=\"(24%, +49%) (59%, -2%)\">我呢</prosody>!”</mstts:express-as></voice>\n </speak>`)\n }\n testTTS(sentence?){\n console.log(sentence)\n sentence = sentence || \"你好呀,我是飞马小智!很高兴为您介绍脑控科技的发展历程。我们成立于2019年\"\n let speech = new this.voiceServ.webSpeech(this.platform);\n speech.speak(sentence)\n }\n testXunfeiTTS(){\n // this.voiceServ.ttsXunfei.connectWebSocket()\n }\n}\n\n"," \n <ng-container *ngIf=\"fmodeChat\">\n\n <!-- 用户输入 提示区域 -->\n <div class=\"user-asr-input\" style=\"text-align: center;\" *ngIf=\"!fmodeChat?.userInput && voiceServ.btnStatus!='OPEN'\">{{talkTips}}</div>\n <div class=\"user-asr-input\">{{fmodeChat?.userInput}}</div>\n \n <!-- 测试按钮 -->\n <div class=\"test-button-group\" *ngIf=\"false\">\n <button class=\"button-record\" (click)=\"voiceServ.toggleRecord()\">开始录制 {{voiceServ.connStatus}} {{voiceServ.btnStatus}}</button>\n <br>\n <button class=\"button-record\" (click)=\"voiceServ.playRecord()\">播放录制结果</button>\n <br>\n <button class=\"button-record\" (click)=\"voiceServ.playBuffers()\">播放Buffers结果</button>\n <button (click)=\"testTTS()\">测试TTS纯WEB</button>\n <button (click)=\"startASR()\">测试ASR</button> \n <button (click)=\"testXunfeiTTS()\">测试合成</button> \n </div>\n\n \n \n <!-- 交互按钮 -->\n <ion-fab slot=\"fixed\" horizontal=\"center\" vertical=\"bottom\">\n <ng-container *ngIf=\"talkMode=='click'\">\n <!-- 默认按钮:开始讲话 -->\n <ion-fab-button color=\"primary\" closeIcon=\"checkmark\" (click)=\"voiceServ.toggleRecord()\">\n <ion-icon name=\"mic-outline\"></ion-icon>\n </ion-fab-button>\n\n <!-- 讲话中:取消发送 -->\n <ion-fab-list side=\"end\">\n <ion-fab-button [class]=\"'loading'\" (click)=\"voiceServ.cancelTalk()\">\n <ion-icon name=\"pause-outline\"></ion-icon>\n </ion-fab-button>\n </ion-fab-list>\n </ng-container>\n \n <ng-container *ngIf=\"talkMode=='press'\">\n <ion-fab-button color=\"primary\" closeIcon=\"mic-outline\" (touchstart)=\"voiceServ.toggleRecord()\" (touchend)=\"voiceServ.cancelTalk()\">\n <ion-icon name=\"mic-outline\"></ion-icon>\n </ion-fab-button>\n </ng-container>\n </ion-fab>\n\n\n <!-- 音频波动 -->\n <div class=\"record-wave\">\n </div>\n</ng-container>\n","import { AfterViewInit, Component, ElementRef, Input, OnDestroy, ViewChild } from '@angular/core';\nimport { FmodeVoiceService } from '../../voice';\nimport { ChatService, FmodeChatCompletion } from '../../service-fmai/service-chat';\nimport { FmodeAvatarRoleComp } from '../interface-avatar-role';\nimport { IonicModule, NavController, Platform } from \"@ionic/angular\"\nimport { CommonModule } from '@angular/common';\nimport {CompAvatarParticleComponent} from \"../comp-avatar-particle/comp-avatar-particle.component\"\nimport {CompAvatarRoleImageComponent} from \"../comp-avatar-role-image/comp-avatar-role-image.component\"\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, Router, RouterModule } from '@angular/router';\nimport * as Parse from \"parse\"\nimport { NovaCloudService } from '../../../nova-cloud/nova-cloud.service';\nimport { FmodeChat,HidexmlPipe } from '../../service-fmai/service-chat';\nimport { ModalChatVoiceInputComponent } from '../modal-chat-voice-input/modal-chat-voice-input.component';\nimport { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';\n\n@Component({\n selector: 'app-comp-avatar-talk',\n standalone:true,\n imports:[\n CommonModule,RouterModule,FormsModule,IonicModule,CompAvatarParticleComponent,CompAvatarRoleImageComponent,\n ModalChatVoiceInputComponent,\n HidexmlPipe\n ],\n providers:[\n FmodeVoiceService,NovaCloudService,ChatService,Diagnostic\n ],\n templateUrl: './comp-avatar-talk.component.html',\n styleUrls: ['./comp-avatar-talk.component.scss']\n})\nexport class CompAvatarTalkComponent implements AfterViewInit,OnDestroy{\n @ViewChild(\"avatar\") avatarComp:FmodeAvatarRoleComp\n roleId:string\n avatarRole:Parse.Object;\n fmodeChat:FmodeChat;\n \n constructor(\n public voiceServ:FmodeVoiceService,\n private platform:Platform,\n private router:Router,\n private navCtrl:NavController,\n private route:ActivatedRoute,\n public chatServ:ChatService,\n private ncloud:NovaCloudService,\n ){\n\n this.route.paramMap.subscribe(params=>{\n this.roleId = params.get(\"roleId\");\n this.loadAvatarRole(this.roleId)\n })\n // 切换黑暗模式\n document.body.classList.add('dark');\n }\n \n ngOnInit(){\n\n }\n ngOnDestroy(): void {\n document.body.classList.remove('dark');\n this.voiceServ.resultText = null;\n if(this.fmodeChat){\n this.fmodeChat.latestAIResponse = null;\n }\n }\n goBack(){\n document.body.classList.remove('dark');\n this.navCtrl.navigateRoot('/chat/pro/role/'+this.roleId)\n }\n // 根据ID加载数字角色\n async loadAvatarRole(roleId){\n let query = new Parse.Query(\"AvatarRole\")\n this.avatarRole = await query.get(roleId);\n let chat = await this.chatServ.createNewRoleChat(this.roleId)\n chat.isTalkMode = true;\n this.fmodeChat = chat\n }\n\n\n ngAfterViewInit(){\n \n this.listenDivChange()\n }\n @ViewChild(\"aiRespComp\") aiRespComp:ElementRef\n listenDivChange(){\n // 创建 MutationObserver 实例\n let observer = new MutationObserver(() => {\n this.scrollToBottom(this.aiRespComp);\n });\n // 配置观察选项\n let config = { childList: true, subtree: true, attributes:true };\n // 开始观察\n observer.observe(this.aiRespComp.nativeElement, config);\n }\n scrollToBottom(comp:ElementRef){\n if(comp?.nativeElement?.scrollHeight){\n comp.nativeElement.scrollTop = comp.nativeElement.scrollHeight\n }\n }\n \n\n /**\n * AI响应内容 fmodeChat.latestAIResponse\n */\n \n \n}\n","<ion-menu #menu contentId=\"main-content\" side=\"end\">\n <ion-header>\n <ion-toolbar>\n <ion-title>资料</ion-title>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\">\n\n <ion-card style=\"margin: 0px;\">\n <img [src]=\"avatarRole?.get('thumb')\" alt=\"\">\n <ion-card-header>\n <ion-card-subtitle>{{avatarRole?.get('tags')}}</ion-card-subtitle>\n <ion-card-title>{{avatarRole?.get(\"name\")}}</ion-card-title>\n </ion-card-header>\n \n <ion-card-content>\n {{avatarRole?.get(\"desc\")}}\n\n <ion-list [inset]=\"true\" style=\"margin:0px;\">\n <!-- <ion-item>\n <ion-avatar *ngIf=\"avatarRole?.get('thumb')\" aria-hidden=\"true\" slot=\"start\">\n <img [src]=\"avatarRole?.get('thumb')\" />\n </ion-avatar>\n <ion-label>{{avatarRole?.get(\"name\")}}</ion-label>\n </ion-item> -->\n <ion-item lines=\"none\" *ngIf=\"avatarRole?.get('age')\">\n <ion-note slot=\"start\">年龄</ion-note>\n <ion-label>{{avatarRole?.get(\"age\")}}</ion-label>\n </ion-item>\n <ion-item lines=\"none\" *ngIf=\"avatarRole?.get('gender')\">\n <ion-note slot=\"start\">性别</ion-note>\n <ion-label>{{avatarRole?.get(\"gender\")}}</ion-label>\n </ion-item>\n <ion-item lines=\"none\">\n <ion-note slot=\"start\">称号</ion-note>\n <ion-label>{{avatarRole?.get(\"title\")}}</ion-label>\n </ion-item>\n \n <ion-item lines=\"none\">\n <ion-note slot=\"start\">擅长</ion-note>\n <ion-label>{{avatarRole?.get(\"tags\")?.join(',')}}</ion-label>\n </ion-item>\n\n </ion-list>\n </ion-card-content>\n </ion-card>\n \n \n \n </ion-content>\n</ion-menu>\n\n<div class=\"ion-page\" id=\"main-content\">\n <ion-header class=\"ion-no-border\">\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"goBack()\"> <ion-icon name=\"chevron-back-outline\"></ion-icon> </ion-button>\n </ion-buttons>\n <ion-title>\n <ion-chip *ngIf=\"avatarRole?.get('title')\">{{avatarRole?.get(\"title\")}}</ion-chip>\n </ion-title>\n <ion-buttons slot=\"end\">\n <!-- <ion-button (click)=\"playTTSTeting()\">TTS测试</ion-button> -->\n {{avatarRole?.get(\"name\")}}\n <ion-button (click)=\"menu.toggle()\"> <ion-icon name=\"ellipsis-horizontal-outline\"></ion-icon> </ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n\n <ion-segment value=\"voice\">\n <ion-segment-button (click)=\"chatServ.createChatPanel(avatarRole)\" value=\"chat\">\n <ion-label>聊天</ion-label>\n </ion-segment-button>\n <ion-segment-button routerLink=\"{{'/avatar/role/'+avatarRole?.id}}\" value=\"voice\">\n <ion-label>语音</ion-label>\n </ion-segment-button>\n </ion-segment>\n\n <!-- 数字形象:动画效果 -->\n <fm-avatar-role-image *ngIf=\"avatarRole&&fmodeChat\" [fmodeChat]=\"fmodeChat\" [role]=\"avatarRole\" #avatar class=\"avatar\"></fm-avatar-role-image>\n <!-- <fm-avatar-role-particle #avatar class=\"avatar\"></fm-avatar-role-particle> -->\n\n <!-- AI回复的最新消息 -->\n <div class=\"ai-resp-input\" #aiRespComp>{{fmodeChat?.latestAIResponse | hidexml}}</div>\n\n <fm-modal-chat-voice-input *ngIf=\"fmodeChat\" [fmodeChat]=\"fmodeChat\"></fm-modal-chat-voice-input>\n\n</div>\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule, Routes } from '@angular/router';\nimport { HttpClientModule } from '@angular/common/http';\nimport { CompAvatarTalkComponent } from \"./comp-avatar-talk/comp-avatar-talk.component\"\n\nexport const AvatarRoutes: Routes = [\n {\n path: \"role/:roleId\",\n component: CompAvatarTalkComponent,\n runGuardsAndResolvers: \"always\",\n }\n]\n\n@NgModule({\n declarations: [\n ],\n imports: [\n CommonModule,\n FormsModule,\n HttpClientModule,\n ReactiveFormsModule,\n RouterModule.forChild(AvatarRoutes),\n CompAvatarTalkComponent,\n ],exports:[\n CompAvatarTalkComponent,\n ]\n})\nexport class AvatarModule { }\n","import { Component,AfterViewInit } from '@angular/core';\nimport * as AMapLoader from \"@amap/amap-jsapi-loader\"\n(window as any)._AMapSecurityConfig = {\n securityJsCode:'32aa3f4ab0fa0061de03edd4eafdd50a',\n}\n// import \"@amap/amap-jsapi-types\"\n\ninterface MapPlace{\n name:string,\n location:Array<number>,\n marker?: any // AMap.Marker\n}\n\n@Component({\n selector: 'app-page-map.start',\n templateUrl: './page-map.start.component.html',\n styleUrls: ['./page-map.start.component.scss']\n})\nexport class PageMapStartComponent implements AfterViewInit {\n AMap:any\n map: any // AMap.Map\n placeList:Array<MapPlace> = [\n {name:\"江财蛟桥校区\",location:[115.855125,28.744335]},\n {name:\"江财枫林校区\",location:[115.835639,28.734119]},\n {name:\"江财麦庐校区\",location:[115.816717,28.728899]},\n ]\n ngAfterViewInit(): void {\n this.initMap();\n }\n async initMap(){\n await this.createMap()\n this.goAndMarkPlace(this.placeList[1])\n }\n async createMap(){\n this.AMap = await AMapLoader.load({\n key: \"473b52010df7d3a32db0a2f5db245c8e\", // 申请好的Web端开发者Key,首次调用 load 时必填\n version: \"2.0\", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15\n })\n this.map = new this.AMap.Map('container');\n }\n /**\n * 添加点标记 Marker\n */\n async addMarks(){\n // JS API 提供了在地图之上绘制覆盖物的能力,现在我们添加add()一个默认的点标记Marker。\n let marker = new this.AMap.Marker({\n position:[115.835639,28.734119] //位置\n })\n this.map.add(marker); //添加到地图\n }\n goAndMarkPlace(place:any){\n this.map.setCenter(place.location)\n this.map.setZoom(18)\n console.log(this.placeList)\n if(place.marker) return\n place.marker = new this.AMap.Marker({\n position:place.location\n })\n this.map.add(place.marker);\n }\n clearMark(place:any){\n place?.marker?.remove()\n }\n /**\n * 路线规划 地点1 => 地点2\n */\n planRoute(p1,p2){\n let transfer;\n this.map.plugin([\"AMap.Transfer\"], () => { //加载公交换乘插件\n let transOptions = {\n map: this.map,\n city: '南昌市',\n panel: 'panel',\n // cityd:'经开区',\n policy: this.AMap.TransferPolicy.LEAST_TIME\n };\n console.log(this.AMap)\n console.log(this.AMap.TransferPolicy)\n //构造公交换乘类\n transfer = new this.AMap.Transfer(transOptions);\n //根据起、终点坐标查询公交换乘路线\n transfer.search(new this.AMap.LngLat(p1.location[0], p1.location[1]), new this.AMap.LngLat(p2.location[0], p2.location[1]), (status, result) => {\n // result即是对应的公交路线数据信息,相关数据结构文档请参考 https://lbs.amap.com/api/javascript-api/reference/route-search#m_TransferResult\n if (status === 'complete') {\n console.log('绘制公交路线完成:')\n console.log(result)\n } else {\n console.error('公交路线数据查询失败' + result)\n }\n });\n // transOptions = {\n // city: '北京市', //公交城市\n // policy: AMap.TransferPolicy.LEAST_TRANSFER //乘车策略\n // };\n // trans = new AMap.Transfer (transOptions); //构造公交换乘类\n // AMap.Event.addListener(trans, \"complete\", trans_CallBack); //返回导航查询结果\n // AMap.Event.addListener(trans, \"error\", function(e){alert(e.info);}); //返回错误信息\n // //根据起、终点坐标查询公交换乘路线\n // trans.search(new AMap.LngLat(116.379018, 39.865026), new AMap.LngLat(116.42732, 39.903752));\n });\n\n\n }\n}\n","<!-- 全屏地图 -->\n<div id=\"container\"></div>\n\n<!-- 右侧地点 -->\n<div class=\"place-list\">\n <ng-container *ngFor=\"let place of placeList\">\n <div class=\"place-item\" (click)=\"goAndMarkPlace(place)\">\n {{place.name}}\n <button (click)=\"clearMark(place)\">清除标记</button>\n </div>\n </ng-container>\n\n <button (click)=\"planRoute(placeList[0],placeList[1])\">从蛟桥到枫林</button>\n \n</div>","import { Component, Input, Output, EventEmitter, ViewChild, AfterViewInit, ElementRef } from '@angular/core';\nimport Parse from \"parse\";\n// 弹窗依赖\nimport { IonModal } from '@ionic/angular';\nimport { OverlayEventDetail } from '@ionic/core';\n\n// 高德依赖\nimport * as AMapLoader from \"@amap/amap-jsapi-loader\"\n(window as any)._AMapSecurityConfig = {\n securityJsCode:'32aa3f4ab0fa0061de03edd4eafdd50a',\n}\n\n@Component({\n selector: 'fm-map-poi-picker',\n templateUrl: './comp-poi-picker.component.html',\n styleUrls: ['./comp-poi-picker.component.scss']\n})\nexport class CompPoiPickerComponent implements AfterViewInit{\n @ViewChild(\"container\") container:ElementRef\n @ViewChild(\"panel\") panel:ElementRef\n @Input(\"name\") _name:string // 地标名称\n get name(){\n return this._name\n }\n set name(v){\n this._name = v;\n this.nameChange.emit(v)\n }\n @Output() nameChange:EventEmitter<string> = new EventEmitter()\n\n\n @Input(\"address\") _address:string // 详细地址\n get address(){\n return this._address\n }\n set address(v){\n this._address = v;\n this.addressChange.emit(v)\n }\n @Output() addressChange:EventEmitter<string> = new EventEmitter()\n\n @Input(\"location\") _location:Parse.GeoPoint // 经纬度数组\n get location(){\n return this._location\n }\n set location(v){\n this._location = v;\n this.locationChange.emit(v)\n }\n @Output() locationChange:EventEmitter<Parse.GeoPoint> = new EventEmitter()\n constructor(){\n }\n /**\n * 弹窗效果区域\n */\n isModalOpen:boolean = false;\n @ViewChild(IonModal) modal: IonModal;\n\n cancel() {\n this.isModalOpen = false;\n this.modal.dismiss(null, 'cancel');\n }\n\n confirm() {\n this.isModalOpen = false;\n this.modal.dismiss(this.address, 'confirm');\n }\n\n onWillDismiss(event: Event) {\n const ev = event as CustomEvent<OverlayEventDetail<string>>;\n if (ev.detail.role === 'confirm') {\n console.log(\"确认\")\n }\n }\n openModal(){\n this.isModalOpen=true\n setTimeout(() => {\n this.initMap()\n }, 800);\n }\n /**\n * 高德地图插件区域\n */\n AMap:any;\n map:any;\n ngAfterViewInit(): void {\n }\n initMap(){\n this.createMap();\n }\n async createMap(){\n this.AMap = await AMapLoader.load({\n key: \"473b52010df7d3a32db0a2f5db245c8e\", // 申请好的Web端开发者Key,首次调用 load 时必填\n version: \"2.0\", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15\n })\n let containerEl = this.container.nativeElement\n this.map = new this.AMap.Map(containerEl);\n this.goCurrentCenter()\n }\n goCurrentCenter(){\n this.AMap.plugin([\"AMap.Geolocation\"], () => {\n // 创建定位对象\n let geolocation = new this.AMap.Geolocation({\n enableHighAccuracy: true, // 是否使用高精度定位,默认为true\n timeout: 10000, // 超过10秒后停止定位,默认:无穷大\n maximumAge: 0, // 定位结果缓存0毫秒,默认:0\n convert: true, // 自动偏移坐标,偏移后的坐标为高德坐标,默认:true\n showButton: true, // 显示定位按钮,默认:true\n buttonPosition: 'RB', // 定位按钮停靠位置,默认:'LB',左下角\n buttonOffset: new this.AMap.Pixel(10, 10), // 定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)\n showMarker: false, // 定位成功后在定位到的位置显示点标记,默认:true\n showCircle: false, // 定位成功后用圆圈表示定位精度范围,默认:true\n panToLocation: true, // 定位成功后将定位到的位置作为地图中心点,默认:true\n zoomToAccuracy: false // 定位成功后将定位精度范围显示在地图上,默认:true\n });\n\n // 添加定位插件\n this.map.addControl(geolocation);\n\n // 获取当前位置信息\n geolocation.getCurrentPosition(function (status, result) {\n if (status === 'complete') {\n // 定位成功\n console.log('当前位置经度:' + result.position.getLng());\n console.log('当前位置纬度:' + result.position.getLat());\n } else {\n // 定位失败\n console.log('定位失败:' + result.message);\n }\n });\n})\n }\n searchByAddress(){\n let panelEl = this.panel.nativeElement\n this.AMap.plugin([\"AMap.PlaceSearch\"], () => {\n //构造地点查询类\n let placeSearch = new this.AMap.PlaceSearch({\n pageSize: 3, // 单页显示结果条数\n pageIndex: 1, // 页码\n // city: \"010\", // 兴趣点城市\n // citylimit: true, //是否强制限制在设置的城市内搜索\n map: this.map, // 展现结果的地图实例\n panel: panelEl, // 结果列表将在此容器中进行展示。\n autoFitView: true // 是否自动调整地图视野使绘制的 Marker点都处于视口的可见范围\n });\n // 预设地点选择后事件\n placeSearch.on('selectChanged', (event) => {\n // 在这里处理选择的点的具体值\n this.name = event.selected.data.name\n this.address = event.selected.data.address\n this.location = new Parse.GeoPoint({latitude:event.selected.data.location.lat,longitude:event.selected.data.location.lng})\n this.createCenterMarker();\n })\n // this.AMap.event.addListener(placeSearch, 'selectChanged', (event) => {\n // // 在这里处理选择的点的具体值\n // console.log(event);\n // });\n \n // 关键字查询\n placeSearch.search(this.address);\n });\n }\n centerMarker:any\n createCenterMarker(){\n if(this.centerMarker) { // 避免多次创建\n return\n }\n this.centerMarker = new this.AMap.Marker({\n position: this.map.getCenter(), // Marker标记的初始位置为地图中心点\n offset: new this.AMap.Pixel(-15, -15), // 设置Marker标记的偏移量,使其在地图中心显示\n // content: '<div class=\"marker\"></div>', // 自定义Marker标记的样式,可以是一个HTML元素\n // map: this.map // 将Marker标记添加到地图上\n });\n this.map.add(this.centerMarker)\n this.map.on('dragging', () => { // 地图拖动中:自动更新中央标点位置\n this.centerMarker.setPosition(this.map.getCenter());\n });\n this.map.on('dragend', () => { // 拖动结束后:设置中央位置为经纬度\n let pos = this.centerMarker.getPosition()\n this.location = new Parse.GeoPoint({latitude:pos.lat,longitude:pos.lng})\n });\n }\n}\n","<!-- 未选点 -->\n<ion-button (click)=\"openModal()\" expand=\"block\">开始选点</ion-button>\n\n<!-- 已选点 -->\n\n<ion-modal [isOpen]=\"isModalOpen\" (willDismiss)=\"onWillDismiss($event)\">\n<ng-template>\n <ion-header>\n <ion-toolbar>\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"cancel()\">Cancel</ion-button>\n </ion-buttons>\n <ion-title>地图选点<ng-container *ngIf=\"location\">({{location.latitude}},{{location.longitude}})</ng-container></ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"confirm()\" [strong]=\"true\">Confirm</ion-button>\n </ion-buttons>\n </ion-toolbar>\n </ion-header>\n <ion-content class=\"ion-padding\" style=\"height:100%\">\n <!-- 详细地址 -->\n <ion-item>\n <ion-input\n label=\"请输入详细地址\"\n labelPlacement=\"stacked\"\n type=\"text\"\n placeholder=\"精确到门牌号\"\n [(ngModel)]=\"address\"\n ></ion-input>\n <ion-button slot=\"end\" (click)=\"searchByAddress()\">搜索</ion-button>\n </ion-item>\n \n <!-- 地图选点 -->\n <div #container class=\"container\"></div>\n <div #panel class=\"panel\"></div>\n\n </ion-content>\n</ng-template>\n</ion-modal>\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { CompPoiPickerComponent } from './comp-poi-picker.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\n\n\n@NgModule({\n declarations: [CompPoiPickerComponent],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n IonicModule.forRoot({mode:\"ios\"})\n ],\n exports:[\n CompPoiPickerComponent\n ]\n})\nexport class CompPoiPickerModule { }\n","import { Component } from '@angular/core';\nimport Parse from \"parse\";\nimport * as AMapLoader from \"@amap/amap-jsapi-loader\"\n(window as any)._AMapSecurityConfig = {\n securityJsCode:'32aa3f4ab0fa0061de03edd4eafdd50a',\n}\n\n@Component({\n selector: 'app-page-plan-route',\n templateUrl: './page-plan-route.component.html',\n styleUrls: ['./page-plan-route.component.scss']\n})\nexport class PagePlanRouteComponent {\n AMap:any\n map: any // AMap.Map\n placeList:Array<any> = [\n ]\n currentTab:string = \"place\"\n constructor(){\n this.addNewPlace()\n this.addNewPlace()\n this.currentTab = \"plan\"\n }\n addNewPlace(){\n if(this.placeList?.length>=1){\n this.placeList.push({\n name:\"秋水广场\",\n address:\"南昌市秋水广场\",\n location:new Parse.GeoPoint({latitude:28.682634,longitude:115.86273})\n })\n }else{\n this.placeList.push({\n name:\"八一广场\",\n address:\"南昌市八一广场\",\n location:new Parse.GeoPoint({latitude:28.673856,longitude:115.904477})\n })\n }\n\n }\n ngAfterViewInit(): void {\n }\n async initMap(){\n await this.createMap()\n this.goAndMarkPlace(this.placeList[0])\n }\n async createMap(){\n this.AMap = await AMapLoader.load({\n key: \"473b52010df7d3a32db0a2f5db245c8e\", // 申请好的Web端开发者Key,首次调用 load 时必填\n version: \"2.0\", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15\n })\n this.map = new this.AMap.Map('container-plan');\n }\n \n goAndMarkPlace(place:any){\n this.map.setCenter([place.location.latitude,place.location.longitude])\n this.map.setZoom(18)\n if(place.marker) return\n place.marker = new this.AMap.Marker({\n position:[place.location.latitude,place.location.longitude]\n })\n this.map.add(place.marker);\n }\n clearMark(place:any){\n place?.marker?.remove()\n }\n /**\n * 路线规划 地点1 => 地点2\n */\n planRoute(p1,p2){\n let transfer;\n this.map.plugin([\"AMap.Transfer\"], () => { //加载公交换乘插件\n let transOptions = {\n map: this.map,\n city: '南昌市',\n panel: 'panel',\n // cityd:'经开区',\n policy: this.AMap.TransferPolicy.LEAST_TIME\n };\n //构造公交换乘类\n transfer = new this.AMap.Transfer(transOptions);\n //根据起、终点坐标查询公交换乘路线\n let p1pos = new this.AMap.LngLat(p1.location.longitude, p1.location.latitude)\n let p2pos = new this.AMap.LngLat(p2.location.longitude, p2.location.latitude)\n transfer.search(p1pos, p2pos, (status, result) => {\n // result即是对应的公交路线数据信息,相关数据结构文档请参考 https://lbs.amap.com/api/javascript-api/reference/route-search#m_TransferResult\n if (status === 'complete') {\n console.log('绘制公交路线完成:')\n console.log(result)\n } else {\n console.error('公交路线数据查询失败' + result)\n }\n });\n });\n\n\n }\n async createPlan(){\n await this.initMap();\n this.planRoute(this.placeList[0],this.placeList[1]);\n }\n}\n","<ion-segment value=\"place\">\n <ion-segment-button (click)=\"currentTab='place'\" value=\"place\">\n <ion-label>景点选择</ion-label>\n </ion-segment-button>\n <ion-segment-button (click)=\"currentTab='plan'\" value=\"plan\">\n <ion-label>路线规划</ion-label>\n </ion-segment-button>\n </ion-segment>\n \n\n<ng-container *ngIf=\"currentTab=='place'\">\n <h1>选择旅游计划景点</h1>\n\n <ng-container *ngFor=\"let place of placeList\">\n <ion-card>\n <h2>{{place?.name}}</h2>\n <span *ngIf=\"place.address\">详细地址:{{place.address}}</span>\n <span *ngIf=\"place.location\">地图坐标:{{place.location.latitude}},{{place.location.longitude}}</span>\n <fm-map-poi-picker [(name)]=\"place.name\" [(address)]=\"place.address\" [(location)]=\"place.location\"></fm-map-poi-picker>\n </ion-card>\n </ng-container>\n <ion-button (click)=\"addNewPlace()\" expand=\"block\">添加新景点</ion-button>\n</ng-container>\n\n<ng-container *ngIf=\"currentTab=='plan'\">\n <ion-button (click)=\"createPlan()\" expand=\"block\">创建规划路线</ion-button>\n\n <div id=\"container-plan\"></div>\n <div id=\"panel\"></div>\n</ng-container>\n\n","import { AfterViewInit, Component } from '@angular/core';\nimport * as AMapLoader from \"@amap/amap-jsapi-loader\";\ndeclare const Loca:any;\n(window as any)._AMapSecurityConfig = {\n securityJsCode:'32aa3f4ab0fa0061de03edd4eafdd50a',\n}\n@Component({\n selector: 'app-page-loca-scatter',\n templateUrl: './page-loca-scatter.component.html',\n styleUrls: ['./page-loca-scatter.component.scss']\n})\nexport class PageLocaScatterComponent implements AfterViewInit{\n AMap:any\n map: any // AMap.Map\n ngAfterViewInit(): void {\n this.initMap();\n }\n async initMap(){\n await this.createMap()\n await this.createLoca()\n }\n async createLoca(){\n let loca = (window as any).loca = new Loca.Container({\n map:this.map,\n });\n\n // 蓝色普通点\n let geo = new Loca.GeoJSONSource({\n url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road.json',\n });\n let scatter = new Loca.ScatterLayer({\n zIndex: 111,\n opacity: 1,\n visible: true,\n zooms: [2, 22],\n });\n scatter.setSource(geo);\n scatter.setStyle({\n color: 'rgba(43,156,75,1)',\n unit: 'meter',\n size: [150, 150],\n borderWidth: 0,\n });\n loca.add(scatter);\n\n // 红色呼吸点\n let geoLevelF = new Loca.GeoJSONSource({\n // data: [],\n url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road_F.json',\n });\n let breathRed = new Loca.ScatterLayer({\n loca,\n zIndex: 113,\n opacity: 1,\n visible: true,\n zooms: [2, 22],\n });\n breathRed.setSource(geoLevelF);\n breathRed.setStyle({\n unit: 'meter',\n size: [2600, 2600],\n borderWidth: 0,\n texture: 'https://a.amap.com/Loca/static/loca-v2/demos/images/breath_red.png',\n duration: 500,\n animate: true,\n });\n\n // 黄色呼吸点\n let geoLevelE = new Loca.GeoJSONSource({\n // data: [],\n url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/sz_road_E.json',\n });\n let breathYellow = new Loca.ScatterLayer({\n loca,\n zIndex: 112,\n opacity: 1,\n visible: true,\n zooms: [2, 22],\n });\n breathYellow.setSource(geoLevelE);\n breathYellow.setStyle({\n unit: 'meter',\n size: [1000, 1000],\n borderWidth: 0,\n texture: 'https://a.amap.com/Loca/static/loca-v2/demos/images/breath_yellow.png',\n duration: 1000,\n animate: true,\n });\n\n // 启动渲染动画\n loca.animate.start();\n\n let dat = new Loca.Dat();\n dat.addLayer(scatter, ' 贴地');\n dat.addLayer(breathRed, '红色');\n dat.addLayer(breathYellow, '黄色');\n }\n async createMap(){\n this.AMap = await AMapLoader.load({\n key: \"473b52010df7d3a32db0a2f5db245c8e\", // 申请好的Web端开发者Key,首次调用 load 时必填\n version: \"2.0\", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15\n \"Loca\":{ // 是否加载 Loca, 缺省不加载\n \"version\": '2.0.0' // Loca 版本,缺省 1.3.2\n },\n })\n\n this.map = new this.AMap.Map('container',{\n zoom: 11.7,\n center: [113.97199630737305, 22.5807295363949],\n pitch: 40,\n showLabel: false,\n mapStyle: 'amap://styles/dark',\n viewMode: '3D',\n });\n }\n}\n","<div id=\"container\"></div>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule, Routes } from '@angular/router';\n// import { EditAmapPositionPickerModule } from './edit-amap-position-picker';\nimport { PageMapStartComponent } from './page-map.start/page-map.start.component';\nimport { CompPoiPickerModule } from './comp-poi-picker/comp-poi-picker.module';\nimport { PagePlanRouteComponent } from './page-plan-route/page-plan-route.component';\nimport { IonicModule } from '@ionic/angular';\nimport { PageLocaScatterComponent } from './page-loca-scatter/page-loca-scatter.component';\n\nconst routes: Routes = [\n {\n path:\"start\", component:PageMapStartComponent\n },\n {\n path:\"plan/route\", component:PagePlanRouteComponent\n },\n {\n path:\"loca/scatter\", component:PageLocaScatterComponent\n }\n];\n@NgModule({\n declarations: [\n PageMapStartComponent,\n PagePlanRouteComponent,\n PageLocaScatterComponent\n ],\n imports: [\n CommonModule,\n // EditAmapPositionPickerModule,\n RouterModule.forChild(routes),\n // \n IonicModule.forRoot({mode:\"ios\"}),\n // 引用自定义独立组件模块\n CompPoiPickerModule\n ],\n exports:[\n CompPoiPickerModule\n ]\n})\nexport class FmodeMapModule { }\n","import { Injectable } from '@angular/core';\nimport ObsClient from \"esdk-obs-browserjs\"\nimport Parse from \"parse\";\n\n/**\n * HwobsDir 华为OBS目录接口\n * @public\n */\nexport interface HwobsDir{\n Prefix:string // \"storage/2023/\"\n\n}\n\n/**\n * HwobsDir 华为OBS文件接口\n * @public\n */\nexport interface HwobsFile{\n ETag: \"\\\"f0ec968fe51ab48348307e06476122eb\\\"\"\n Key:string //\"storage/3mkf41033623275.png\"\n LastModified:string //\"2023-11-08T12:03:13.008Z\"\n Owner:object // {ID: '09971a1979800fb60fbbc00ada51f7e0'}\n Size:string //\"25839\"\n StorageClass:string //\"STANDARD\"\n}\n\n/**\n * HwobsService 华为OBS文件服务\n * @public\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class HwobsService {\n obsClient:ObsClient\n bucketName:string\n host:string\n constructor() {\n this.host = \"https://web3-test.obs.cn-south-1.myhuaweicloud.com/\"\n this.bucketName = \"web3-test\"\n this.obsClient = new ObsClient({\n access_key_id: '6UIET20WHUI5TLXWOVNA', \n secret_access_key: 'YaoY8Kj3TeGZHEcBzplTMZiPGNL13Y3frEavC1kF',\n // 这里以华南-广州为例,其他地区请按实际情况填写\n server: 'https://obs.cn-south-1.myhuaweicloud.com'\n });\n }\n\n /**\n * 目录及检索相关函数\n */\n listDir(prefix):Promise<{\n dirs:Array<HwobsDir>,\n files:Array<HwobsFile>\n }>{\n return new Promise((resolve,reject)=>{\n this.obsClient.listObjects({\n Bucket : this.bucketName,\n Prefix : prefix,\n Delimiter: '/'\n }, (err, result) => {\n if(err){ \n console.error('Error-->' + err); \n reject(err) \n }else{ \n console.log('Status-->' + result.CommonMsg.Status);\n console.log(result)\n if(result.CommonMsg.Status < 300 && result.InterfaceResult){\n for(var j in result.InterfaceResult.Contents){\n console.log('Contents[' + j + ']:');\n console.log('Key-->' + result.InterfaceResult.Contents[j]['Key']);\n console.log('Owner[ID]-->' + result.InterfaceResult.Contents[j]['Owner']['ID']);\n }\n } \n let dirs:HwobsDir[] = result.InterfaceResult.CommonPrefixes\n let files:HwobsFile[] = result.InterfaceResult.Contents\n resolve({dirs:dirs,files:files}) \n }\n });\n })\n\n }\n\n /**\n * 文件上传相关函数\n * @param file \n * @param key \n * @returns \n */\n async uploadFile(file:File,key:string):Promise<Parse.Object>{\n // key 文件上传后的全部路径\n // /storage/<公司账套>/<应用名称>/年月日/<文件名>.<文件后缀>\n // /storage/web2023/<学号>/年月日/<文件名>.<文件后缀>\n let attach = await this.checkFileExists(file);\n if(attach?.id) return attach\n return new Promise((resolve,reject)=>{\n this.obsClient.putObject({\n Bucket : this.bucketName,\n Key : key,\n SourceFile : file\n }, async (err, result) => {\n if(err){\n console.error('Error-->' + err);\n reject(err)\n }else{\n console.log('Status-->' + result.CommonMsg.Status);\n let attach = await this.saveAttachment(file,key)\n resolve(attach)\n }\n });\n })\n }\n Attachment = Parse.Object.extend(\"Attachment\")\n\n async checkFileExists(file):Promise<Parse.Object>{\n let hash = await this.getFileHash(file)\n // 文件HASH查重,避免重复上传\n let attach:Parse.Object\n let query = new Parse.Query(\"Attachment\")\n query.equalTo(\"hash\",hash);\n query.equalTo(\"size\",file.size);\n let exists:any = await query.first();\n if(!exists?.id) exists = new this.Attachment()\n attach = exists\n return attach\n }\n async saveAttachment(file:File,key:string){\n let hash = await this.getFileHash(file)\n let attach = await this.checkFileExists(file)\n attach.set(\"name\",file.name)\n attach.set(\"size\",file.size)\n attach.set(\"mime\",file.type)\n attach.set(\"url\",this.host + key)\n attach.set(\"hash\",hash)\n attach = await attach.save()\n return attach\n }\n\n async getFileHash(file:File) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = async (event:any) => {\n const buffer = event.target.result;\n const hashBuffer = await crypto.subtle.digest('SHA-256', buffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map(byte => byte.toString(16).padStart(2, '0')).join('');\n resolve(hashHex);\n };\n reader.onerror = (event:any) => {\n reject(event.target.error);\n };\n reader.readAsArrayBuffer(file);\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IonicModule } from '@ionic/angular';\nimport { HwobsDir, HwobsFile, HwobsService } from '../service-hwobs/hwobs.service';\n\n@Component({\n standalone:true,\n imports:[\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n IonicModule\n ],\n selector: 'fm-storage-hwobs-manager',\n templateUrl: './hwobs-manager.component.html',\n styleUrls: ['./hwobs-manager.component.scss']\n})\nexport class HwobsManagerComponent {\n dirs: HwobsDir[] = [];\n files: HwobsFile[] = [];\n prefix: string = \"storage/\"\n openFile(file: any) {\n console.log('Opening file:', file);\n // Add your logic to open the file details here\n }\n openDir(dir?:HwobsDir|null,type:string=\"pre\"){\n if(dir){\n this.prefix = dir.Prefix\n this.listDir(dir.Prefix)\n }else{\n if(type==\"pre\"){\n let list = this.prefix.split(\"/\")\n if(list.length>1){\n let prefix = list.splice(0,list.length-1).join(\"/\")\n console.log(prefix)\n this.prefix = prefix\n this.listDir(prefix)\n }\n }\n }\n }\n showName(name:string){\n return name.replaceAll(this.prefix,\"\")\n }\n constructor(\n private hwobs:HwobsService\n ){\n this.listDir(this.prefix)\n }\n\n async listDir(prefix:string){\n let {dirs,files} = await this.hwobs.listDir(prefix)\n this.dirs = dirs\n this.files = files\n }\n}\n","<ion-header>\n <ion-toolbar>\n <ion-title>\n File Manager\n </ion-title>\n </ion-toolbar>\n </ion-header>\n \n <ion-content>\n <ion-list>\n <ion-item (click)=\"openDir(null,'pre')\">\n <ion-icon [name]=\"'folder'\" slot=\"start\"></ion-icon>\n <ion-label>../</ion-label>\n </ion-item>\n <ion-item *ngFor=\"let item of dirs\" (click)=\"openDir(item)\">\n <ion-icon [name]=\"'folder'\" slot=\"start\"></ion-icon>\n <ion-label>{{ showName(item.Prefix) }}</ion-label>\n </ion-item>\n <ion-item *ngFor=\"let item of files\" (click)=\"openFile(item)\">\n <ion-icon [name]=\"'document'\" slot=\"start\"></ion-icon>\n <ion-label>{{ showName(item.Key) }}</ion-label>\n </ion-item>\n </ion-list>\n </ion-content>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { HwobsManagerComponent } from './comp-hwobs-manager/hwobs-manager.component';\nimport { IonicModule } from '@ionic/angular';\nimport { Diagnostic } from '@awesome-cordova-plugins/diagnostic/ngx';\nimport { NovaUploadService } from './service-upload';\n\n@NgModule({\n declarations: [\n ],\n imports: [\n CommonModule,\n IonicModule.forRoot({mode:\"ios\"}),\n // 独立组件\n HwobsManagerComponent,\n ],\n exports:[\n HwobsManagerComponent\n ],\n providers:[\n Diagnostic,\n NovaUploadService\n ]\n})\nexport class FmodeStorgeModule { }\n","/*\n * Public API Surface of fmode-ng\n */\n\nexport * from './lib/aigc';\nexport * from './lib/map';\nexport * from './lib/storage';\nexport * from './lib/platform';\n\nexport * from \"./lib/nova-cloud\"","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["Parse","i1","i2.NovaCloudService","i3","i4.CrossService","i2","i3.NovaUploadService","i1.ImagineService","i2.ChatService","i3.FmodeVoiceService","i4.NovaCloudService","i5.ChatService","i6","i1.FmodeVoiceService","i4.ChatService","i5.NovaCloudService","i3.CompPoiPickerComponent","i1.HwobsService"],"mappings":"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"}
|