[英]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.