ЦитироватьАга, и от этого персы запрыгают сами по себе...А они должны были сами начать скакать? Тот скрипт, для 2.4х просто импортирует партитуры инструментов из MIDI в отдельные IPO. А остальное - дело аниматора....
Ага, и от этого персы запрыгают сами по себе...
Речь идет об анимации персов синхронно с музыкой, если чо...
... есть предложения? ...
с midi более менее понятно и на самом деле реализуемо без дополнительных дополнений. Все треки midi файла конвертируются в отдельные wav файлы одной строкой в консоле. Об этом спрашивал на ЛОРе и там дали годный код http://www.linux.org.ru/forum/multimedia/12722602 , который легко затачивается для мирных целей. Далее wav файлы запекаются в f-curve стандартными средствами blender, об этом мы уже говорили в этой теме.Вариант с парсером mmp меня заинтриговал и мне уже удалось получить доступ к трекам в python. Это весьма занятная тема.
... экспортер Jean-Baptiste PERIN парсит midi файл и делает on|off - анимацию, и твой совет по адаптации его к новой версии blender не остался не замеченным, попробуем его вытащить ...
... экспортер Jean-Baptiste PERIN парсит midi файл и делает on|off - анимацию, и твой совет по адаптации его к новой версии blender не остался не замеченным, попробуем его вытащить ... ... суть - получить последовательность действий - нажатие клавиш и прочего ...... поэтому собираем дальше полезную информацию ...... спасибо ...
import bpyscene = bpy.context.sceneinstrument = Noneparse = Falsebpy.ops.object.select_all(action = 'DESELECT')for line in open("lmms.mmp"): split = line.replace('<',' ') split = split.replace('>',' ') split = split.replace('"',' ') split = split.replace('=',' ') split = split.split() if split[0] == 'pattern': instrument = split[8] ob = scene.objects[instrument] scene.objects.active = ob ob.select = True bpy.ops.object.mode_set(mode = 'EDIT') parse = True continue if parse: if split[0] == 'note': pos = int(split[8]) scene.frame_set(pos) key = split[4] bpy.ops.object.vertex_group_set_active(key) bpy.ops.object.vertex_group_select() vol = float(split[6]) bpy.ops.transform.translate(value = (0,0,vol)) LEN = split[10]
import bpyscene = bpy.context.sceneinstrument = Noneparse = Falselayers = 20*[False]layers[19] = Truefor line in open("lmms.mmp"): split = line.replace('<',' ') split = split.replace('>',' ') split = split.replace('"',' ') split = split.replace('=',' ') split = split.split() if split[0] == 'pattern': instrument = split[8] parse = True for i in range(108): bpy.ops.mesh.primitive_plane_add(layers=layers) ob = bpy.context.object ob.name = instrument + '_' +'%s'%i bpy.ops.object.select_all(action = 'DESELECT') continue if parse: if split[0] == 'note': key = split[4] ob.name = instrument + '_' + key ob = scene.objects[ob.name] scene.objects.active = ob ob.select = True loc = ob.location vol = float(split[6]) pos = int(split[8]) LEN = int(split[10]) if scene.frame_current > 1: scene.frame_set(pos-1) bpy.ops.anim.keyframe_insert_menu(type='Location') scene.frame_set(pos) ob.location = (0,0,vol) bpy.ops.anim.keyframe_insert_menu(type='Location') f = pos+LEN scene.frame_set(f) bpy.ops.anim.keyframe_insert_menu(type='Location') scene.frame_set(f+1) ob.location = loc bpy.ops.anim.keyframe_insert_menu(type='Location') if split[0] == '/pattern': parse = False
import bpyscene = bpy.context.sceneinstrument = Noneparse = Falselayers = 20*[False]layers[0] = Truefor line in open("/home/leonid/lmms/projects/lmms.mmp"): split = line.replace('<',' ') split = split.replace('>',' ') split = split.replace('"',' ') split = split.replace('=',' ') split = split.split() if split[0] == 'pattern': instrument = split[8] parse = True for i in range(108): bpy.ops.mesh.primitive_plane_add(layers=layers) ob = bpy.context.object ob.name = instrument+'_'+'%s'%i bpy.ops.object.select_all(action = 'DESELECT') continue if parse: if split[0] == 'note': key = split[4] ob_name = instrument + '_' + key ob = scene.objects[ob_name] scene.objects.active = ob ob.select = True loc = ob.location[:] vol = float(split[6]) pos = int(split[8]) LEN = int(split[10]) if scene.frame_current > 1: scene.frame_set(pos-1) bpy.ops.anim.keyframe_insert_menu(type='Location') scene.frame_set(pos) ob.location = (0,0,vol/100) bpy.ops.anim.keyframe_insert_menu(type='Location') f = pos+LEN scene.frame_set(f) bpy.ops.anim.keyframe_insert_menu(type='Location') scene.frame_set(f+1) ob.location = loc bpy.ops.anim.keyframe_insert_menu(type='Location') if split[0] == '/pattern': parse = False