[英]Python Audio Frame Pitch Change
我正在尝试使用 pyaudio 制作语音掩蔽器。 以我现在的设置方式,我唯一要做的就是输入声音,即时更改音高,然后将其分块。 第一部分和最后一部分正在工作,我想我已经接近改变音高了……强调“思考”。
不幸的是,我不太熟悉我正在使用的数据类型以及如何以我想要的方式操作它。 我已经浏览了 audioop 文档,但没有找到我需要的东西(认为有些东西我肯定可以在那里使用)。 我想我要问的是...
这些音频帧中的数据是如何格式化的。
我怎样才能改变框架的间距(如果可以的话),或者它是否接近那样工作?
import pyaudio
import sys
import numpy as np
import wave
import audioop
import struct
chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 41000
RECORD_SECONDS = 5
p = pyaudio.PyAudio()
stream = p.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
output = True,
frames_per_buffer = chunk)
swidth = 2
print "* recording"
while(True):
data = stream.read(chunk)
data = np.array(wave.struct.unpack("%dh"%(len(data)/swidth), data))*2
data = np.fft.rfft(data)
#MANipulation
data = np.fft.irfft(data)
stream.write(data3, chunk)
print "* done"
stream.stop_stream()
stream.close()
p.terminate()
在irfft
行之后和stream.write
行之前,您需要使用struct.pack
调用将数据转换回 16 位整数。
data = np.fft.irfft(data)
dataout = np.array(data*0.5, dtype='int16') #undo the *2 that was done at reading
chunkout = struct.pack("%dh"%(len(dataout)), *list(dataout)) #convert back to 16-bit data
stream.write(chunkout)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.