吐槽
提起语音克隆技术业内人人士估计都知道Real Time Voice Cloning,谷歌工程师的论文SV2TTS,由比利时列日大学的研究人员复现了该框架并开源了他们的实现。本来挺感兴趣的,试想如果能把亲人的语音克隆带在身边是多么美妙的事情,其实我也很想克隆我儿子的声音,毕竟他长得太快了,不过兴趣是兴趣,现实是现实,研究了几天由于内功不够深厚差点走火入魔,py学习时间仅有个把月的我还是暂时封印它吧。
但是SV2TTS太美妙了,比如TTS语料库惊人,类似清华公开的库动不动就十几个G,而SV2TTS只需要简单的几句话就可以克隆出不错的效果。标贝提供了这样的服务,所以体验了一下,感觉还不错,除了合成出来的语音有点机械化,但是出来的结果还是可圈可点的。
代码
import requests,json
import struct
import pyaudio
clientId="申请的ID"
secret="申请的"
def getToken():
# 24小时过期默认
url = "https://openapi.data-baker.com/oauth/2.0/token?grant_type=client_credentials&client_secret=" + secret + "&client_id=" + clientId
answer = requests.get(url)
data = json.loads(answer.text)
return data['access_token']
"""
test:文字
voice_name:模型id
audiotype=3 :返回16K采样率的mp3格式
audiotype=4 :返回16K采样率的pcm格式
audiotype=5 :返回8K采样率的pcm格式
audiotype=6 :返回16K采样率的wav格式
audiotype=6&rate=1 :返回8K的wav格式
audiotype=7 :返回8k8bit的alaw格式文件
audiotype=8 :返回8k8bit的ulaw格式文件
audiotype=9 返回8K采样率的mp3
忽略file_name直接播放
"""
def zhtts(text,voice_name,file_name="",audiotype="6"):
token=getToken()
# domain为固定值1
url="https://openapi.data-baker.com/tts_hot_load?" \
"access_token="+token+"&domain=1&text="+text+"&voice_name="+voice_name+"&language=zh"+"&audiotype="+audiotype
answer = requests.get(url)
res=answer.content
if(len(file_name)==0):
p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(2),
channels=1,
rate=16000,
output=True)
stream.write(res)
stream.stop_stream() # 暂停
stream.close() # 关闭
p.terminate()
else:
with open(file_name, "wb") as f:
for x in res:
s = struct.pack('B', x) # 转换为字节流字符串,B代表unsigned char
f.write(s)
zhtts("君不见,黄河之水天上来,奔流到海不复回。君不见,高堂明镜悲白发,朝如青丝暮成雪。","你申请的模板ID")
使用流程也很简单,申请个ID和SECRET->在APP上录制语音大概12段->上传等待训练结果->拿到模型ID->调用上面的代码
加油,希望我明年能有实力拿下它