我一直在玩PyAutoTune模块有一段时间了,我似乎无法使它工作。不幸的是,文档是不存在的,我唯一需要处理的就是Examples文件夹中的示例。你知道吗
我想做的是得到一个.wav文件从一个TTS引擎和自动调谐它,得到一个更像机器人的声音。但我好像没办法让它工作。 当我尝试运行FromFileAutoTune form命令行时,我只得到一个没有声音的空wav文件。你知道吗
AutoTune.Tuner(...)
的rawfromC数据几乎总是一个0的长字符串,这让我很担心。你知道吗RealTimeAutoTune
),它运行得非常好。我可以用麦克风说话,并且可以(几乎)实时获得自动调谐版本。所以我知道模块在那里工作。你知道吗由于我在AutoTune.Tuner()
函数中插入的数据在两个示例中的结构几乎相同,并且其他参数完全相同,因此我希望输出为非空,但事实并非如此。我是不是漏掉了什么明显的东西?而且,现在AutoTune.Tuner()
对我来说只是一个神奇的黑匣子,除了从提供的两个例子中可以推断出什么以外,没有说明它需要什么输入和产生什么输出。任何能为我指明正确方向的东西都将不胜感激!你知道吗
以下是我目前的代码:
#Copyright (c) 2012, Eng Eder de Souza
#AutoTune from Wav File Example!
import sys
import numpy
import scikits.audiolab as audiolab
import AutoTune
FORM_CORR=0
SCALE_ROTATE=0
LFO_QUANT=0
CONCERT_A=440.0
FIXED_PITCH=2.0
FIXED_PULL=0.1
CORR_STR=1.0
CORR_SMOOTH=0.0
PITCH_SHIFT=1.0
LFO_DEPTH=0.1
LFO_RATE=1.0
LFO_SHAPE=0.0
LFO_SYMM=0.0
FORM_WARP=0.0
MIX=1.0
KEY="c"
CHUNK=2048
NewSignal=[]
if len(sys.argv)<3 :
print('Usage: '+sys.argv[0]+' <Input audio file.wav> <Output audio file.wav>')
sys.exit(0)
IN=sys.argv[1]
OUT=sys.argv[2]
f = audiolab.Sndfile(IN, 'r')
FS = f.samplerate
nchannels = f.channels
datas = f.read_frames(CHUNK, dtype=numpy.int16).astype(numpy.float32)*(1.0/32768.0)
print(datas) #this returns the correct data structure ([0.xxxxx 0.xxxxxx ... 0.xxxx])
while datas !='':
print(".")
Signal = datas.data[:]
print(datas.dtype) #this outputs float32, as it should be
rawfromC=AutoTune.Tuner(Signal,FS,CHUNK,SCALE_ROTATE,SCALE_ROTATE,LFO_QUANT,CONCERT_A,FIXED_PITCH,FIXED_PULL,CORR_STR,CORR_SMOOTH,PITCH_SHIFT,LFO_DEPTH,LFO_RATE,LFO_SHAPE,LFO_SYMM,FORM_WARP,MIX,KEY)
for s in rawfromC:
NewSignal.append(s)
print(rawfromC) #this almost only returns an array of 0s
try:
datas = f.read_frames(CHUNK, dtype=numpy.int16).astype(numpy.float32)*(1.0/32768.0)
print("datas:"+str(datas)) #datas seems to be correctly formatted
except:
break
dataArray = numpy.array(NewSignal)
fmt = audiolab.Format('wav', 'pcm32')
# making the file .wav
afile = audiolab.Sndfile(OUT, 'w', fmt, nchannels, FS)
#writing in the file
afile.write_frames(dataArray)
print("Done!")
编辑:查看输出,实际上有一些块,其中几乎25%的条目不是0。但是,这仍然远远没有达到预期的效果。。。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