首先,您需要将音频信号解码为原始音频并将信号拆分为 X 帧,然后您可以操作音频,并且在每一帧您都可以更改音量或更改音高或更改速度等!
要更改音量,您只需将原始音频矢量乘以一个因子(这可以是您的电位计数据信号)。
如果您的向量是短整数或浮点格式,这个因素可能会有所不同!
从 python 中的 wav 文件获取原始音频数据的一种方法是使用wave
lib
import wave
spf = wave.open('wavfile.wav','r')
#Extract Raw Audio from Wav File
signal = spf.readframes(-1)
decoded = numpy.fromstring(signal, 'Float32');
现在您可以将解码的向量乘以一个因子,例如,如果您想增加 10dB,10^(DbValue/20)
则需要在 python 中计算10**(10/20) = 3.1623
newsignal = decoded * 3.1623;
现在您需要再次对矢量进行编码以播放新的帧音频,您可以使用“ from struct import pack
”pyaudio
来完成它!
stream = pyaud.open(
format = pyaudio.paFloat32,
channels = 1,
rate = 44100,
output = True,
input = True)
EncodeAgain = pack("%df"%(len(newsignal)), *list(newsignal))
最后播放你的帧音频,注意你会在每一帧都做,并且循环播放,这个过程太快了,延迟可以不知不觉!
stream.write(EncodeAgain)
PS:这个例子是浮点格式的!