python修改wav文件声音大小_Python更改wav文件的音高
由于wav文件基本上是原始音频数据,因此如果没有“原始音频处理”,您将无法更改音高.
这是你能做的.
您将需要wave(标准库)和numpy模块.
import wave
import numpy as np
打开文件.
wr = wave.open('input.wav', 'r')
# Set the parameters for the output file.
par = list(wr.getparams())
par[3] = 0 # The number of samples will be set by writeframes.
par = tuple(par)
ww = wave.open('pitch1.wav', 'w')
ww.setparams(par)
声音应该在很短的时间内处理.这减少了混响.尝试将fr设置为1;你会听到恼人的回声.
fr = 20
sz = wr.getframerate()//fr # Read and process 1/fr second at a time.
# A larger number for fr means less reverb.
c = int(wr.getnframes()/sz) # count of the whole file
shift = 100//fr # shifting 100 Hz
for num in range(c):
读取数据,将其分为左右声道(假设为立体声WAV文件).
da = np.fromstring(wr.readframes(sz), dtype=np.int16)
left, right = da[0::2], da[1::2] # left and right channel
使用内置于numpy中的快速傅里叶变换提取频率.
lf, rf = np.fft.rfft(left), np.fft.rfft(right)
滚动阵列以增加音高.
lf, rf = np.roll(lf, shift), np.roll(rf, shift)
最高频率翻到最低频率.那不是我们想要的,所以把它们归零.
lf[0:shift], rf[0:shift] = 0, 0
现在使用逆傅立叶变换将信号转换回幅度.
nl, nr = np.fft.irfft(lf), np.fft.irfft(rf)
结合两个渠道.
ns = np.column_stack((nl, nr)).ravel().astype(np.int16)
写输出数据.
ww.writeframes(ns.tostring())
处理完所有帧后关闭文件.
wr.close()
ww.close()
总结
以上是生活随笔为你收集整理的python修改wav文件声音大小_Python更改wav文件的音高的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: root + vm vh 实现响应式字体
- 下一篇: python做计量经济学的书籍_《计量经