Автор Тема: Звук-Анимация, Анимация-Звук  (Прочитано 25541 раз)

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Для Кота

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #91 : 19 Ноябрь 2016, 20:27:34 »

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #92 : 20 Ноябрь 2016, 11:52:30 »
... мне думается, что ксилофон уже должен содержать полный набор действий (action) и задача только их расставить во времени ...
Николай, пытаюсь расставить во времени автоматически:
Код
class AnimFromOtherKeys(bpy.types.Operator):
   
    bl_idname = "anim.create_from_other_keys"
    bl_label = "Create"
    bl_description = ""
    bl_options = {'REGISTER', 'UNDO'}


    def execute(self, context):
        scene = context.scene
        ob = bpy.data.objects["Synth Brazz 1"]
        keys = []
        for fcurve in ob.animation_data.action.fcurves:
            fcurve_keys = [fcurve.data_path]
            len_points = len(fcurve.keyframe_points)
            for i in range(0,len_points,4):
                k0 = fcurve.keyframe_points[i].co[:]
                k1 = fcurve.keyframe_points[i+1].co[:]
                k2 = fcurve.keyframe_points[i+2].co[:]
                k3 = fcurve.keyframe_points[i+3].co[:]
                note = ''
                for symbol in fcurve.data_path:
                    if symbol.isdigit():
                        note+=symbol
                keys.append((note,k0,k1,k2,k3))
        frames = []
        for key in keys:
            frames.append(key[1][0])
        frames.sort()
        hands = ['Left','Right']
        for frame in frames:
            for key in keys:
                if key[1][0] == frame:
                    bpy.ops.object.select_all(action='DESELECT')
                    ob_anim = bpy.data.objects[hands[0]]
                    ob_anim.select = True
                    scene.frame_set(frame)
                    .....................
                    hands.reverse()


        return {'FINISHED'}







Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Звук-Анимация, Анимация-Звук
« Ответ #93 : 20 Ноябрь 2016, 14:45:02 »
... так тоже пытаюсь :) ...
Для Кота

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #94 : 20 Ноябрь 2016, 16:59:18 »
... так тоже пытаюсь :) ...
:)
Надеюсь, что ты увидел, что я пытаюсь брать данные из твоим кодом созданного объекта. В принципе, должно получиться, просто, уже отдохнуть башке нужно.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Звук-Анимация, Анимация-Звук
« Ответ #95 : 20 Ноябрь 2016, 18:23:41 »
>> я пытаюсь брать данные из твоим кодом созданного объекта
... упс, сам то  уже выкинул этот код и объекты в топку, новая тема  ;) ...
... суть - не управлять кривыми, а рулить уже готовыми действиями инструмента ...
... то есть настройка должным образом инструмента это отдельная задача, её нужно решать в рамках подготовки инструмента (ксилофон, саксофон, миелафон, ...) ...

>> уже отдохнуть башке нужно
... попробуй запустить шмеля {ALT+A}...
https://yadi.sk/d/RQpSw8o3z5Qno
Для Кота

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Звук-Анимация, Анимация-Звук
« Ответ #96 : 20 Ноябрь 2016, 18:32:29 »
... звуковая дорожка, или слей  шмеля из lmms ...
https://yadi.sk/d/8Pc0CvYUz5Tof
Для Кота

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #97 : 21 Ноябрь 2016, 22:17:46 »
>> я пытаюсь брать данные из твоим кодом созданного объекта
... упс, сам то  уже выкинул этот код и объекты в топку, новая тема  ;) ...
... суть - не управлять кривыми, а рулить уже готовыми действиями инструмента ...
... то есть настройка должным образом инструмента это отдельная задача, её нужно решать в рамках подготовки инструмента (ксилофон, саксофон, миелафон, ...) ...

