Python 生成mel脚本

Python 生成mel脚本,python,Python,根据我昨天提出的问题,我已经编写了代码。部分代码如下所示 def lower_lip_under_upper_teeth_bezier(x_n, p0, p3) : """ Calculating sampling points using rational bezier curve equation""" lower_lip_under_upper_teeth_p_u_list = [] u = x_n p1 = p0 p2 = p3 lowe

根据我昨天提出的问题,我已经编写了代码。部分代码如下所示

def lower_lip_under_upper_teeth_bezier(x_n, p0, p3) :
    """ Calculating sampling points using rational bezier curve equation"""
    lower_lip_under_upper_teeth_p_u_list = []
    u = x_n
    p1 = p0
    p2 = p3

    lower_lip_under_upper_teeth_p_u = math.pow(1 - u, 3) * p0 + 3 * u * math.pow(1 - u, 2) * p1 \
                                 + 3 * (1 - u) * math.pow(u, 2) * p2 + math.pow(u, 3) * p3
    lower_lip_under_upper_teeth_p_u = lower_lip_under_upper_teeth_p_u * w
    d = math.pow(1 - u, 3) * w + 3 * u * w * math.pow(1 - u, 2) + 3 * (1 - u) * w * math.pow(u, 2) + math.pow(u, 3) * w
    lower_lip_under_upper_teeth_p_u = lower_lip_under_upper_teeth_p_u / d

    print "p(u): ", lower_lip_under_upper_teeth_p_u
    lower_lip_under_upper_teeth_p_u_list.append(lower_lip_under_upper_teeth_p_u)

    return lower_lip_under_upper_teeth_p_u_list

def mel_script() :
  """ Generating the mel script with the animation information """
    print "\n The mel script generated for the input speech with the chosen energy level" 
    with open("mel.txt", "w") as melFile :
        melFile.write('setKeyframe "BS_stickyLips_SL_recept.head_geo_stickyLips_wire";'
                      'setKeyframe "BS_stickyLips_baseSL_recept.head_geo";'
                      'setKeyframe "BS_stickyLips_wireSL_recept.head_geo";'
                      'setKeyframe "blend_shape.lip_round";'
                      'setKeyframe "blend_shape.jaw_open";'
                      'setKeyframe "blend_shape.lips_spread";'
                      'setKeyframe "blend_shape.lips_part";'
                      'setKeyframe "blend_shape.lower_lip_under_upper_teeth";')

    for p in lower_lip_under_upper_teeth_bezier :
        melFile.write('setAttr "blend_shape.jaw_open" %f ;' % p )
        melFile.write('setKeyframe -breakdown 0 -hierarchy none -controlPoints 0 -shape 0 {"blend_shape"};')
但我得到了一个错误

    for p in lower_lip_under_upper_teeth_bezier :
TypeError: 'function' object is not iterable

您没有调用该函数。要称呼它,请使用

lower_lip_under_upper_teeth_bezier(x_n, p0, p3)

并用适当的值替换参数。

您没有调用该函数。要称呼它,请使用

lower_lip_under_upper_teeth_bezier(x_n, p0, p3)
并用适当的值替换参数。

贝塞尔是一个函数。错误消息清楚地告诉它,没有办法绕过它

你可能会认为下唇、上齿、贝塞尔是一个合适的选择,但事实并非如此

现在,我的只是猜测,但我相信你想做的是:

def mel_script(lip_var):
    '''The mel script generated for the input speech with the chosen energy level'''
    with open("mel.txt", "w") as melFile :
        melFile.write('setKeyframe "BS_stickyLips_SL_recept.head_geo_stickyLips_wire";'
                      'setKeyframe "BS_stickyLips_baseSL_recept.head_geo";'
                      'setKeyframe "BS_stickyLips_wireSL_recept.head_geo";'
                      'setKeyframe "blend_shape.lip_round";'
                      'setKeyframe "blend_shape.jaw_open";'
                      'setKeyframe "blend_shape.lips_spread";'
                      'setKeyframe "blend_shape.lips_part";'
                      'setKeyframe "blend_shape.lower_lip_under_upper_teeth";')
    for p in lip_var:    # Check this out!!!
        melFile.write('setAttr "blend_shape.jaw_open" %f ;' % p )
编辑-查看评论:我认为这里对python的工作原理有一些基本的误解。。。在python中,就像在大多数编程语言中一样!当你声明一个函数时,你要声明它的名字和它需要的参数

如果您试图将5个列表传递给mel_脚本,则在声明mel_脚本时,您应该这样说:

def mel_script(list1, list2, list3, list4, list5):
    # Your code here should work with list1, list2, etc...
然后,在调用mel_脚本时,需要将这些列表传递给它。如果这些列表是由函数生成的,比如f1、f2、f3。。。。您可以在一行中完成这一切:

mel_script(f1(), f2(), f3(), f4(), f5())
否则,必须将列表存储在临时变量中,并将其传递给mel_scirpt:

在上面的示例中,请注意f1有圆括号,表示您正在调用名为f1的函数。如果省略这些,则传递的是函数本身,而不是其结果

实际上,有更聪明的方法来实现这一点,比如传递可变数量的参数,或者使用闭包,但是从你的问题中我知道你还没有!精通python,因此现在最好还是坚持使用此方法!:

下唇下牙上牙贝塞尔是一项功能。错误消息清楚地告诉它,没有办法绕过它

