-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
102 lines (69 loc) · 2.02 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import librosa
import utils
def pitch(n, y, sr):
return librosa.effects.pitch_shift(y, sr, n_steps=n)
def speed(n, y, sr):
return librosa.effects.time_stretch(y, n)
def sample(n, y, sr):
return librosa.resample(y, sr, int(sr // n))
def reback(n, y, sr):
frequencies, D = librosa.ifgram(y, sr=sr)
D = utils.pool(D, size=(1, n))
D = utils.repeat(D, n)
return librosa.istft(D)
def iron(n, y, sr):
frequencies, D = librosa.ifgram(y, sr=sr)
D = utils.drop(D, n)
return librosa.istft(D)
def quality(n, y, sr):
frequencies, D = librosa.ifgram(y, sr=sr)
D = utils.roll(D, n)
return librosa.istft(D)
def shrink(n, y, sr):
frequencies, D = librosa.ifgram(y, sr=sr)
D = utils.pool(D, n, True)
return librosa.istft(D)
def shrinkstep(n, y, sr):
frequencies, D = librosa.ifgram(y, sr=sr)
D = utils.pool_step(D, n)
return librosa.istft(D)
def spread(n, y, sr):
frequencies, D = librosa.ifgram(y, sr=sr)
D = utils.spread(D, n)
return librosa.istft(D)
def vague(n, y, sr):
frequencies, D = librosa.ifgram(y, sr=sr)
D = utils.pool(D, (1, n))
D = utils.spread(D, (1, n))
return librosa.istft(D)
if __name__ == '__main__':
outputpath = "./data/A2_1_se.wav"
inputpath = "./data/A2_1.wav"
y, sr = librosa.load(inputpath,sr=None)
print (y,sr)
# 通过 librosa.ifgram方法获取stft短时傅立叶变换的矩阵,D为stft变换的矩阵.
frequencies, D = librosa.ifgram(y, sr=sr)
print (frequencies.shape)
print (D.shape)
# 模糊
# y = vague(6, y, sr)
# 音调或童声
# y = pitch(6, y, sr)
# 语速
# y = speed(6, y, sr)
# 重采样
# y = sample(6, y, sr)
# 回音
# y = reback(5, y, sr)
# 失真
# y = iron(6, y, sr)
# 位移
# y = quality(6, y, sr)
# y = quality(80, y, sr)
# 池化
# y = shrink(3, y, sr)
# 步长池化
# y = shrinkstep(10, y, sr)
# 传播或语速
# y = spread(3, y, sr)
librosa.output.write_wav(outputpath, y, sr)