Python语音合成(日文翻译)

Python022

Python语音合成(日文翻译),第1张

原文:

Python version

ttslearn のインストール

ttslearn の动作确认

パッケージのインポート

描画周りの设定

NumPy と Torch を用いた配列の作成

numpy.ndarray と torch.Tensor のインタフェースの违い

numpy.ndarray と torch.Tensor の相互変换

numpy.ndarray と torch.Tensor のメモリ共有

scipy.io.wavfile を利用した音声ファイルの読み込み

音声の可视化

窓関数

短时间フーリエ変换の実装

短时间フーリエ変换の结果の可视化

librosa.stft を用いた短时间フーリエ変换

librosa.stftは、STFTを実行する前にデフォルトで信号の冒头と末尾にパディング処理を行います。前述のSTFT実装はこの処理をサポートしていないため、同等のSTFTの结果を得るためには、center=Falseとしてパディング処理を行わないように设定します。

时间解像度と周波数解像度のトレードオフ

逆短时间フーリエ変换による音声の复元

メルフィルタバンク

メルスペクトログラムの计算

Griffin-Lim のアルゴリズムに基づく位相复元

瞬时周波数の可视化 (bonus)

Griffin-Limのアルゴリズムは、位相复元手法です。合成音声と自然音声の瞬时位相(位相の时间微分)を比较することで、位相复元が期待通り行われているかを视覚的に确认できます。

翻译:

Python 版本

ttslearn 的安装

ttslearn 的操作确认

导入程序包

设置绘图格式

使用NumPy和Torch创建数组

numpy.ndarray和torch.Tensor之间的接口差异

numpy.ndarray和torch.Tensor的相互转换

numpy.ndarray和torch.Tensor的内存共享

使用scipy.io.wavfile读取音频文件

语音可视化

窗函数

短时傅立叶变换的实现

短时傅立叶变换结果的可视化

使用librosa.stft的短时傅立叶变换

缺省情况下,librosa.stft在执行STFT(短时傅里叶变换)之前会对信号的开头和结尾进行填充。 由于上面提到的STFT实现不支持此操作,因此要获得等效的STFT结果,请将填充操作设置为center=False。

在时间分辨率和频率分辨率间权衡取舍

通过逆短时傅立叶变换进行语音的复原

邮件过滤器组

计算质谱图

基于Griffin-Lim算法的相位复原

瞬时频率可视化(bonus)

Griffin-Lim的算法是一种相位恢复方法。 通过比较合成语音和自然语音的瞬时相位(相位的时间微分),我们可以直观地看到相位恢复是否按预期进行。

答案:python里边的那个say是pyttsx3库里面。

import pyttsx3#导入pyttsx3库

engine = pyttsx3.init() #创建engine并初始化

engine.say('Hello') #开始朗读

engine.runAndWait() #等待语音播报完毕

习题4:变量(variable)和命名

你已经学会了print和算术运算。下一步你要学的是“变量”。在编程中,变量只不过是用来指代某个东西的名字。程序员通过使用变量名可以让他们的程序读起来更像英语。而且因为程序员的记性都不怎么地,变量名可以让他们更容易记住程序的内容。如果他们没有在写程序时使用好的变量名,在下一次读到原来写的代码时他们会大为头疼的。

如果你被这章习题难住了的话,记得我们之前教过的找到不同点、注意细节。

1.在每一行的上面写一行注解,给自己解释一下这一行的作用。

2.倒着读你的.py文件。

3.朗读你的.py文件,将每个字符也朗读出来。

cars=100

space_in_a_car = 4.0

drivers=30

passengers = 90

5cars_not_driven = cars - drivers

cars_driven = drivers

carpool_capacity = cars_driven * space_in_a_car

average_passengers_per_car = passengers / cars_driven

11print "There are", cars, "cars available."

12print "There are only", drivers,

,"drivers available."

13print

"There will be", cars_not_driven, "empty cars today."

14 print "We can transport", carpool_capacity, "people today."

15print "We have", passengers, "to carpool today."

16print "We need to put about"

,average_passengers_per_car, "in each car."

Note: space_in_a_car中的_是下划线(underscore)字符。你要自己学会怎样打出这个字符来。

这个符号在变量里通常被用作假想的空格,用来隔开单词。你应该看到的结果

$ python ex4.py

There are 100 cars available.

There are only 30 drivers available.

There will be 7O empty cars today-

We can transport 120.o people today.

We have 90 to carpool today.

We need to put about 3 in each car.

加分习题

当我刚开始写这个程序时我犯了个错误,python告诉我这样的错误信息:

Traceback (most recent call last):

File "ex4.py", line 8, in

average_passengers_per_car = car_pool_capacity / passenger

NameError: name 'car_pool_capacity' is not defined

用你自己的话解释一下这个错误信息,解释时记得使用行号,而且要说明原因。

更多的加分习题:

1.我在程序里用了4.0作为space_in_a_car的值,这样做有必要吗?如果只用4会有什么问题?

2.记住4.0是一个“浮点数”,自己研究一下这是什么意思。

