From de34786ec2fb9cdfe59d5dff781887e36becb36a Mon Sep 17 00:00:00 2001 From: qydysky Date: Thu, 7 Jan 2021 16:48:05 +0800 Subject: [PATCH] =?utf8?q?tts=E5=8F=AF=E4=BB=A5=E4=BD=BF=E7=94=A8=E8=87=AA?= =?utf8?q?=E5=AE=9A=E4=B9=89=E7=A8=8B=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- README.md | 30 ++++++++++++++++++++++++++---- Reply/tts.go | 29 +++++++++++++++++++++++++---- demo/config/config_K_v.json | 8 ++++++-- 3 files changed, 57 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index be7f91a..48fa0ce 100644 --- a/README.md +++ b/README.md @@ -85,18 +85,40 @@ golang go version go1.15 linux/amd64 - [x] GTK信息窗支持房间切换、弹幕格式化发送、时长统计 - [x] GTK弹幕窗支持自定义人/事件消息停留 -### 构建 +### 说明 本项目使用github action自动构建,构建过程详见[yml](https://github.com/qydysky/bili_danmu/blob/master/.github/workflows/go.yml) -#### 语音 -调用tts需要ffplay,先行安装[ffmpeg](http://ffmpeg.org/download.html) +#### 私信 +在登录后,可以使用私信 +私信配置在`demo/config/config_K_v.json`有说明 +#### 语音 +调用tts默认使用ffplay,安装[ffmpeg](http://ffmpeg.org/download.html) +或使用其他程序:可在`demo/config/config_K_v.json`中编辑调用的程序及附加选项 +``` +config_K_v.json +默认 + "TTS_使用程序路径":"ffplay", + "TTS_使用程序参数":"-autoexit -nodisp" +使用mpv + "TTS_使用程序路径":"mpv", + "TTS_使用程序参数":"--no-video" +``` +release不编译tts,参考如下方法编译 ``` 编译命令 cd demo go build -v -tags `tts` -o demo.exe -i main.go ``` - +自定义响应的事件可在`demo/config/config_tts.json`中编辑 +``` +{D}:为tts内容 +key为demo/face下的文件名 +{ + "0multi": "观众:{D}", + "29183321":"{D}" +} +``` #### 弹幕窗 构建gtk需要gtk3,先行安装[gtk](https://www.gtk.org/) ``` diff --git a/Reply/tts.go b/Reply/tts.go index 5fb5926..70d2436 100644 --- a/Reply/tts.go +++ b/Reply/tts.go @@ -3,7 +3,6 @@ package reply import ( - "fmt" "net/url" "strings" p "github.com/qydysky/part" @@ -20,6 +19,13 @@ var tts_List = make(chan interface{},20) var tts_limit = p.Limit(1,5000,15000)//频率限制1次/5s,最大等待时间15s +var tts_log = c.Log.Base_add(`TTS`) + +var ( + tts_prog = "ffplay" + tts_prog_set = "-autoexit -nodisp" +) + func init(){ {//tts配置 buf := s.New() @@ -27,6 +33,18 @@ func init(){ for k,v := range buf.B { tts_setting[k] = v.(string) } + buf.Load("config/config_K_v.json") + for k,v := range buf.B { + if k == `TTS_使用程序路径` { + if tmp,ok := v.(string);ok && tmp != ``{ + tts_prog = tmp + } else{tts_log.L(`E: `,`TTS_使用程序路径不是字符串或为空`)} + }else if k == `TTS_使用程序参数` { + if tmp,ok := v.(string);ok{ + tts_prog_set = tmp + } else{tts_log.L(`E: `,`TTS_使用程序参数不是字符串`)} + } + } } go func(){ for{ @@ -50,7 +68,7 @@ func init(){ func TTS(uid,msg string) { if tts_limit.TO() {return} - fmt.Println(`TTS:`, uid, msg) + tts_log.L(`I: `,uid, msg) req := p.Req() if v,ok := tts_setting[uid];ok{ msg = strings.ReplaceAll(v, "{D}", msg) @@ -62,9 +80,12 @@ func TTS(uid,msg string) { Retry:1, SleepTime:500, });err != nil { - fmt.Println(`TTS:`, err) + tts_log.L(`E: `,err) return } - p.Exec().Run(false, "ffplay", p.Sys().Cdir()+"/tts.mp3","-autoexit","-nodisp") + var prog = []string{} + prog = append(prog, p.Sys().Cdir()+"/tts.mp3") + prog = append(prog, strings.Split(tts_prog_set," ")...) + p.Exec().Run(false, tts_prog, prog...) return } \ No newline at end of file diff --git a/demo/config/config_K_v.json b/demo/config/config_K_v.json index 5fe663f..b511475 100644 --- a/demo/config/config_K_v.json +++ b/demo/config/config_K_v.json @@ -1,8 +1,12 @@ { - "help":"额外私信对象为0时,所有额外私信都不会触发;私信为空字符串时,不触发", + "私信-help":"额外私信对象为0时,所有额外私信都不会触发;私信为空字符串时,不触发", "额外私信对象":0, "上舰私信":"", "上舰私信(额外)":"[弹幕机测试 额外]:感谢上舰", "弹幕私信":"", - "弹幕私信(额外)":"[弹幕机测试 额外]:弹幕" + "弹幕私信(额外)":"[弹幕机测试 额外]:弹幕", + + "TTS_配置-help":"将会运行[TTS_使用程序路径 获取的音频路径 TTS_使用程序参数]", + "TTS_使用程序路径":"ffplay", + "TTS_使用程序参数":"-autoexit -nodisp" } \ No newline at end of file -- 2.39.2