微软语音是什么这里就不多说了,文本转语音我之前尝试过调用 REST API,但是太慢了,一句话的文本还行,几百字的文本就需要几十秒,甚至几分钟,就很容易失败。所以这次尝试一下Go版本的 SDK,吸引我的点是它快,并且可以在服务端运行
配置开发环境
按照官方文档所说需要先配置语音SDK,而这个SDK只支持Linux,所以我选择了Go的官方Docker镜像 Golang:1.19(此镜像是基于Debian),然后配合VS Code进行容器内开发
如上,我打开了VS Code,按照官方文档的步骤
apt-get update
apt-get install build-essential libssl-dev libasound2 wget
export SPEECHSDK_ROOT="$HOME/speechsdk"
mkdir -p "$SPEECHSDK_ROOT"
wget -O SpeechSDK-Linux.tar.gz https://aka.ms/csspeech/linuxbinary
tar --strip 1 -xzf SpeechSDK-Linux.tar.gz -C "$SPEECHSDK_ROOT"
ls -l "$SPEECHSDK_ROOT"
export CGO_CFLAGS="-I$SPEECHSDK_ROOT/include/c_api"
export CGO_LDFLAGS="-L$SPEECHSDK_ROOT/lib/x64 -lMicrosoft.CognitiveServices.Speech.core"
export LD_LIBRARY_PATH="$SPEECHSDK_ROOT/lib/x64:$LD_LIBRARY_PATH"
如上,导入了几个环境变量,而且是用export,export命令的效果仅限于当前登录终端,也就是说你关闭VS Code,再重新打开就失效了,需要重新导入。这不是我想要的,所以就需要重新构建镜像,直接看Dockerfile
FROM golang:1.19
RUN go env -w GO111MODULE=on
RUN go env -w GOPROXY=https://goproxy.cn,direct
#speechsdk start
ENV SPEECHSDK_ROOT="$HOME/speechsdk"
RUN apt-get update && apt-get install -y build-essential libssl-dev libasound2 wget \
&& mkdir -p "$SPEECHSDK_ROOT" \
&& wget -O SpeechSDK-Linux.tar.gz https://aka.ms/csspeech/linuxbinary \
&& tar --strip 1 -xzf SpeechSDK-Linux.tar.gz -C "$SPEECHSDK_ROOT" \
&& ls -l "$SPEECHSDK_ROOT" \
&& rm SpeechSDK-Linux.tar.gz
ENV CGO_CFLAGS="-I$SPEECHSDK_ROOT/include/c_api"
ENV CGO_LDFLAGS="-L$SPEECHSDK_ROOT/lib/x64 -lMicrosoft.CognitiveServices.Speech.core"
ENV LD_LIBRARY_PATH="$SPEECHSDK_ROOT/lib/x64:$LD_LIBRARY_PATH"
#speechsdk end
然后,构建
docker build -t chudaozhe/golang:1.19-speechsdk .
此镜像已推到Docker Hub,大家可以直接使用
镜像的使用
这里简单介绍一下如何使用这个镜像
.dockerdocker-compose.yaml
cuiwei@weideMacBook-Pro cobra-demo % cat .docker/docker-compose.yaml
version: '3'
networks:
go-network:
services:
docker-go:
image: chudaozhe/golang:1.19-speechsdk
tty: true
# command: /bin/bash -c "go env -w GO111MODULE=on && go env -w GOPROXY=https://goproxy.cn,direct && bash"
ports:
- 8000:8000
networks:
- go-network
Docker DesktopDev EnvironmentsCreatecobra-demo
OPEN IN VSCODE
测试一下
直接使用官方的demo:文本转语音输出到扬声器
如图,先替换一下key和region,然后执行
可以看到输出成功了,但你可能听不到声音;没关系,语音输出到扬声器不是我的目的,输出到文件才是。
将语音合成到文件