欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

python修改wav文件声音大小_Python更改wav文件的音高

发布时间:2023/12/14 python 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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文件的音高的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。