首页 > 其他分享 >简单做了一个语言翻译的功能

简单做了一个语言翻译的功能

时间:2023-06-19 16:35:17浏览次数:31  
标签:翻译 语言 val res top 10px 简单 font data

  1 //html部分
  2 <template>
  3   <div style="background-color:#F6F6F6 ;height:100vh;">
  4     <header><van-icon name="arrow-left" class="iconreturn" @click="$router.go(-1)" />{{ $t('function.votra') }}</header>
  5     <div class="speakbg">
  6       <img src="../../../assets/speak.png" class="imgk" @touchstart="beginspeak" @touchend="endspeak" id="imgs"
  7         ref="btnRef">
  8       <!-- <img src="../../../assets/speak.png" class="imgk" @click="endspeak" id="imgs" ref="btnRef"> -->
  9 
 10       <p class="wkspeak">欢迎使用语音模式 </p>
 11       <P class="beginspeak" v-if="speakopen">请轻点图标开始/暂停说话</P>
 12       <P class="beginspeak" v-else>正在聆听中,请稍等</P>
 13 
 14       <!-- <p class="release" @click="hearlongs">播放语音</p> -->
 15       <!-- <div id="my_camera"></div> -->
 16     </div>
 17     <div class="resultbg">
 18       <div class="result"><el-input type="textarea" class="textareaone" v-model="textone" resize="false" :readonly="true">
 19 
 20         </el-input>
 21         <span class="result-titles">原语音内容</span>
 22         <el-button class="result-release" @click="releaseMusic" type="text"><img
 23             src='../../../assets/release.png'></el-button>
 24 
 25       </div>
 26       <div class="results"><el-input type="textarea" class="textareaone" v-model="texttwo" resize="false"
 27           :readonly="true"></el-input>
 28         <span class="results-title">转译内容</span>
 29         <span class="results-lan" @click="openLanChoose"><img :src="imgs">{{ lan }}<i
 30             class="el-icon-arrow-down"></i></span>
 31         <el-button class="results-release" @click="releaseNewMusic" type="text"><img
 32             src='../../../assets/release.png'></el-button>
 33       </div>
 34     </div>
 35 
 36     <van-action-sheet v-model="show" :actions="actions" @select="onSelect" title="语言切换" />
 37   </div>
 38 </template>
 39 <script >
 40 import Recorder from 'js-audio-recorder';
 41 import lanList from '../../../utils/laug'
 42 export default {
 43   props: {
 44   },
 45   data() {
 46     return {
 47       textone: '',
 48       texttwo: '',
 49       show: false,
 50       values: 'zh-cn',
 51       lan: '英语',
 52       speakopen: true,
 53       speaker: 'en-US-RogerNeural',
 54       actions: lanList.lanList.countryList,
 55       imgs: require('../../../assets/country/UK.png'),
 56       recorder: new Recorder({
 57         sampleBits: 16,                 // 采样位数,支持 8 或 16,默认是16
 58         sampleRate: 16000,              // 采样率,支持 11025、16000、22050、24000、44100、48000,根据浏览器默认值,我的chrome是48000
 59         numChannels: 1,                 // 声道,支持 1 或 2, 默认是1
 60         // compiling: false,(0.x版本中生效,1.x增加中)  // 是否边录边转换,默认是false
 61       })
 62     };
 63   },
 64   watch: {
 65 
 66   },
 67   mounted() {
 68   console.log(this.actions)
 69 
 70   },
 71   methods: {
 72     beginspeak() {
 73       this.textone = '';
 74       this.texttwo = '';
 75       Recorder.getPermission().then(
 76         () => {
 77           console.log("开始录音");
 78           this.speakopen = false;
 79           this.recorder.start(); // 开始录音
 80         },
 81         (error) => {
 82           this.$message({
 83             message: error.message,
 84             type: "info",
 85           });
 86           console.log(`${error.name} : ${error.message}`);
 87         }
 88       );
 89     },
 90     endspeak() {
 91       // 暂停录音
 92       this.speakopen = true;
 93       // 获取录音结果
 94       // this.recorderEx.getPlayTime();
 95       this.recorder.stop();
 96       const wavBlob = this.recorder.getWAVBlob() // blob格式
 97       // this.recorder.downloadWAV('翻译');
 98       const newbolb = new Blob([wavBlob], { type: 'audio/wav' })
 99       //获取当时时间戳作为文件名
100       const fileOfBlob = new File([newbolb], new Date().getTime() + '.wav')
101       console.log(fileOfBlob)
102       this.file = fileOfBlob;
103       this.lanChangeText();
104     },
105 
106     onSelect(val) {
107       console.log(val, 'askdjsa');
108       this.lan = val.cname;
109       this.imgs = val.img;
110       this.values = val.type;
111       this.getVals(this.textone)
112       this.speaker = val.speaker;
113       //  this.getVal(val);
114     },
115     getWAVRecordAudioData() {
116       var wavBlob = this.recorder.getWAVBlob();
117     },
118     openLanChoose() {
119       this.actions.map((item,index)=>{
120       item.name = item.cname
121     })
122       this.show = true;
123     },
124     releaseMusic() {
125       this.recorder.play()
126     },
127     hearlongs() {
128       recorder.play()
129     },
130     releaseNewMusic() {
131       this.$axios({
132         url: this.loginbases + '/textToSpeek/222.mp3',
133         method: 'POST',
134         headers: {
135           'Content-Type': 'application/x-www-form-urlencoded'
136         },
137         responseType: 'arraybuffer',
138         data: {
139           voice: this.speaker,
140           rate: '+0%',
141           volume: '+10%',
142           text: this.texttwo
143         }
144       }).then((res) => {
145         console.log(res)
146         this.dataurl = this.getObjectURL(res.data, 'audio/mp3');
147         console.log(this.dataurl)
148         var player = new Audio(this.dataurl);
149         player.play()
150 
151       })
152     },
153     // 将返回的流数据转换为url
154     getObjectURL(file, type) {
155       return window.URL.createObjectURL(new Blob([file], { type }))
156     },
157 
158     //调用语音转换文字的功能
159     lanChangeText() {
160       this.$axios({
161         url: this.loginbases + '/audioToText',
162         method: 'POST',
163         headers: {
164           'Content-Type': 'multipart/form-data'
165         },
166         data: {
167           file: this.file
168         }
169       }).then((res) => {
170         console.log(res.data.data)
171         this.texttwo = res.data.data;
172         this.getVal(this.texttwo)
173 
174       })
175 
176     },
177     getVal(val) {
178       this.$axios({
179         url: this.loginbases + '/translation',
180         method: 'POST',
181         headers: {
182           'Content-Type': 'application/x-www-form-urlencoded'
183         },
184         data: {
185           text: val,
186           dest: this.values
187 
188         }
189       }).then((res) => {
190         console.log(res)
191         if (res.data.code == 200) {
192 
193           this.textone = res.data.data;
194         }
195       })
196 
197 
198     },
199     getVals(val) {
200       this.$axios({
201         url: this.loginbases + '/translation',
202         method: 'POST',
203         headers: {
204           'Content-Type': 'application/x-www-form-urlencoded'
205         },
206         data: {
207           text: val,
208           dest: this.values
209 
210         }
211       }).then((res) => {
212         console.log(res)
213         if (res.data.code == 200) {
214 
215           this.texttwo = res.data.data;
216         }
217       })
218 
219 
220     },
221 
222 
223 
224   },
225   mounted() {
226 
227 
228   },
229 
230 };
231 
232 </script>
233 <style lang="scss" scoped>
234 .pic {
235   width: 200px;
236   height: 200px;
237 }
238 
239 .van-action-sheet {
240   max-height: 30%;
241 }
242 
243 .van-action-sheet__header {
244   font-size: 10px;
245   line-height: 3.6rem;
246 }
247 
248 .van-action-sheet__header {
249   background: rgba(244,238,235,0.5);
250 }
251 .van-action-sheet__item{
252   background: rgba(244,238,235,0.5);
253   color: #5F5650;
254   font-weight: 400;
255 }
256 .van-action-sheet__item:hover{
257   background:rgba(183,173,168,0.15);
258   color: #2F2620;
259   font-weight: 500;
260 }
261 // .van-action-sheet
262 .van-action-sheet__item {
263   font-size: 10px;
264   line-height: 3rem;
265   padding: 5px 0;
266 }
267 
268 .van-action-sheet__close {
269   font-size: 10px;
270   padding: 0 10px;
271 }
272 
273 >>>.el-textarea__inner {
274   height: 120px;
275   background: #fff;
276   font-size: 10px;
277   border-radius: 6.4px;
278   border: none;
279   padding-top: 28px;
280   margin-top: 10px;
281   text-indent: 12px;
282 
283 }
284 
285 #my_camera {
286   height: 100vh;
287 }
288 
289 .iconreturn {
290   position: absolute;
291   left: 8px;
292   top: 10px;
293 }
294 
295 .speakbg {
296   background-color: #fff;
297   padding-bottom: 20px;
298 }
299 
300 .imgk {
301   width: 60px;
302   height: 60px;
303   margin-top: 52px;
304 
305   -webkit-touch-callout: none;
306   -webkit-user-select: none;
307   -khtml-user-select: none;
308   -moz-user-select: none;
309   -ms-user-select: none;
310   user-select: none;
311 }
312 
313 .wkspeak {
314   margin-top: 3px;
315   color: #B7ADA8;
316 }
317 
318 .results {
319   position: relative;
320 
321   &-title {
322     position: absolute;
323     left: 16px;
324     top: 22px;
325     font-size: 9px;
326     color: #019EFF
327   }
328 
329   &-release {
330     position: absolute;
331     top: 26px;
332     left: 12px;
333     font-size: 12px;
334     color: #019EFF
335   }
336 
337   &-lan {
338     position: absolute;
339     right: 10px;
340     top: 25px;
341     display: flex;
342     color: #019EFF;
343     font-size: 8px;
344     line-height: 8px;
345 
346     img {
347       width: 10px;
348       height: 10px;
349       padding: 0 4px;
350       line-height: 4px;
351       // position: absolute;
352       right: 35px;
353       margin-top: -2px;
354 
355     }
356 
357     i {
358       margin-left: 2px;
359     }
360   }
361 }
362 
363 .result {
364   position: relative;
365 
366   &-titles {
367     position: absolute;
368     left: 16px;
369     top: 22px;
370     color: #FF6201;
371     font-size: 9px;
372   }
373 
374   &-release {
375     position: absolute;
376     top: 26px;
377     left: 12px;
378     font-size: 12px
379   }
380 
381 }
382 
383 .beginspeak {
384   color: #36291E;
385   font-size: 12px;
386   margin-top: 8px;
387 }
388 </style>

 