>> уже отдохнуть башке нужно
... попробуй запустить шмеля {ALT+A}...
https://yadi.sk/d/RQpSw8o3z5Qno
Запустил. Ну, это в принципе то же, что я и писал здесь в своём первом парсере. Или нет? Ты свой код зря выбросил. Ладно, завтра гляну, сегодня времени не было. :)

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Звук-Анимация, Анимация-Звук
« Ответ #98 : 22 Ноябрь 2016, 06:43:04 »
>> Ты свой код зря выбросил
... конечно же код в копилке, но ...
... но в последней варианте уровень абстракции выше ...
... есть файлы с данными (mmp,midi,xml) в которых упакована информация о старте и продолжительности действия ...
... есть 3d модель с анимацией и своим набором действий ...
... нужно связать действия из файла с действиями из анимации ...
Для Кота

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #99 : 22 Ноябрь 2016, 17:17:49 »
>> Ты свой код зря выбросил
... конечно же код в копилке, но ...
... но в последней варианте уровень абстракции выше ...
... есть файлы с данными (mmp,midi,xml) в которых упакована информация о старте и продолжительности действия ...
... есть 3d модель с анимацией и своим набором действий ...
... нужно связать действия из файла с действиями из анимации ...
Я уже писал, что нужно систематизировать действия. Независимо от инструментов действия музыканта ограничены: игра рукой (рукой, смычком, медиатором, палочкой) и игра пальцами.  Но, к этому нужно добавить и поведение инструментов в зависимости от их типа: клавишные, струнные, духовые, какие-то там ещё. Если музыкант играет на пианино, то нужно анимировать пальцы обеих рук и клавиши, если играет на трубе, то так же. Если играет на гитаре медиатором, то анимировать нужно одну руку, пальцы другой руки и струны. Вот я и рисовал гуёвину, объединяющую все доступные действия. А ты считал, что это преждевременно. Своевременно я рисовал. :)
В гёувине нужно только начало ноты и её продолжительность записывать уже пересчитанные по твоей формуле в кадры.

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #100 : 22 Ноябрь 2016, 22:52:40 »
Добавляем ещё один класс:
Код
class MusicPatternSettings(bpy.types.PropertyGroup):
    @classmethod
    def register(cls):
        bpy.types.TextCurve.music_pattern = PointerProperty(
                name="Music Pattern Settings",
                description="",
                type=cls,
                )
    auto = BoolProperty()
    musician = StringProperty()
    instrument = StringProperty()

    @classmethod
    def unregister(cls):
        del bpy.types.TextCurve.music_pattern
Соответственно, в гуёвину дописываем:
Код
        if ob and ob.type == 'FONT' and len(ob.data.notes) > 0:
            layout = self.layout
+          layout.prop_search(ob,"musician",context.blend_data,'objects',text='Musician')
+          layout.prop_search(ob,"instrument",context.blend_data,'objects',text='Instrument')
+          layout.prop(ob,"auto")
            ctx = ob.data.notes[note]

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Звук-Анимация, Анимация-Звук
« Ответ #101 : 23 Ноябрь 2016, 07:11:09 »
на текущий момент моё видение такое:

А) на стороне чтеца
1) загрузка данных в "универсальную" структуру мета-действий
2) сохранение "универсальной" структуры в .blend модели

Б) на стороне жнеца
1) чтение "универсальной" структуры мета-действий
2) преобразование  мета-действий в "соответствии" с "согласованным" профилем выбранного инструмента в действия

В) на стороне кузнеца
1) моделирование инструмента
2) моделирование арматурной оснасти
3) описание "согласованного" профиля

инструмент - это 3d модель (любая модель или группа моделей с прописанными действиями)
согласованный профиль - таблица трансляции мета-действий в действия
универсальная структура - это блок памяти для хранения информации, прочитанной из различных форматов файлов - {код действия, время начала, продолжительность, сила}


твой код служит оснасткой для кузнеца для подготовки инструмента
опять же инструмент , это уже не просто (ксилофон, саксофон, миелафон, ...), а (ксилофон, саксофон, миелафон, ...) + исполнитель (если таковой предусмотрен сценой) ...
Для Кота

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #102 : 23 Ноябрь 2016, 18:26:21 »
на текущий момент моё видение такое:

А) на стороне чтеца
1) загрузка данных в "универсальную" структуру мета-действий
2) сохранение "универсальной" структуры в .blend модели

Б) на стороне жнеца
1) чтение "универсальной" структуры мета-действий
2) преобразование  мета-действий в "соответствии" с "согласованным" профилем выбранного инструмента в действия

