Golang使用微软语音SDK实现文字转语音,Docker环境开箱即用

编辑于 2022-10-13 19:42:43 阅读 1659

微软语音是什么这里就不多说了,文本转语音我之前尝试过调用 REST API,但是太慢了,一句话的文本还行,几百字的文本就需要几十秒,甚至几分钟,就很容易失败。所以这次尝试一下Go版本的 SDK,吸引我的点是它快,并且可以在服务端运行

配置开发环境

按照官方文档所说需要先配置语音SDK,而这个SDK只支持Linux,所以我选择了Go的官方Docker镜像 Golang:1.19(此镜像是基于Debian),然后配合VS Code进行容器内开发

WX202210131247392x.jpg

如上,我打开了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,大家可以直接使用

镜像的使用

这里简单介绍一下如何使用这个镜像

首先,在你的项目根目录创建一个.docker目录,然后在里面添加一个docker-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 Desktop -> Dev Environments -> Create,打开你的项目,这里假设项目目录为cobra-demo

WX202210131330162x.jpg

如上图,继续下一步你就会看到OPEN IN VSCODE的按钮

测试一下

直接使用官方的demo:文本转语音输出到扬声器

WX202210131415062x.jpg

如图,先替换一下key和region,然后执行

WX202210131422342x.png

可以看到输出成功了,但你可能听不到声音;没关系,语音输出到扬声器不是我的目的,输出到文件才是。

好了,至此这篇文章就先结束了,我要继续研究将语音合成到文件了,再见,再见👋👋

参考

https://learn.microsoft.com/zh-cn/azure/cognitive-services/speech-service/quickstarts/setup-platform

https://learn.microsoft.com/zh-cn/azure/cognitive-services/speech-service/how-to-speech-synthesis

https://github.com/microsoft/cognitive-services-speech-sdk-go/tree/master/samples

广而告之,我的新作品《语音助手》上架Google Play了,欢迎下载体验