This old thread似乎表明pydub的AudioSegment._data
可以用来以某种方式计算声音的音高;不幸的是,它似乎是使用分配给未公开的Mpm
类的方法完成的。也就是说,如果可以从AudioSegment._data
中提取音高数据,那么有没有办法使用pydub来向上或向下移动AudioSegment
的音高?如果没有,是否有另一个Python 2.7库可以吗?
答案 0 :(得分:0)
是。今天花了大约6个小时处理这个问题,我得到了它的工作。试试这个。注意我最初在最后遇到了一个爆音的问题,但这是由于我特定文件的特殊性而没有任何其他原因。
import os
from pydub import AudioSegment
from pydub.playback import play
cwd = os.getcwd()
wavepath = cwd+"\\Soundfiles\\CritHit.WAV"
sound = AudioSegment.from_file(wavepath, format="wav")
play(sound)
print(sound.frame_rate)
# shift the pitch down by half an octave (speed will decrease proportionally)
octaves = -0.5
new_sample_rate = int(sound.frame_rate * (2.0 ** octaves))
lowpitch_sound = sound._spawn(sound.raw_data, overrides={'frame_rate': new_sample_rate})
#Play pitch changed sound
play(lowpitch_sound)