擅长:python、mysql、java
<p>这可以通过使用pyrubberband软件包来实现,它需要橡胶带库,可以在保持音高和高质量的同时拉伸音频。我可以用brew在MacOS上安装这个库,在Ubuntu上也可以用apt安装。对于极限拉伸,请看PaulStretch</p>
<pre><code>brew install rubberband
</code></pre>
<p>这只适用于librosa包</p>
^{pr2}$
<p>为了让pyrubberband直接与pydub的AudioSegment一起工作而不需要librosa,我修改了这个函数:</p>
<pre><code>def change_audioseg_tempo(audiosegment, tempo, new_tempo):
y = np.array(audiosegment.get_array_of_samples())
if audiosegment.channels == 2:
y = y.reshape((-1, 2))
sample_rate = audiosegment.frame_rate
tempo_ratio = new_tempo / tempo
print(tempo_ratio)
y_fast = pyrb.time_stretch(y, sample_rate, tempo_ratio)
channels = 2 if (y_fast.ndim == 2 and y_fast.shape[1] == 2) else 1
y = np.int16(y_fast * 2 ** 15)
new_seg = pydub.AudioSegment(y.tobytes(), frame_rate=sample_rate, sample_width=2, channels=channels)
return new_seg
</code></pre>