3.在每一个变量赋值的上一行加上一行注解。

4.记住=的名字是等于(equal),它的作用是为东西取名。

5.记住_是下划线字符(underscore)。

6.将python作为计算器运行起来,就跟以前一样,不过这一次在计算过程中使用变量名来做计算,常见的变量名有i,x,j等等。

习题5:更多的变量和打印

我们现在要键入更多的变量并且把它们打印出来。这次我们将使用一个叫“格式化字符串(formatstring)”的东西、每一次你使用“把一些文本引用起来,你就建立了一个字符串。字符串是程序将信息展示给人的方式。你可以打印它们,可以将它们写入文件,还可以将它们发送给网站服务器,很多事情都是通过字符串交流实现的。

字符串是非常好用的东西,所以再这个练习中你将学会如何创建包含变量内容的字符串。使用专门的格式和语法把变量的内容放到字符串里,相当于来告诉python:“嘿,这是一个格式化字符串,把这些变量放到那几个位置。’一样的,即使你读不懂这些内容,只要一字不差地键入就可以了。

my_name =

'ZedA. Shaw'

my_age= 35 # nota lie

3my_height= 74 # inches

4my_weight=180#lbs

5my_eyes = 'Blue

6 my_teeth = "White'

7my_hair = 'Brown

print "Let's talk about %s." % my_name

1o print "He's %d inches tall." %my_height

11 print "He's %d pounds heavy." % my_weight

12print "Actually that's not too heavy.

13print "He's got %s eyes and %s hair." % (my_eyes, my_hair)

14print "His teeth are usually %s depending on the coffee." % my_teeth

15

16# this line is tricky, try to get it ecactlyright

17print "If I add %d, %d, and %d I get %a."%(

18

my_age, my_height, my_weight, my_age

+ my_height + my_weight)

Warning:

如果你使用了非ASCII字符而且碰到了编码错误,记得在最顶端加一行#--

coding:

utf-8-

你应该看到的结果

$python ex5.py

Let's talk about Zed A. Shaw

He's 74inches tall.

He's180 pounds heavy

Actually that's not too heavy.

He's got Blue eyes and Brown hair.

His teeth are usually White depending on the coffee

If I add 35,74,and 180 I get 289.

加分习题

1.修改所有的变量名字,把它们前面的“my“去掉。确认将每一个地方的都改掉,不只是你使用“=“赋值过的地方。

2.试着使用更多的格式化字符。例如%r就是是非常有用的一个,它的含义是“不管什么都打印出来”。

3.在网上搜索所有的Pvthon格式化字符。

4.试着使用变量将英寸和磅转换成厘米和千克。不要直接键入答案。使用Pvthon的计算功能来完成。习题6:字符串(string)和文本虽然你已经在程序中写过字符串了,你还没学过它们的用处。在这章习题中我们将使用复杂的字符串来建立一系列的变量,从中你将学到它们的用途。首先我们解释一下字符串是什么东西。

字符串通常是指你想要展示给别人的、或者是你想要从程序里“导出”的一小段字符。Python可以通过文本里的双引号"或者单引号,识别出字符串来。这在你以前的print练习中你已经见过很多次了。如果你把单引号或者双引号括起来的文本放到print后面,它们就会被python打印出来。

字符串可以包含格式化字符%s,这个你之前也见过的。你只要将格式化的变量放到字符串中,再紧跟着一个百分号%(percent),再紧跟着变量名即可。唯一要注意的地方,是如果你想要在字符串中通过格式化字符放入多个变量的时候,你需要将变量放到()圆括号(parenthesis)中,而且变量之间用,逗号(comma)隔开。就像你逛商店说“我要买牛奶、面包、鸡蛋、八宝粥”一样,只不过程序员说的是”(milkeggs, bread, soup)”。

我们将键入大量的字符串、变量、和格式化字符,并且将它们打印出来。我们还将练习使用简写的变量名。程序员喜欢使用恼人的难度的简写来节约打字时间,所以我们现在就提早学会这个,这样你就能读懂并且写出这些东西了。

x="There are %d types of people."%10

binary = "binary"

do_not = "don't"

y= "Those who know %s and those who %s." % (binary, do_not)

print x

print y

print "I said: %r."%x

print "I also said: '%s'."%y

hilarious = False

joke_evaluation = "Isn't that joke so funny?!%r"

print joke_evaluation % hilarious

w="This is the left side of..."

e= "a string with a right side."

print w+e

你应该看到的结果

$ python ex6.py

There are 10 types of people.

Those who know binary and those who don't.

I said: 'There are 1o types of people.'

I also said: 'Those who know binary and those who don't.'

Isn't that joke so funny?! False

This is the left side of...a string with a right side

加分习题

1.通读程序,在每一行的上面写一行注解,给自己解释一下这一行的作用。

2.找到所有的”字符串包含字符串”的位置,总共有四个位置。

3.你确定只有四个位置吗?你怎么知道的?没准我在骗你呢。

4.解释一下为什么w和e用+连起来就可以生成一个更长的字符串。