个人案例
太空人时钟
闲置手机变身桌面时钟
太空人时钟扫码体验
- 小程序文本转语音流式实时播放RealtimeTTS插件
文本转语音实时播放RealtimeTTS最新版本:1.0.1最低基础库版本:2.19.0^简介在小程序中实现文本转实时语音,在转换的过程中实时播放音频(无需等待所有文本都转换完成再播放),真正做到一边转换一边播放。适用于需要将长文本转换为语音进行实时播放、AI会话过程中打字效果进行同步朗读。 联系作者微信:i_luker邮箱:vip-mail.qq.com接入流程1、引入插件代码包 在 app.json 中添加如下代码,version 使用最新可用版 "plugins": { "text2audio": { "version": "1.0.1", "provider": "wxe1b17419621fcc3e", "export": "index.js" } } 2、创建播放器导出函数 在 app.json 同级目录创建 index.js 文件 module.exports = { createWebAudio: () => { return wx.createWebAudioContext() } } 3、在需要使用文本转语音播放组件的页面对应的 index.json 中配置引用组件 { "usingComponents": { "text2audio": "plugin://text2audio/text2audio" } } 4、在需要使用文本转语音播放组件的页面对应的 index.wxml 中引用组件并传递相关参数 <view class="container"> <view class="item" wx:for="{{items}}" wx:key="*this"> <view class="content">{{item}}</view> <view class="controller"> <!-- 使用插件中的text2audio组件 --> <text2audio voice_type="101016" content="{{item}}" msg_id="msg_{{index}}"></text2audio> </view> </view> </view> 参数说明[图片] 注意事项已接入本插件的小程序,每天可以免费调用10次。如需申请更多配额,请联系开发者。
星期二 10:50 - 小程序文本转语音流式实时播放RealtimeTTS插件发布了
文本转语音实时播放RealtimeTTS 最新版本:1.0.1 最低基础库版本:2.19.0^ 简介 在小程序中实现文本转实时语音,在转换的过程中实时播放音频(无需等待所有文本都转换完成再播放),真正做到一边转换一边播放。适用于需要将长文本转换为语音进行实时播放、AI会话过程中打字效果进行同步朗读。 接入流程 首先需要在小程序控制台-设置-第三方设置-插件管理,搜索并添加插件「文本转语音实时播放RealtimeTTS」 1、引入插件代码包 在 app.json 中添加如下代码,version 使用最新可用版 [代码] "plugins": { "text2audio": { "version": "1.0.1", "provider": "wxe1b17419621fcc3e", "export": "index.js" } } [代码] 2、创建播放器导出函数 在 app.json 同级目录创建 index.js 文件 [代码]module.exports = { createWebAudio: () => { return wx.createWebAudioContext() } } [代码] 3、在需要使用文本转语音播放组件的页面对应的 index.json 中配置引用组件 [代码]{ "usingComponents": { "text2audio": "plugin://text2audio/text2audio" } } [代码] 4、在需要使用文本转语音播放组件的页面对应的 index.wxml 中引用组件并传递相关参数 [代码]<view class="container"> <view class="item" wx:for="{{items}}" wx:key="*this"> <view class="content">{{item}}</view> <view class="controller"> <!-- 使用插件中的text2audio组件 --> <text2audio voice_type="101016" content="{{item}}" msg_id="msg_{{index}}"></text2audio> </view> </view> </view> [代码] 参数说明 参数 类型 必需 默认值 说明 content String 是 需要转换成语音的文本内容,不要超过2000个字 msg_id String 是 文本段的唯一标识(必须全局唯一) voice_type Int 否 101004 音色设置,可选值:101004=阅读男声、101026=甜美小助手、101013=新闻播音员、101001=优雅知性姐姐、101021=新闻播音员、101011=有气场的女播音员、101054=解说小哥哥、101019=时尚粤语姐姐、101015=纯真小朋友、101016=可爱萌宝宝
10-24 - 利用云函数解决域名校验和HTTPS相关问题
闲来无事,无意中发现云函数中的request网络请求可以不用配置校验域名和https,也就是说可以通过云函数封装一个请求通用函数来处理没有域名和https的网络请求(甚至包括内网穿透,可以用非80端口进行实验)。 适用场景: A、没有域名或使用局域网(直接使用IP访问); B、使用花生壳动态域名解析(内网穿透); C、有域名但不想申请配置HTTPS(懒人); D、连自己的服务器都没有,接口直接使用开源或者第三方接口且不能添加域名校验的情况(空壳); E、不愿意直接在小程序中直接暴露自己逻辑API实际请求地址的(安全); ······ 具体步骤如下: 1、给项目添加云函数支持(https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/getting-started.html) 2、新建名为“proxy”的云函数,配置支持request-promise [代码]// package.json[代码][代码]{[代码][代码] [代码][代码]"name"[代码][代码]: [代码][代码]"proxy"[代码][代码],[代码][代码] [代码][代码]"version"[代码][代码]: [代码][代码]"1.0.0"[代码][代码],[代码][代码] [代码][代码]"description"[代码][代码]: [代码][代码]""[代码][代码],[代码][代码] [代码][代码]"main"[代码][代码]: [代码][代码]"index.js"[代码][代码],[代码][代码] [代码][代码]"scripts"[代码][代码]: {[代码][代码] [代码][代码]"test"[代码][代码]: [代码][代码]"echo \"Error: no test specified\" && exit 1"[代码][代码] [代码][代码]},[代码][代码] [代码][代码]"author"[代码][代码]: [代码][代码]""[代码][代码],[代码][代码] [代码][代码]"license"[代码][代码]: [代码][代码]"ISC"[代码][代码],[代码][代码] [代码][代码]"dependencies"[代码][代码]: {[代码][代码] [代码][代码]"wx-server-sdk"[代码][代码]: [代码][代码]"latest"[代码][代码],[代码][代码] [代码][代码]"request"[代码][代码]: [代码][代码]"latest"[代码][代码],[代码][代码] [代码][代码]"request-promise"[代码][代码]: [代码][代码]"latest"[代码][代码] [代码][代码]}[代码][代码]}[代码][代码]// 云函数入口文件index.js[代码] [代码]const cloud = require([代码][代码]'wx-server-sdk'[代码][代码])[代码][代码]const rq = require([代码][代码]'request-promise'[代码][代码])[代码][代码]cloud.init()[代码][代码]// 云函数入口函数[代码][代码]// event为小程序调用的时候传递参数,包含请求参数uri、headers、body[代码][代码]exports.main = async (event, context) => {[代码][代码] [代码][代码]return[代码] [代码]await rq({[代码][代码] [代码][代码]method: [代码][代码]'POST'[代码][代码],[代码][代码] [代码][代码]uri: event.uri,[代码][代码] [代码][代码]headers: event.headers ? event.headers : {},[代码][代码] [代码][代码]body: event.body[代码][代码] [代码][代码]}).then(body => {[代码][代码] [代码][代码]return[代码] [代码]body[代码][代码] [代码][代码]}).[代码][代码]catch[代码][代码](err => {[代码][代码] [代码][代码]return[代码] [代码]err[代码][代码] [代码][代码]})[代码][代码]}[代码]3、在小程序中调用云函数请求数据请求 [代码]onLoad: [代码][代码]function[代码][代码](){[代码][代码] [代码][代码]// 初始化[代码][代码] [代码][代码]wx.cloud.init()[代码][代码]},[代码][代码]onGetItemList: [代码][代码]function[代码][代码](){[代码][代码] [代码][代码]wx.cloud.callFunction({[代码][代码] [代码][代码]name: [代码][代码]'proxy'[代码][代码],[代码][代码] [代码][代码]data: {[代码][代码] [代码][代码]// http域名 https域名 第三方域名 非验证域名 IP[:prot] 内网IP或花生壳域名[代码][代码] [代码][代码]uri: [代码][代码]'http://192.168.1.100:8081'[代码][代码],[代码][代码] [代码][代码]headers: {[代码][代码] [代码][代码]'Content-Type'[代码][代码]: [代码][代码]'application/json'[代码][代码] [代码][代码]},[代码][代码] [代码][代码]body: {[代码][代码] [代码][代码]uid: 1[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}).then(res => {[代码][代码] [代码][代码]console.log(res)[代码][代码] [代码][代码]const data = res.result[代码][代码] [代码][代码]console.log(data)[代码][代码] [代码][代码]// do something[代码][代码] [代码][代码]})[代码][代码]}[代码]然后你会发现你已经无所不能了。 个人见解,如有不妥之处,望各位大神指正!~
2018-12-03