-
2020-06-07 18:46:52
https://tts.baidu.com/text2audio?cuid=baike&lan=ZH&ctp=1&pdt=301&vol=9&rate=32&per=6&tex=试试这
可以通过改变per的参数来改变音色
把改变lan的值修改成EN可以设置成英文更多相关内容 -
易语言TTS引擎语音朗读
2020-08-22 03:57:56易语言TTS引擎语音朗读源码系统结构:回调函数,列举语音库,设置语音库,设置语速,设置声音大小,文本到语音, ======窗口程序集1 || ||------__启动窗口_创建完毕 || ||------回调函数 || || ===== -
百度朗读引擎源码-易语言
2021-06-12 21:05:17百度朗读引擎源码 -
TTS引擎语音朗读.rar
2020-04-05 15:13:55TTS引擎语音朗读.rar TTS引擎语音朗读.rar TTS引擎语音朗读.rar TTS引擎语音朗读.rar TTS引擎语音朗读.rar TTS引擎语音朗读.rar -
完整版软件朗读源码.rar
2020-04-03 06:17:16完整版软件朗读源码.rar -
语音朗读源码2.0
2014-12-02 21:56:07语音朗读2.0 in VB,新增语言选项! 源代码! VB语音朗读5.0(最新版):https://download.csdn.net/download/xhyeax/8544687 -
JS实现获取当前URL和来源URL的方法
2020-10-21 16:21:22主要介绍了JS实现获取当前URL和来源URL的方法,涉及javascript针对页面document属性操作的相关技巧,需要的朋友可以参考下 -
简单的语音朗读代码
2015-01-09 14:46:29一个很简单的语音朗读代码,输入要朗读的文本,点击按钮就可以进行语音朗读! -
MSTTS语音朗读引擎
2009-11-12 13:09:11MSTTS语音朗读引擎,让支持MSTTS技术的程序发声 -
朗读:一种很棒的浏览器扩展程序,只需单击一下即可朗读网页内容
2021-01-30 02:37:05适用于浏览器的文本语音语音阅读器扩展! | | | github统计信息: chrome网上商店的统计信息: firefox插件... “朗读”针对的是那些喜欢听内容而不是阅读的用户,阅读障碍者或其他学习障碍者,学习阅读的儿童,或者只 -
中文语音朗读网站
2019-06-05 12:51:17立刻朗读"> <script>/*JavaScript代码*/ function speeching(inputBox,speechBtn) { var inputBox = document.querySelector(inputBox), speechBtn = document.querySelector(speechBtn); var inputText =...预览地址:https://yubin.applinzi.com
预览图片:
详细代码:<!DOCTYPE html> <html> <head> <title>myweb</title> <style> html{ height: 100%; background:url(https://cdn.nlark.com/yuque/0/2019/jpeg/124897/1558635287060-assets/web-upload/074f3bf7-9354-464a-985a-282167e3d212.jpeg); background-size:100% 100%; background-repeat:no-repeat; } div{ width: 300px; margin: 100px auto 0; } .input_box{ width: 100%; height: 100px; outline: none; /*去掉轮廓线*/ border: 10px solid #000; box-sizing: border-box;/*怪异盒模型*/ resize: none;/*禁止拖拽*/ border-radius: 20px;/*圆角*/ padding: 20px; background-color: rgba(255,255,255,5); font-size: 20px; } .speech{ height: 55px; width: 100%; font-size: 18px; outline: none; border: none; background-color:#000; color: #fff; cursor: pointer;/*鼠标样式,小手*/ border-radius: 20px; } .speech:hover{/*hover伪类选择器 当鼠标滑过speech改变背景颜色*/ background-color: #ea4c89 } </style> </head> <body > <div> <textarea class="input_box" placeholder="请输入文字......"></textarea> <input class="speech" type="submit" value="立刻朗读"> </div> <script>/*JavaScript代码*/ function speeching(inputBox,speechBtn) { var inputBox = document.querySelector(inputBox), speechBtn = document.querySelector(speechBtn); var inputText = ''; speechBtn.onclick = function(){ var message = null;/*默认文本框为空*/ var text = inputBox.value;/*接收按钮得到的值*/ message = new SpeechSynthesisUtterance(text);/*传给message*/ window.speechSynthesis.speak(message);/*利用电脑本身应用读取输入内容*/ } } </script> <script> speeching('.input_box','.speech'); </script> </body> </html>
-
调用讯飞API朗读新浪国际新闻版块最新消息
2019-05-21 20:36:50# readtxt_by_SAPI(i) #可以选择其他朗读引擎 # readtxt_by_pyttsx3(i) import paqu_sina readnews ( paqu_sina . newtitlelist ( ) ) ) 爬取新浪国际新闻版块最新消息 将该脚本命名为paqu_sina.py ...- 调用讯飞API将文字转为语音文件
- 爬取新浪国际新闻版块最新消息保存到xlsx
- 讯飞API 文字有限制
- python程序打包成exe
- 语音即时播放
定制新闻朗读助手(调用科大讯飞API)
调用讯飞API将文字转为语音文件
#-*- coding: utf-8 -*- import pyaudio import wave import os def play_xunfei(wavfilename): CHUNK = 1024 # 从目录中读取语音 # wf = wave.open('mic4.wav', 'rb') wf = wave.open(wavfilename, 'rb') # read data data = wf.readframes(CHUNK) # 创建播放器 p = pyaudio.PyAudio() # 获得语音文件的各个参数 FORMAT = p.get_format_from_width(wf.getsampwidth()) CHANNELS = wf.getnchannels() RATE = wf.getframerate() # print('FORMAT: {} \nCHANNELS: {} \nRATE: {}'.format(FORMAT, CHANNELS, RATE)) # 打开音频流, output=True表示音频输出 stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, frames_per_buffer=CHUNK, output=True) # play stream (3) 按照1024的块读取音频数据到音频流,并播放 while len(data) > 0: stream.write(data) data = wf.readframes(CHUNK) import requests import time import hashlib import base64 # 合成webapi接口地址 URL = "http://api.xfyun.cn/v1/service/v1/tts" # 音频编码(raw合成的音频格式pcm、wav,lame合成的音频格式MP3) AUE = "raw" # 应用APPID(必须为webapi类型应用,并开通语音合成服务,参考帖子如何创建一个webapi应用:http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=36481 APPID = "5ce265c9" # 接口密钥(webapi类型应用开通合成服务后,控制台--我的应用---语音合成---相应服务的apikey) API_KEY = "dedd145d73ca0e1fd5e70a77f38365a1" # 组装http请求头 def getHeader(): curTime = str(int(time.time()))#1558401768 # ttp=ssml param = "{\"aue\":\"" + AUE + "\",\"auf\":\"audio/L16;rate=16000\",\"voice_name\":\"xiaoyan\",\"engine_type\":\"intp65\"}" # print("param:{}".format(param)) paramBase64 = str(base64.b64encode(param.encode('utf-8')), 'utf-8') # print("x_param:{}".format(paramBase64)) m2 = hashlib.md5() m2.update((API_KEY + curTime + paramBase64).encode('utf-8')) checkSum = m2.hexdigest() # print('checkSum:{}'.format(checkSum)) header = { 'X-CurTime': curTime, 'X-Param': paramBase64, 'X-Appid': APPID, 'X-CheckSum': checkSum, 'X-Real-Ip': '127.0.0.1', 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8', } # print(header) return header def getBody(text): data = {'text': text} return data def writeFile(file, content): with open(file, 'wb') as f: f.write(content) f.close() # 待合成文本内容 #with open('t2v_test.txt','r',encoding='utf-8') as f: # line = f.read() #r = requests.post(URL, headers=getHeader(), data=getBody("内容")) #待合成文本,使用utf-8编码,需urlencode,长度小于1000字节 一个汉字两个字节 def readtxt_by_xunfei(readcontent): print('讯飞正在支持朗读助手') r = requests.post(URL, headers=getHeader(), data=getBody(readcontent)) contentType = r.headers['Content-Type'] if contentType == "audio/mpeg": sid = r.headers['sid'] if AUE == "raw": # print(r.content) # 合成音频格式为pcm、wav并保存在audio目录下 # writeFile("audio/" + sid + ".wav", r.content) writeFile(sid + ".wav", r.content) else: # print(r.content) # 合成音频格式为mp3并保存在audio目录下 writeFile("audio/" + "xiaoyan" + ".mp3", r.content) wavfilename=sid + ".wav" print("success, sid = " + sid) play_xunfei(wavfilename) os.remove(wavfilename) else: # 错误码链接:https://www.xfyun.cn/document/error-code (code返回错误码时必看) print(r.text) def readtxt_by_SAPI(content): print('SAPI正在支持朗读助手') import win32com.client speaker = win32com.client.Dispatch("SAPI.SpVoice") speaker.Speak(content) def readtxt_by_pyttsx3(content): print('pyttsx3正在支持朗读助手') import pyttsx3 engine = pyttsx3.init() volume=engine.getProperty('volume') engine.setProperty('volume', volume + 0.25) engine.say(content) engine.runAndWait() engine.stop() def readnews(titlelist): for i in titlelist: readtxt_by_xunfei(i) # readtxt_by_SAPI(i) #可以选择其他朗读引擎 # readtxt_by_pyttsx3(i) import paqu_sina readnews(paqu_sina.newtitlelist()))
爬取新浪国际新闻版块最新消息
将该脚本命名为paqu_sina.py
import requests from bs4 import BeautifulSoup import time import json import re import pandas import sys if sys.getdefaultencoding() != 'utf-8': reload(sys) sys.setdefaultencoding('utf-8') def getnewcontent(url): result = {} info = requests.get(url) info.encoding = 'utf-8' html = BeautifulSoup(info.text, 'html.parser') result['title'] = html.select('.second-title')[0].text result['date'] = html.select('.date')[0].text result['source'] = html.select('.source')[0].text article = [] for v in html.select('.article p')[:-1]: article.append(v.text.strip()) author_info = '\n'.join(article) result['content'] = author_info result['author'] = html.select('.show_author')[0].text.lstrip('责任编辑:') newsid = url.split('/')[-1].rstrip('.shtml').lstrip('doc-i') commenturl = 'http://comment5.news.sina.com.cn/page/info?version=1&format=json&channel=gj&newsid=comos-{}&group=undefined&compress=0&ie=utf-8&oe=utf-8&page=1&page_size=3&t_size=3&h_size=3&thread=1&callback=jsonp_1536041889769&_=1536041889769' comments = requests.get(commenturl.format(newsid)) regex = re.compile(r'(.*?)\(')#去除左边特殊符号 tmp = comments.text.lstrip(regex.search(comments.text).group()) jd = json.loads(tmp.rstrip(')')) result['comment'] = jd['result']['count']['total'] #获取评论数 return result def getnewslink(url): test = requests.get(url) test2 = test.text.lstrip('newsloadercallback(') jd = json.loads(test2.rstrip(')\n')) content = [] for v in jd['result']['data']: content.append(getnewcontent(v['url'])) return content def getdata(): url = 'https://interface.sina.cn/news/get_news_by_channel_new_v2018.d.html?cat_1=51923&show_num=27&level=1,2&page={}&callback=newsloadercallback&_=1536044408917' weibo_info = [] for i in range(1,3): newsurl = url.format(i)#字符串格式化用i替换{} weibo_info.extend(getnewslink(newsurl)) return weibo_info def newtitlelist(): print('正在载入新闻内容,请稍后。。。') new_info = getdata() #df = pandas.DataFrame(new_info) #df #去除全部 df.head() 取出5行 head(n) n行 #将文件下载为excel表格 #df.title #df.to_excel('weibonews.xlsx') titlelist=[] for i in new_info: titlelist.extend([i['title']]) return titlelist
安装pyinstaller打包exe
1、安装pyinstaller(需要先安装pip)、再:pip install pyinstaller
2、定位到pyinstaller.exe所在文件夹(一般再python下的“scripts”文件夹下)
(温馨提示鼠标吧文件拖进CMD里面)
3、再添加上你要转换的文件地址(两者之间有空格)
pyinstaller.exe后面如果加上-F就是打包为一个exe文件(文件会比较大),如果不加就会有很多库文件;加上-w就是打包为没有cmd窗口的exe,不加运行时就会出现cmd窗口。(加不加凭个人喜好)
例如
被打包的文件: xx.py, 人人皆知.
打包的命令: pyinstaller -D xx.py
打包的console提示: 见随后的引述块
打包发布exe时的纪律(注意事项):
很简单的py脚本. Simple is better than complex. 应该遵守Python的规则.
所以在打包为exe时, 应该尽量减少没有必要的python包的导入. 否则吃的太胖
可以运行的exe文件位于: dist 目录下, 而不是build目录下的.运行
离线可选择其他语音合成引擎
pyttsx3模块初探及实战项目
import pyttsx3 engine = pyttsx3.init() # object creation """ RATE""" rate = engine.getProperty('rate') # getting details of current speaking rate print (rate) #printing current voice rate engine.setProperty('rate', 125) # setting up new voice rate """VOLUME""" volume = engine.getProperty('volume') #getting to know current volume level (min=0 and max=1) print (volume) #printing current volume level engine.setProperty('volume',1.0) # setting up volume level between 0 and 1 """VOICE""" voices = engine.getProperty('voices') #getting details of current voice #engine.setProperty('voice', voices[0].id) #changing index, changes voices. o for male engine.setProperty('voice', voices[1].id) #changing index, changes voices. 1 for female engine.say("Hello World!") engine.say('My current speaking rate is ' + str(rate)) engine.runAndWait() engine.stop()
import win32com.client #用 微软这个服务器 朗读中文小说 speaker = win32com.client.Dispatch("SAPI.SpVoice") with open('t2v_test.txt','r',encoding='utf-8') as f: line = f.read() speaker = win32com.client.Dispatch("SAPI.SpVoice") speaker.Speak(line)
-
URL 源码分析
2020-09-11 16:15:27资源可以是简单的文件或目录,或者它可以是对更复杂对象的引用,例如对数据库或搜索引擎的查询。这个类的作用就是URL的定位的作用,定位了每个资源符号引用的位置。整个URL大体上就是对URL内容进行规范,对URL进行...URL表示统一资源定位器,指向世界上“资源”的指针万维网。资源可以是简单的文件或目录,或者它可以是对更复杂对象的引用,例如对数据库或搜索引擎的查询。这个类的作用就是URL的定位的作用,定位了每个资源符号引用的位置。整个URL大体上就是对URL内容进行规范,对URL进行解析。
构造方法是通过文件里面的端口和文件的访问主机对这个URL进行构造。
public URL(String protocol, String host, int port, String file) throws MalformedURLException { this(protocol, host, port, file, null); }
URL的构造方法,这个构造方法里面传输了URL里面的协议,主机名,端口号和文件名,最后通过流协议处理器来进行URL的解析。
public URL(String protocol, String host, int port, String file, URLStreamHandler handler) throws MalformedURLException { if (handler != null) { //安全管理器检查 SecurityManager sm = System.getSecurityManager(); if (sm != null) { checkSpecifyHandler(sm); } } protocol = protocol.toLowerCase(); this.protocol = protocol; //判断主机名是否为空 if (host != null) { //根据冒号和中括号来判断主机名是否是ip地址 if (host.indexOf(':') >= 0 && !host.startsWith("[")) { host = "["+host+"]"; } this.host = host; //端口号小于-1,抛出异常说明这个端口号是无效端口。 if (port < -1) { throw new MalformedURLException("Invalid port number :" + port); } this.port = port; //判断主机名中是否有端口号 authority = (port == -1) ? host : host + ":" + port; } //Parts类对文件的信息进行处理。 Parts parts = new Parts(file); path = parts.getPath(); query = parts.getQuery(); if (query != null) { this.file = path + "?" + query; } else { this.file = path; } ref = parts.getRef(); //注意:我们这里没有对URL进行完全验证。因为太冒险会变化。现在,但仅供将来参考。-比尔 if (handler == null && (handler = getURLStreamHandler(protocol)) == null) { throw new MalformedURLException("unknown protocol: " + protocol); } this.handler = handler; //调用URL流处理器来进行URL的解析。 if (host != null && isBuiltinStreamHandler(handler)) { //IP地址工具类,检查存在的表单。 String s = IPAddressUtil.checkExternalForm(this); if (s != null) { throw new MalformedURLException(s); } } //判断是否是jar的连接协议 if ("jar".equalsIgnoreCase(protocol)) { if (handler instanceof sun.net.www.protocol.jar.Handler) { String s = ((sun.net.www.protocol.jar.Handler) handler).checkNestedProtocol(file); if (s != null) { throw new MalformedURLException(s); } } } }
URL反序列化状态值
public UrlDeserializedState(String protocol, String host, int port, String authority, String file, String ref, int hashCode) { this.protocol = protocol; this.host = host; this.port = port; this.authority = authority; this.file = file; this.ref = ref; this.hashCode = hashCode; }
文件信息分离,分离“#”符号以后的引用内容,分离"?"以后的参数。见文末“#”引用在URL地址中的作用。
class Parts { String path, query, ref; Parts(String file) { //分割URL中“#”引用符号 int ind = file.indexOf('#'); ref = ind < 0 ? null: file.substring(ind + 1); file = ind < 0 ? file: file.substring(0, ind); int q = file.lastIndexOf('?'); if (q != -1) { query = file.substring(q+1); path = file.substring(0, q); } else { path = file; } } String getPath() { return path; } String getQuery() { return query; } String getRef() { return ref; } }
URL读取内容处理方法。设置URLStreamHandler 目的是为了进行开启连接和进行URL的字符串的解析。
private Object readResolve() throws ObjectStreamException { URLStreamHandler handler = null; //已签入readObject handler = getURLStreamHandler(tempState.getProtocol()); URL replacementURL = null; //判断流处理器是否是从sun.net.www.protocol调用 if (isBuiltinStreamHandler(handler.getClass().getName())) { //配置新的URL replacementURL = fabricateNewURL(); } else { //设置反序列化的参数 replacementURL = setDeserializedFields(handler); } return replacementURL; } //设置URL反序列化参数。 private URL setDeserializedFields(URLStreamHandler handler) { URL replacementURL; String userInfo = null; String protocol = tempState.getProtocol(); String host = tempState.getHost(); int port = tempState.getPort(); String authority = tempState.getAuthority(); String file = tempState.getFile(); String ref = tempState.getRef(); int hashCode = tempState.getHashCode(); //构建权限部分 if (authority == null && ((host != null && host.length() > 0) || port != -1)) { if (host == null) host = ""; authority = (port == -1) ? host : host + ":" + port; //处理包含用户信息的主机 int at = host.lastIndexOf('@'); if (at != -1) { userInfo = host.substring(0, at); host = host.substring(at+1); } } else if (authority != null) { //构建用户信息部分 int ind = authority.indexOf('@'); if (ind != -1) userInfo = authority.substring(0, ind); } //构造路径和查询部分 String path = null; String query = null; if (file != null) { //修正:只有在等级制度下才能这样做? int q = file.lastIndexOf('?'); if (q != -1) { query = file.substring(q+1); path = file.substring(0, q); } else path = file; } //设置对象字段。 this.protocol = protocol; this.host = host; this.port = port; this.file = file; this.authority = authority; this.ref = ref; this.hashCode = hashCode; this.handler = handler; this.query = query; this.path = path; this.userInfo = userInfo; replacementURL = this; return replacementURL; }
static final String BUILTIN_HANDLERS_PREFIX = "sun.net.www.protocol"; boolean isBuiltinStreamHandler(URLStreamHandler handler) { Class<?> handlerClass = handler.getClass(); return isBuiltinStreamHandler(handlerClass.getName()) || (handlerClass.getClassLoader() == null); } private boolean isBuiltinStreamHandler(String handlerClassName) { return (handlerClassName.startsWith(BUILTIN_HANDLERS_PREFIX)); }
//临时参数存放 private transient UrlDeserializedState tempState; private URL fabricateNewURL() throws InvalidObjectException { //从反序列化对象创建URL字符串 URL replacementURL = null; //获取URL字符串 String urlString = tempState.reconstituteUrlString(); try { replacementURL = new URL(urlString); } catch (MalformedURLException mEx) { resetState(); InvalidObjectException invoEx = new InvalidObjectException( "Malformed URL: " + urlString); invoEx.initCause(mEx); throw invoEx; } replacementURL.setSerializedHashCode(tempState.getHashCode()); resetState(); return replacementURL; }
final class UrlDeserializedState { private final String protocol; private final String host; private final int port; private final String authority; private final String file; private final String ref; private final int hashCode; public UrlDeserializedState(String protocol, String host, int port, String authority, String file, String ref, int hashCode) { this.protocol = protocol; this.host = host; this.port = port; this.authority = authority; this.file = file; this.ref = ref; this.hashCode = hashCode; } //预计算StringBuilder的长度 int len = protocol.length() + 1; if (authority != null && authority.length() > 0) len += 2 + authority.length(); if (file != null) { len += file.length(); } if (ref != null) len += 1 + ref.length(); StringBuilder result = new StringBuilder(len); result.append(protocol); result.append(":"); if (authority != null && authority.length() > 0) { result.append("//"); result.append(authority); } if (file != null) { result.append(file); } if (ref != null) { result.append("#"); result.append(ref); } return result.toString(); } }
附:URL类的使用方法 https://www.cnblogs.com/blackiesong/p/6182038.html URL中#的作用 https://www.cnblogs.com/kaituorensheng/p/3776527.html
-
易语言源码易语言TTS引擎语音朗读源码.rar
2020-03-30 14:03:33易语言源码易语言TTS引擎语音朗读源码.rar -
免费共享版-逍遥语音朗读工具
2014-12-03 16:50:15tts 语音朗读 语音报时 语音提醒 文字转WAV -
利用百度语音合成API,生成一段文字的语音网址
2021-04-21 13:52:28def get_baidu_voice_url(text): api_base = 'https://tts.baidu.com/text2audio?tex=' token = '&cuid=baike&lan=ZH&ctp=1&pdt=301&vol=9&rate=32&per=0' url_encoded_text = ... -
中文朗读器实现的源代码
2011-04-10 23:04:01利用微软提供的SAPI库实现中文朗读。这里是源代码 -
python 文字语音朗读-怎么用 Python 来朗读网页 ?
2020-11-01 12:02:31那么不妨试试用 Python 来朗读给你听吧。网页转换成语音,步骤无外乎:网页正文识别,获取到正文的文本内容;文本转语音,通过接口将文本转换成语音文件;语音文件的发声,即将语音文件读出;1 网页正文识别之所以用... -
百度和有道还有bing的语音播报发音url接口,有女声也有男声
2015-07-25 00:51:40http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&text=百度翻译女声语音播报apihttp://api.microsofttranslator.com/v2/http.svc/speak?appId=TJnIprF8gfKIzzWSJUYbWZBxOdX4nQDJK4o5BoiI42GE*&language=zh-TW&... -
使用URL在线语音合成
2015-12-29 11:57:17最近一直在做手机的项目,用到了语音合成与识别的功能,就找了几个网址做了分析,这里仅仅实现了...使用这个URL,你需要POST content 数据到这个URL上面,会返回一个MP3的URL播放地址,然后使用这个地址播放就可以了 -
网页中文本朗读功能开发实现分享
2021-06-09 02:44:56网页中文本朗读功能开发实现分享前几天完成了一个需求,在网页中完成鼠标指向哪里,就用语音读出所指的文本。如果是按钮、链接、文本输入框,则还还要给出是什么的提醒。同时针对大段的文本,不能整段的去读,要按照... -
Python喜马拉雅有声小说音频文件爬虫
2021-03-18 08:21:38今天爬取的是喜马拉雅有声小说。 ... 分析操作开始: ...我们尝试访问一下该接口的url,将url复制到浏览器打开。 发起访问后,跳转出了一个保存文件到本地的界面。 我们选择保存,发现多了一个类型 -
在网页上通过JS实现文本的语音朗读
2021-06-09 02:43:55ie=UTF-8&spd=2&text=你要转换的文字参数说明:lan=zh:语言是中文,如果改为lan=en,则语言是英文。ie=UTF-8:文字格式。spd=2:语速,可以是1-9的数字,数字越大,语速越快。text=**:这个就是你要转换的... -
推荐几个好的URL
2005-09-21 15:51:00个人图书馆www.360doc.com/大型软件下载www.51windows.net -
使用微软TTS语音引擎实现文本朗读
2019-03-15 15:38:09使用微软TTS语音引擎实现文本朗读 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/byxdaz/article/details/78443954 TTS(Text-To-Speech)是指文本语音的简称,即通过TTS引擎把... -
[转载]Android中使用语音引擎入门七步曲
2013-03-15 16:41:00现在,随着移动应用的日益普及,移动语音应用越来越受到用户的重视和喜爱,本文将指导用户如何在Android SDK中使用语音引擎去创建简单的应用。在Android中使用语音引擎其实是很容易的事情,通过若干步骤就可以实现了... -
阅读引擎开源项目调研总结
2018-02-02 09:56:29该阅读器实现了本地书架、从SD卡导入电子书 、语音朗读功能。阅读时具有仿真翻页、自动记录阅读进度、可设置字体大小、设置阅读亮度、设置书签、夜间日间模式切换及具有进度调整功能。 功能介绍: 1、语音朗读... -
阅读书源最新2020在线导入_【授人以渔】你想要阅读的,这里都有。
2020-11-20 08:52:00(只要网络上有人分享上传了)﹀﹀﹀一、阅读(安卓)1、下载链接:https://www.coolapk.com/apk/io.legado.app.release2、食用方法:方法一 ( 网络导入 ): 复制源URL,打开阅读"订阅"->点击右上角设置->选择".....