Skip to content
This repository was archived by the owner on Jan 17, 2024. It is now read-only.

Commit ccac4dc

Browse files
authored
Merge pull request #49 from eric2788/voice-silk
change back alpine linux and use silk instead of amr
2 parents b0313da + 44211d5 commit ccac4dc

File tree

13 files changed

+146
-27
lines changed

13 files changed

+146
-27
lines changed

.github/workflows/push-docker.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ on:
99
tags:
1010
- '*'
1111
branches:
12-
- master
12+
- '*'
1313

1414
jobs:
1515
test_program:
@@ -67,7 +67,7 @@ jobs:
6767
docker.io/${{ secrets.DOCKER_USERNAME }}/${{ env.artifact_name }}
6868
tags: |
6969
type=edge
70-
type=sha,event=branch,branch=master
70+
type=sha,event=branch
7171
type=ref,event=tag
7272
- name: Build and push
7373
id: docker_build

.github/workflows/verify.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ env:
77
on:
88
pull_request:
99
branches:
10-
- master
10+
- '*'
1111

1212
jobs:
1313
test_program:

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,7 @@
55
**/logs/**
66
session.token
77
**/imgtxt/*.png
8-
**/file/*.yaml
8+
**/file/*.yaml
9+
**/*.exe
10+
**/cache/**
11+
**/codec/**

Dockerfile

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
1-
FROM golang:1.17 AS builder
1+
FROM golang:1.17-alpine AS builder
22

33
WORKDIR /app
44

55
COPY . .
66

77
# install timzone data
8-
# RUN apk add --no-cache tzdata
8+
RUN apk add --no-cache tzdata
99

1010
RUN go mod tidy -compat="1.17"
1111
RUN go mod download
1212
RUN go build -v -o /go/bin/valbot
1313

14-
FROM linuxserver/ffmpeg
14+
FROM alpine:latest
15+
16+
RUN apk add --no-cache ffmpeg
1517

16-
RUN ffmpeg -version
1718
# copy timezone info from builder
1819
COPY --from=builder /usr/share/zoneinfo /usr/share/zoneinfo
1920
COPY --from=builder /go/bin/valbot /valbot

aivoice/aivoice.go

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,76 @@ import (
44
"crypto/md5"
55
"encoding/hex"
66
"fmt"
7-
ffmpeg_go "github.com/u2takey/ffmpeg-go"
8-
"log"
97
"os"
8+
"os/exec"
9+
10+
"github.com/Logiase/MiraiGo-Template/utils"
11+
"github.com/eric2788/go-silk/multiplat"
12+
ffmpeg_go "github.com/u2takey/ffmpeg-go"
13+
silk "github.com/wdvxdr1123/go-silk"
1014
)
1115

16+
var logger = utils.GetModuleLogger("valbot.aivoice")
17+
1218
const (
1319
AudioSamplingRateMP3 = "22050"
1420
AudioBitRate = "12.2k" // in Hz
1521
NumberOfAudioChannels = "1"
1622
AudioSamplingRateAMR = "8000"
1723
)
1824

25+
func WavToSilk(b []byte) (data []byte, err error) {
26+
md := md5.Sum(b)
27+
tempName := hex.EncodeToString(md[:])
28+
29+
wav, pcm := tempName+".wav", tempName+".pcm"
30+
logger.Infof("writing file: %s", wav)
31+
err = os.WriteFile(wav, b, os.ModePerm)
32+
if err != nil {
33+
return nil, err
34+
}
35+
defer os.Remove(wav)
36+
37+
// 2.转换pcm
38+
logger.Infof("converting to pcm...")
39+
cmd := exec.Command("ffmpeg", "-i", wav, "-f", "s16le", "-ar", "24000", "-ac", "1", pcm)
40+
logger.Infof("converted to pcm: %s", pcm)
41+
multiplat.HideWindow(cmd)
42+
if err = cmd.Run(); err != nil {
43+
return nil, err
44+
}
45+
defer os.Remove(pcm)
46+
pcmByte, err := os.ReadFile(pcm)
47+
if err != nil {
48+
return nil, err
49+
}
50+
logger.Infof("converting to silk...")
51+
defer func () {
52+
if err == nil {
53+
logger.Infof("converted to silk: %s", tempName+".silk")
54+
}
55+
}()
56+
data, err = silk.EncodePcmBuffToSilk(pcmByte, 24000, 24000, true)
57+
return
58+
}
59+
60+
// WavToAmr Wav To Amr file
61+
// Deprecated: use WavToSilk instead
1962
func WavToAmr(b []byte) (data []byte, err error) {
2063
hash := md5.Sum(b)
2164
name := hex.EncodeToString(hash[:])
2265
f, err := os.Create("./" + name + ".wav")
2366
if err != nil {
2467
return nil, err
2568
}
26-
log.Println("writing file: ", f.Name())
69+
logger.Info("writing file: ", f.Name())
2770
_, err = f.Write(b)
2871
f.Close()
2972
defer removeFile(f.Name())
3073
if err != nil {
3174
return nil, err
3275
}
33-
log.Println("converting to amr: ", f.Name())
76+
logger.Info("converting to amr: ", f.Name())
3477
// Convert to AMR
3578
comm := ffmpeg_go.Input(name+".wav").Output(name+".amr", ffmpeg_go.KwArgs{"ar": AudioSamplingRateAMR, "ab": AudioBitRate})
3679
//comm := exec.Command("ffmpeg", "-i", "./"+name+".wav", "-ab", AudioBitRate, "-ar", AudioSamplingRateAMR, name+".amr")
@@ -39,7 +82,7 @@ func WavToAmr(b []byte) (data []byte, err error) {
3982
}
4083
defer removeFile(name + ".amr")
4184
data, err = os.ReadFile(name + ".amr")
42-
log.Println("successfully converted to amr")
85+
logger.Info("successfully converted to amr")
4386
return
4487
}
4588

aivoice/aivoice_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ func TestGetGenshinVoice(t *testing.T) {
1010
b, err := GetGenshinVoice("別狗叫", "派蒙")
1111
if err != nil {
1212
if strings.HasPrefix(err.Error(), "http_error") {
13+
t.Logf("got error: %v, skip test", err)
1314
return
1415
}
1516
t.Fatal(err)
@@ -21,7 +22,7 @@ func TestGetGenshinVoice(t *testing.T) {
2122
if err != nil {
2223
t.Fatal(err)
2324
}
24-
err = os.WriteFile("data/別狗叫.amr", b, os.ModePerm)
25+
err = os.WriteFile("data/別狗叫.silk", b, os.ModePerm)
2526
if err != nil {
2627
t.Fatal(err)
2728
}

aivoice/genshin_voice.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,6 @@ func GetGenshinVoice(msg, actor string) ([]byte, error) {
9898
if err != nil {
9999
return nil, err
100100
}
101-
return WavToAmr(b)
101+
return WavToSilk(b)
102102
}
103103
}

cmd/test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package cmd
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/Mrs4s/MiraiGo/message"
7+
"github.com/eric2788/MiraiValBot/modules/command"
8+
"github.com/eric2788/MiraiValBot/qq"
9+
"github.com/eric2788/common-utils/request"
10+
)
11+
12+
13+
func testSendMp3Voice(args []string, source *command.MessageSource) error {
14+
data, err := request.GetBytesByUrl("https://genshin.azurewebsites.net/api/speak?format=mp3&text=测试测试&id=0")
15+
if err != nil {
16+
return err
17+
}
18+
voice := &message.VoiceElement{Data: data}
19+
return qq.SendGroupMessage(message.NewSendingMessage().Append(voice))
20+
}
21+
22+
func testSendWavVoice(args []string, source *command.MessageSource) error {
23+
data, err := request.GetBytesByUrl("https://genshin.azurewebsites.net/api/speak?format=wav&text=测试测试&id=0")
24+
if err != nil {
25+
return err
26+
}
27+
voice := &message.VoiceElement{Data: data}
28+
return qq.SendGroupMessage(message.NewSendingMessage().Append(voice))
29+
}
30+
31+
var testCommands = []command.CmdHandler{
32+
testSendMp3Voice,
33+
testSendWavVoice,
34+
}
35+
36+
37+
func init(){
38+
nodes := make([]command.Node, len(testCommands))
39+
for i, handler := range testCommands {
40+
name := fmt.Sprintf("%d", i)
41+
nodes = append(nodes, command.NewNode([]string{name}, name, true, handler))
42+
}
43+
var testCommand = command.NewParent([]string{"test", "测试"}, "测试指令", nodes...)
44+
testCommand.AdminOnly = true
45+
command.AddCommand(testCommand)
46+
}

cmd/voice.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,6 @@ func voiceQQ(args []string, source *command.MessageSource) error {
2929
logger.Errorf("tts 转换失败: %v", err)
3030
return err
3131
}
32-
33-
logger.Infof("嘗試發送voiceElement: %v", content)
34-
3532
return qq.SendGroupMessage(message.NewSendingMessage().Append(voiceElement))
3633
}
3734

@@ -45,13 +42,10 @@ func voiceGenshin(args []string, source *command.MessageSource) error {
4542
if err != nil {
4643
return err
4744
}
48-
4945
voice, err := qq.NewVoiceByBytes(data)
5046
if err != nil {
5147
return err
5248
}
53-
54-
//voice := &message.GroupVoiceElement{Data: data}
5549
return qq.SendGroupMessage(message.NewSendingMessage().Append(voice))
5650
}
5751

go.mod

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@ require (
88
github.com/bwmarrin/discordgo v0.23.2
99
github.com/corpix/uarand v0.2.0
1010
github.com/eric2788/common-utils v0.0.0-20220920151602-fe46ee86cd5a
11+
github.com/eric2788/go-silk v0.0.0-20221103160020-81195948ffe2
1112
github.com/go-redis/redis/v8 v8.11.4
1213
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0
1314
github.com/google/uuid v1.3.0
1415
github.com/hqbobo/text2pic v0.0.0-20180823042751-2479e146d720
1516
github.com/sirupsen/logrus v1.8.1
1617
github.com/stretchr/testify v1.7.1
1718
github.com/u2takey/ffmpeg-go v0.4.1
19+
github.com/wdvxdr1123/go-silk v0.0.0-20220304095002-f67345df09ea
1820
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
1921
)
2022

@@ -35,13 +37,14 @@ require (
3537
github.com/magiconair/properties v1.8.5 // indirect
3638
github.com/maruel/rs v1.0.0 // indirect
3739
github.com/mattn/go-colorable v0.1.12 // indirect
38-
github.com/mattn/go-isatty v0.0.14 // indirect
40+
github.com/mattn/go-isatty v0.0.16 // indirect
3941
github.com/mitchellh/mapstructure v1.4.3 // indirect
4042
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 // indirect
4143
github.com/pelletier/go-toml v1.9.4 // indirect
4244
github.com/pierrec/lz4/v4 v4.1.12 // indirect
4345
github.com/pkg/errors v0.9.1 // indirect
4446
github.com/pmezard/go-difflib v1.0.0 // indirect
47+
github.com/remyoudompheng/bigfft v0.0.0-20220927061507-ef77025ab5aa // indirect
4548
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5 // indirect
4649
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e // indirect
4750
github.com/spf13/afero v1.8.0 // indirect
@@ -64,4 +67,7 @@ require (
6467
golang.org/x/text v0.4.0 // indirect
6568
gopkg.in/ini.v1 v1.66.2 // indirect
6669
gopkg.in/yaml.v2 v2.4.0 // indirect
70+
modernc.org/libc v1.21.4 // indirect
71+
modernc.org/mathutil v1.5.0 // indirect
72+
modernc.org/memory v1.4.0 // indirect
6773
)

0 commit comments

Comments
 (0)