Python音频帧音高变化

发布于 2021-01-29 17:14:12

我正在尝试使用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()
关注者
0
被浏览
52
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    要更改音高,您必须对多个帧执行FFT,然后将数据移频(将数据移至不同的频率仓)并执行逆FFT。

    如果您不介意降低音高时声音片段变长(或增加音高时声音片段变长),则可以对帧进行重新采样。例如,您可以将每个帧加倍(在流中插入每个帧的副本),从而降低播放速度和音调。然后,您可以通过改进重采样算法以使用某种插值和/或滤波来提高音频质量。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看