В) на стороне кузнеца
1) моделирование инструмента
2) моделирование арматурной оснасти
3) описание "согласованного" профиля

инструмент - это 3d модель (любая модель или группа моделей с прописанными действиями)
согласованный профиль - таблица трансляции мета-действий в действия
универсальная структура - это блок памяти для хранения информации, прочитанной из различных форматов файлов - {код действия, время начала, продолжительность, сила}


твой код служит оснасткой для кузнеца для подготовки инструмента
опять же инструмент , это уже не просто (ксилофон, саксофон, миелафон, ...), а (ксилофон, саксофон, миелафон, ...) + исполнитель (если таковой предусмотрен сценой) ...

Моё вИдение таково:
1. Используем код с CollectionProp для загрузки треков.
При импорте сразу же конвертируем параметры "позиция" и "продолжительность" из условных единиц, принятых LMMS в кадры Блендера.
Сколько треков, столько и объектов. Разве это не универсальное хранение данных в бленд-модели?
Однажды загрузив и сохранив мы уже не зависим от файла .mmp.
2. Используем твой код, который в архив ушёл, для анимации клавишных инструментов.
Только, не создаём action для каждой ноты, а создаём анимацию каждого объекта - клавиши3д.
Для этого, если клавиш нет ещё, создаём пустышки, если клавиши есть, то задаём правило:
Название клавиш должно начинаться с названия инструмента, а заканчиваться буквами, соответствующими ноте, например: "Piano_C2". Для этого пишем словарь, в котором ключами будут числа, обозначающие номер ноты в .mmp, а параметром будет название ноты. Думается, что для музыкантов это будет удобно, нежели считать клавиши в ЛММС, чтобы определить, какая нота, какому числу соответствует. :)
Чтобы было понятней, вот словарь, написанный для одной октавы:
Код
notes = {
    "48": ["До_4","c4","C4"] # start
    "49": ["До_диез_4","Ре_бемоль_4","cis4","des4","C-sharp4","D-flat4"]
    "50": ["Ре_4","d4","D4"]
    "51": ["Ре_диез_4","Ми_бемоль_4","dis4","es4","D-sharp4","E-flat4"]
    "52": ["Ми_4","e4","E4"]
    "53": ["Фа_4","f4","F4"]
    "54": ["Фа_диез_4","Соль_бемоль_4","fis4","ges4","F-sharp4","G-flat4"]
    "55": ["Соль_4","g4","G4"]
    "56": ["Соль_диез_4","Ля_бемоль_4","gis4","as4","G-sharp4","A-flat4"]
    "57": ["Ля_4","a4","A4"]
    "58": ["Ля_диез_4","Си_бемоль_4","ais4","b4","A-sharp4","B-flat4"]
    "59": ["Си_4","h4","B4"]}
Здесь одному ключу соответствует список русских, немецких и английских названий,
какими они представлены в википедии вот здесь:
https://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%82%D0%B0_%28%D0%BC%D1%83%D0%B7%D1%8B%D0%BA%D0%B0%29

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Звук-Анимация, Анимация-Звук
« Ответ #103 : 23 Ноябрь 2016, 18:38:13 »
>> Название клавиш должно начинаться с названия инструмента, а заканчиваться буквами, соответствующими ноте, например: "Piano_C2".
... это хорошая идея ...

>> Только, не создаём action для каждой ноты, а создаём анимацию каждого объекта - клавиши3д.
... каким образом узнать какой тип анимации нужно создать по указанной ноте для конкретного объекта - клавиши3д? ...
Для Кота

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #104 : 23 Ноябрь 2016, 18:41:59 »
Далее, к моему предыдущему посту, надеюсь понятно:
Код
if key == "49":
    for ob in bpy.data.objects:
       if ob.name in notes["49"]:
            obj = ob
        else:
            obj = bpy.data.objects.new(name = notes["49"][-1])

 


Яметрика

* По форуму

* Рекламный блок

* Последние вложения

1 (1).png
Скачано: 90
Автор: LEXA ANЭGROWND
blender.png
Скачано: 97
Автор: ipv2007
4.png
Скачано: 127
Автор: hiroyukiss
2.png
Скачано: 146
Автор: hiroyukiss

Скачано: 156
Автор: Dilifa12