标签:翻译,语言,val,res,top,10px,简单,font,data
From: https://www.cnblogs.com/1229834468wty/p/17491454.html

相关文章

  • 数据库信息速递 阿里巴巴的分布式数据库OceanBase旨在进军中国以外的市场 (翻译)...
    该分布式SQL兼容数据库支持混合事务分析处理(HTAP),可以在低规格的机器上运行,例如树莓派,该公司表示。阿里巴巴及其金融服务子公司蚂蚁金服已经为中国以外的市场推出了OceanBase分布式关系数据库的新版本。该版本名为OceanBase4.0,于上周发布,可以在单个低规格机器上运行,例如树莓派,并且......
  • ChatGPT:语言模型的进化与应用前景
    当代技术的进步为我们带来了各种令人兴奋的创新,其中ChatGPT(ChatbotGPT)是人工智能领域的一项重要成果。ChatGPT是基于GPT(GenerativePre-trainedTransformer)模型的聊天机器人,它利用自然语言处理和深度学习技术,使得与机器进行对话成为可能。ChatGPT的工作原理ChatGPT的核心是......
  • ESXI的备份,备份虚拟机以防万一,简单易用版
    esxi数据很重要,如何备份,今天我们就来解决下这个问题。刚刚装完AIO的同学,都来看看你的ESXI的数据安全备份!今天介绍一款简单的易用的方法备份。一、下载备份软件传送门:傲梅企业备份旗舰版:专业可靠的企业数据备份解决方案(abackup.com)二、安装 三、登录备份后台 四......
  • Lua语言- 1
    0-Lua语言介绍特性轻量级:它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很方便的嵌入别的程序里。可扩展:Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它们,就像是本来就内置的功能一样。其它特性:支持面向过程(proce......
  • Python实现一个简单的栈结构
    基于list来实现一个栈:classSimpleStack:def__init__(self):self.__stack:list=[]​def__iter__(self):returnSimpleStackIterator(self)​def__len__(self):returnlen(self.__stack)​def__getitem__(self,index)......
  • go语言函数
    Go函数由若干语句组成的语句块、函数名称、参数列表、返回值构成,它是组织代码的最小单元完成一定的功能函数的作用结构化编程对代码的最基本的封装,一般按照功能组织一段代码封装的目的为了复用,减少冗余代码代码更加简洁美观、可读易懂函数的分类内建函数,如make、new、......
  • Android 代码优化:“这个需求很简单,怎么实现我不管”
    背景before:在我们APP启动过程,我们可能常常有这样的需求:在APP第一次进入的时候根据网络请求的结果弹一个对话框式的广告,ok~很简单,那么代码大致就是这样(这边都是伪代码,为了方便理解):@OverrideprotectedvoidonCreate(@NullableBundlesavedInstanceState){......
  • 【随笔二】Android-kotlin-实现简单计算器功能
    上一篇博客Android-kotlin-配置/入门配置好了AndroidStudioKotlin的环境;今天做一个简单的demo实战—实现一个简单的计算器功能1.选择包名,然后右键:2.选择Class类型,会有class:3.创建CounterClass:packagecn.kotlin.kotlin_oop02/***加减乘除计算的calss*varnumber1:Double......
  • Android dataBinding简单的封装
    一、简介本文是databinding使用的简单封装,主要是在基类BaseActivity和BaseFragment中二、具体步骤1.在build.gradle中开启databindingdataBinding{enabled=true}2.在BaseActivity的封装,主要是通过反射的方式获取。如下packagecom.zw.databindingdemo.java;importandroid.o......
  • R语言中根据列名删除指定的列
     001、删除a、d列a<-1:6b<-11:16c<-letters[1:6]d<-LETTERS[1:6]dat<-data.frame(a,b,c,d)datdat[,!names(dat)%in%c("a","d")]##删除a、d列 002、datlibrary(dplyr)select(dat,-c("a","......