I am trying to play with this Audio Viz from blendercookie, but I am having problems with the code, which is as follows…
import bpy
rows = 5
columns = 5
r = 0
c = 0
def spiral(X, Y):
x = y = 0
dx = 0
dy = -1
for i in range(max(X, Y)**2):
if (-X/2 < x <= X/2) and (-Y/2 < y <= Y/2):
bpy.ops.mesh.primitive_cube_add(location=(x, y, 0))
bpy.context.scene.cursor_location = bpy.context.active_object.location
bpy.context.scene.cursor_location.z -= 1
bpy.ops.object.origin_set(type = ‘ORIGIN_CURSOR’)
####
bpy.context.active_object.scale.x = 0.5
bpy.context.active_object.scale.y = 0.5
bpy.context.active_object.scale.z = 5
bpy.ops.object.transform_apply(scale=True)
bpy.ops.anim.keyframe_insert_menu(type = 'Scaling')
bpy.context.active_object.animation_data.action.fcurves[0].lock = True
bpy.context.active_object.animation_data.action.fcurves[1].lock = True
bpy.context.area.type = 'GRAPH_EDITOR'
step = 20000/ (rows*columns)
bpy.ops.sound_bake(filepath=r"C:/Users/James/Desktop/Angular Momentum.mp3", low=i*step, high=i*step + step)
bpy.context.active_object.animation_data.action.fcurves[2].lock = True
if x == y or (x < 0 and x == -y) or (x > 0 and x == 1-y):
dx, dy = -dy, dx
x, y = x+dx, y+dy
spiral(rows, columns)
I keep getting an error that states:
Traceback…line 45 in <module> and line 34 in spiral…TypeError ‘BPyOpsSubMod’ object is not callable
OK, I am new to python and have no clue what this is. I have played with the indents and spelling and other, but for the life of me cannot get it to work.
Line 34 is where the sound file is identified
Line 45 is the last line.
I grabbed the script from http://pastebin.com/vfsj2GWB in your OP. If you have trouble baking the mp3 file you may need to use some audio program to convert it to a single channel wav. You also mentioned about using another object than the cube. My suggestion there is to use group instances and animate the z scale of the empty.
import bpy
def spiral(context, X, Y, groupname, filepath):
group = bpy.data.groups.get(groupname)
if group is None:
print("No Group %s" % groupname)
return False
step = 16000/ (X * Y)
x = y = 0
dx = 0
dy = -1
area = context.area.type
bpy.context.area.type = 'GRAPH_EDITOR'
for i in range(max(X, Y)**2):
if (-X/2 < x <= X/2) and (-Y/2 < y <= Y/2):
bpy.ops.object.group_instance_add('EXEC_DEFAULT', group="Group")
ob = context.active_object
ob.location = x, y, 0
ob.keyframe_insert('scale', index=2)
bpy.ops.graph.sound_bake(filepath=filepath, low=i*step, high=i*step + step)
if x == y or (x < 0 and x == -y) or (x > 0 and x == 1-y):
dx, dy = -dy, dx
x, y = x+dx, y+dy
context.area.type = area
# test call.. I have a speaker with sound file attached
filepath = bpy.data.objects["Speaker"].data.sound.filepath
spiral(bpy.context, 5, 5, "Group", filepath)
@paraponera When an “r” or “R” prefix is present, a character following a backslash is included in the string without change, and all backslashes are left in the string.
@batFinger the pastbin url is mine from another post, and I was able to figure it out (thread is marked SOLVED) although probably not very elegantly. However, thank you for both the correction on “r” vs “R” (it just jumped out at me from the OP’s post and I wasn’t aware of this behavior), and for the code snippet. I’ll test your Python out. Thank you kindly for the advice!
EDIT: yup, the code definitely works. Added my single mesh to a group named “Group”, included my mp3, and had immediate positive results. Now its going to take me some time to digest the code further, but thank you for some working reference to kick around.
I am curious though what the Speaker does (locational audio I assume)? I added a speaker object with the default “Speaker” name to my scene and I get an error:
AttributeError: ‘NoneType’ object has no attribute ‘filepath’