你可能会认为下唇、上齿、贝塞尔是一个合适的选择,但事实并非如此

现在,我的只是猜测,但我相信你想做的是:

def mel_script(lip_var):
    '''The mel script generated for the input speech with the chosen energy level'''
    with open("mel.txt", "w") as melFile :
        melFile.write('setKeyframe "BS_stickyLips_SL_recept.head_geo_stickyLips_wire";'
                      'setKeyframe "BS_stickyLips_baseSL_recept.head_geo";'
                      'setKeyframe "BS_stickyLips_wireSL_recept.head_geo";'
                      'setKeyframe "blend_shape.lip_round";'
                      'setKeyframe "blend_shape.jaw_open";'
                      'setKeyframe "blend_shape.lips_spread";'
                      'setKeyframe "blend_shape.lips_part";'
                      'setKeyframe "blend_shape.lower_lip_under_upper_teeth";')
    for p in lip_var:    # Check this out!!!
        melFile.write('setAttr "blend_shape.jaw_open" %f ;' % p )
编辑-查看评论:我认为这里对python的工作原理有一些基本的误解。。。在python中,就像在大多数编程语言中一样!当你声明一个函数时,你要声明它的名字和它需要的参数

如果您试图将5个列表传递给mel_脚本,则在声明mel_脚本时,您应该这样说:

def mel_script(list1, list2, list3, list4, list5):
    # Your code here should work with list1, list2, etc...
然后,在调用mel_脚本时,需要将这些列表传递给它。如果这些列表是由函数生成的,比如f1、f2、f3。。。。您可以在一行中完成这一切:

mel_script(f1(), f2(), f3(), f4(), f5())
否则,必须将列表存储在临时变量中,并将其传递给mel_scirpt:

在上面的示例中,请注意f1有圆括号,表示您正在调用名为f1的函数。如果省略这些,则传递的是函数本身,而不是其结果

实际上,有更聪明的方法来实现这一点,比如传递可变数量的参数,或者使用闭包,但是从你的问题中我知道你还没有!精通python,因此现在最好还是坚持使用此方法!:


此函数在代码中的其他地方调用。我正在尝试使用在这个函数中生成的列表的内容来在mel_脚本函数中使用。我明白你的意思了。但是在这个函数中传递的参数是在其他函数中生成的,所以如果我传递这些参数,它们在这里就不会被识别。@zingy:那么,如果您不知道这些参数应该具有什么值,您希望如何在上下下下下运行函数lower\u lip\u bezier的代码呢?函数在不知道其参数的情况下应该做什么?你似乎有一些严重的误解,我不确定我们是否可以通过回答几个这样的问题来解决它们。可能您必须先做一些努力。@Sven Marnach我从参数的传递位置和其他函数的值中知道,因为在生成参数的另一个函数中调用此函数。这是一个很长的代码,所以我没有发布。@zingy:但是,您认为函数mel_script如何知道您可能在其他地方引用的其他函数调用?我理解你之前的评论,我很感激你没有发布整个代码。这个函数在代码的其他地方被调用。我正在尝试使用在这个函数中生成的列表的内容来在mel_脚本函数中使用。我明白你的意思了。但是在这个函数中传递的参数是在其他函数中生成的,所以如果我传递这些参数,它们在这里就不会被识别。@zingy:那么,如果您不知道这些参数应该具有什么值,您希望如何在上下下下下运行函数lower\u lip\u bezier的代码呢?函数在不知道其参数的情况下应该做什么?你们似乎有一些严重的误解,我不确定我们是否能通过answ解决它们
我问了几个这样的问题。可能您必须先做一些努力。@Sven Marnach我从参数的传递位置和其他函数的值中知道,因为在生成参数的另一个函数中调用此函数。这是一个很长的代码,所以我没有发布。@zingy:但是,您认为函数mel_script如何知道您可能在其他地方引用的其他函数调用?我理解你之前的评论,我很感激你没有发布整个代码。你的代码中的lip\u var是生成列表的函数吗?@zingy-nope,是一个iterable变量,其中存储了lower\u lip\u under\u upper\u Deets\u bezier函数返回的lower\u lip\u under\u upper\u Deets\u列表下的lower\u lip\u lip\u列表。@zingy-你想传递函数吗[f1]作为另一个函数的参数[f2]?如果是,应该在f2中给出要输入f1的参数,还是在将f1发送到f2之前给出?我在哪里包括带“tmp”的两行?我使用的不是一个函数。有5个函数生成5个列表,我必须将这5个列表中的值传递到mel脚本的每一行。我太无知了,无法理解连接。如果你看了上一篇文章,那么你可能会理解。在上一篇文章中,我只是写了func1作为示例,但实际上我有函数的参数。你的代码中的lip\u var是生成列表的函数吗?@zingy-nope,是一个iterable变量,上面的lip\u列表下的lower\u lip\u列表返回bezier函数下的d by lower_lip_已存储。@zingy-是否试图将函数[f1]作为参数传递给另一个函数[f2]?如果是,应该在f2中给出要输入f1的参数,还是在将f1发送到f2之前给出?我在哪里包括带“tmp”的两行?我使用的不是一个函数。有5个函数生成5个列表,我必须将这5个列表中的值传递到mel脚本的每一行。我太无知了,无法理解连接。如果你看过上一篇文章,那么你可能会理解。在上一篇文章中,我只是写了func1作为示例,但实际上我有函数的参数。