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

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #75 : 05 Ноябрь 2016, 11:51:43 »
... сейчас понятно что можно загружать "звук", но хотелось бы еще научиться выгружать в "звук" ...
Что ты под этим подразумеваешь, то же что и я, или нет? :)

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #76 : 05 Ноябрь 2016, 12:08:35 »
Кстати, обратил внимание на консоль:
Warning: This script was written Blender version 2.78.0 and might not function (correctly), though it is enabled
Это ни страшно, но, может, стоит указать версию более раннюю?

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Звук-Анимация, Анимация-Звук
« Ответ #77 : 05 Ноябрь 2016, 19:58:39 »
... пояснение где смотреть ...
Для Кота

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #78 : 05 Ноябрь 2016, 20:19:56 »
... пояснение где смотреть ...
Что дальше будем с этим делать?
Хорошо бы было, если бы в ЛММС ещё аппликатуру можно бы было указывать... ;D ;D ;D
Из вики:
Код
Аппликату́ра (нем. Applikatur, от лат. applico — прикладываю, прижимаю) — порядок расположения и чередования пальцев при игре на музыкальном инструменте. Аппликатурой также называется указание пальцев в нотах с помощью цифр или, реже, иным способом. Аппликатура особенно важна для клавишных и струнных инструментов. Умение разрабатывать аппликатуру — важная составляющая мастерства исполнителя.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Звук-Анимация, Анимация-Звук
« Ответ #79 : 05 Ноябрь 2016, 22:07:45 »
>> ещё аппликатуру можно бы было указывать...
... несмотря на упоминание в этой теме подобного, указанной цели не ставилось ...
... тем не менее, если к этому функционалу есть интерес, давайте собирать информацию ...
... вот например
https://itunes.apple.com/ru/app/chord3d-guitar-ukulele-guitalele/id1004214587?mt=12

... есть у этой тематики технологические описания и готовые шаблоны? ...
... выкладывайте алгоритмы и методики ...
Для Кота

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #80 : 05 Ноябрь 2016, 23:21:34 »
>> ещё аппликатуру можно бы было указывать...
... несмотря на упоминание в этой теме подобного, указанной цели не ставилось ...
... тем не менее, если к этому функционалу есть интерес, давайте собирать информацию ...
... вот например
https://itunes.apple.com/ru/app/chord3d-guitar-ukulele-guitalele/id1004214587?mt=12
... есть у этой тематики технологические описания и готовые шаблоны? ...
... выкладывайте алгоритмы и методики ...
Я скажу так: тема может нас объединить. Ставилось - не ставилось, какая разница?
Первое, что приходит на ум, это пустышка(Empty), которая движется по нотам, и будет являться гидом для костей арматуры...
Второе, что приходит на ум, это то, что разработчики должны про нас знать. Якобы тут ни здесь и ни хухры-мухры. В смысле, возможно, освещённая идея принесёт вытекающие идеи от иностранцев...
Я это к тому, что тема может быть развита до серьёзных движений.

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #81 : 13 Ноябрь 2016, 11:33:44 »
Моя шутка увела тему из поля видимости.
Но, хочется всё же реализовать то, о чём я серьёзно писал здесь ранее.
Игра на ксилофоне.
Для достижения цели возьмём музыкальную композицию римского товарища Корсакова "Полёт шмеля".
Я нашёл несколько вариантов миди файлов, импортируемых в ЛММС.
План таков:
1. Создаём в Блендере ксилофон наподобие такого:

Все эти доски обзываем числами, соответствующими нотам. Для этого подсмотрим в сохранённый полёт в виде mmp.
Центра досок устанавливаем в тех иместах, где по ним наносятся удары.
2. Создаём два шарика - наконечники на палочки, которыми стучат по доскам.
3. Думаем про алгоритм. Что нам нужно? Отсортировать ноты на чётные и нечётные.
Ещё что? Нам нужно для чётных и нечётных нот по одной f-curve, которые будут перемещать шарики от ноты к ноте на определённой высоте,
в нужный момент опускаясь на нужную доску...
4. Пытаемся что-то писать на пайтоне в текстовом редакторе.

Как план?
Полёт шмеля прилагаю.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Звук-Анимация, Анимация-Звук
« Ответ #82 : 13 Ноябрь 2016, 17:00:41 »
>> Ещё что?
... умеренный сепаратизм ...
... у нас "уже" есть скрипт загрузки нот в кривые без привязки к конкретному инструменту ...
... допустим, что даже есть анимированный инструмент со своим ригом ...
... теперь нужно проработать интерфейс стыковки одного с другим ...
... и в целом правила стыковки не должны зависеть от инструмента (ксилофон, саксофон, миелафон, ...)  ...
Для Кота

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #83 : 13 Ноябрь 2016, 17:30:58 »
>> Ещё что?
... умеренный сепаратизм ...
... у нас "уже" есть скрипт загрузки нот в кривые без привязки к конкретному инструменту ...
... допустим, что даже есть анимированный инструмент со своим ригом ...
... теперь нужно проработать интерфейс стыковки одного с другим ...
... и в целом правила стыковки не должны зависеть от инструмента (ксилофон, саксофон, миелафон, ...)  ...
Я знаю, что у нас есть скрипт, но, как мне показалось, наш скрипт маловат. :)
Ранее я упоминал о вариантах, которые можно использовать для разных случаев: игра руками, игра пальцами, игра на ударных. Для этого можно использовать enumprop, чтобы выбрать, какие кривые мы хотим получить при импорте mmp. Это и будут правила стыковки не зависящие от инструмента.
Хотя, может, после вчерашнего я туго соображаю. Ты как предлагаешь связать полученные скриптом кривые с руками? Устанавливаем по очереди кадры и проверяем по всем нотам, какая из них в данный момент изменила своё состояние? Хотя, это тоже вариант.
Чет - нечет - это для полёта шмеля, ибо там все шестнадцатые доли, а если в такте одна четвертинка и две восьмые? Перс должен ударить два раза подряд одной рукой и один раз другой... Стало быть нужен счётчик, который по длительности нот в такте будет переключать руки: то ли это будет левая, то ли это будет правая.

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #84 : 17 Ноябрь 2016, 19:24:43 »
Ну, продолжим расширять функционал нашего скрипта.
Добавляем класс, несущий в себе ноты партии и указания того, что нам с этими нотами делать:
Код
class NoteSettingItem(bpy.types.PropertyGroup):
    name = bpy.props.StringProperty()
    volume = bpy.props.IntProperty()
    position = bpy.props.IntProperty()
    duration = bpy.props.IntProperty()
    hands = bpy.props.EnumProperty(
        name="Hands",
        items=( ("left", "Left", ""),
                ("right", "Right", ""),
                ("both", "Both", "")),
        default="right")

    left_hand = bpy.props.EnumProperty(
        name="motion_left_hand",
        items=( ("up", "Up", ""),
                ("down", "Down", ""),
                ("blow", "Blow", ""),
                ("fingers", "Fingers", "")),
        default="blow")

    finger_left_1 = bpy.props.BoolProperty()
    finger_left_2 = bpy.props.BoolProperty()
    finger_left_3 = bpy.props.BoolProperty()
    finger_left_4 = bpy.props.BoolProperty()
    finger_left_5 = bpy.props.BoolProperty()

    finger_left_1_connect = bpy.props.BoolProperty()
    finger_left_2_connect = bpy.props.BoolProperty()
    finger_left_3_connect = bpy.props.BoolProperty()
    finger_left_4_connect = bpy.props.BoolProperty()
    finger_left_5_connect = bpy.props.BoolProperty()

    right_hand = bpy.props.EnumProperty(
        name="motion_right_hand",
        items=( ("up", "Up", ""),
                ("down", "Down", ""),
                ("blow", "Blow", ""),
                ("fingers", "Fingers", "")),
        default="blow")

    finger_right_1 = bpy.props.BoolProperty()
    finger_right_2 = bpy.props.BoolProperty()
    finger_right_3 = bpy.props.BoolProperty()
    finger_right_4 = bpy.props.BoolProperty()
    finger_right_5 = bpy.props.BoolProperty()

    finger_right_1_connect = bpy.props.BoolProperty()
    finger_right_2_connect = bpy.props.BoolProperty()
    finger_right_3_connect = bpy.props.BoolProperty()
    finger_right_4_connect = bpy.props.BoolProperty()
    finger_right_5_connect = bpy.props.BoolProperty()
Привязываем это к объекту "Текст". Потому, что название инструмента будет визуально обозначено, дабы не искать его во вьюпорте:
Код
def register():
    bpy.utils.register_module(__name__)
    bpy.types.INFO_MT_file_import.append(menu_func)
    bpy.types.TextCurve.notes = bpy.props.CollectionProperty(type=NoteSettingItem)

def unregister():
    bpy.utils.unregister_module(__name__)
    bpy.types.INFO_MT_file_import.remove(menu_func)
    del bpy.types.TextCurve.notes

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Звук-Анимация, Анимация-Звук
« Ответ #85 : 17 Ноябрь 2016, 20:08:08 »
>>несущий в себе ноты партии и указания того, что нам с этими нотами делать

   файл->ноты
   ноты->делать
делать->анимация

... мне думается, что ксилофон уже должен содержать полный набор действий (action) и задача только их расставить во времени ...
Для Кота

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #86 : 17 Ноябрь 2016, 21:26:53 »
... мне думается, что ксилофон уже должен содержать полный набор действий (action) и задача только их расставить во времени ...
Это не помешает ксилофону. По умолчанию я установил удары. :)
Просто, если мысль появилась, её нужно зафиксировать.
Добавляем ещё текста:
Код
class View3DPanel():
    bl_space_type = 'VIEW_3D'
    bl_region_type = 'TOOLS'

class VIEW3D_PT_lmms(View3DPanel, bpy.types.Panel):
    bl_category = "Animation"
    bl_context = "objectmode"
    bl_label = "Musicians Animation with LMMS"

    def draw(self, context):
        ob=context.object
        note = 0
        if ob and ob.type == 'FONT' and len(ob.data.notes) > 0:
            layout = self.layout
            ctx = ob.data.notes[note]  #develop
            layout.prop(ctx,"name")
            layout.prop(ctx,"volume")
            layout.prop(ctx,"position")
            layout.prop(ctx,"duration")
            layout.label('Hands:')
            layout.prop(ctx,"hands",expand = True)
            if ctx.hands in {'left','both'}:
                layout.label('Left hand:')
                layout.prop(ctx,"left_hand",expand = True)
                if ctx.left_hand in {'fingers'}:
                    box = layout.box()
                    box.label('Fingers left hand')
                    row = box.row()
                    row.prop(ctx,"finger_left_1",text="1")
                    row.prop(ctx,"finger_left_1_connect",text="done")
                    row = box.row()
                    row.prop(ctx,"finger_left_2",text="2")
                    row.prop(ctx,"finger_left_2_connect",text="done")
                    row = box.row()
                    row.prop(ctx,"finger_left_3",text="3")
                    row.prop(ctx,"finger_left_3_connect",text="done")
                    row = box.row()
                    row.prop(ctx,"finger_left_4",text="4")
                    row.prop(ctx,"finger_left_4_connect",text="done")
                    row = box.row()
                    row.prop(ctx,"finger_left_5",text="5")
                    row.prop(ctx,"finger_left_5_connect",text="done")
            if ctx.hands in {'right','both'}:
                layout.label('Right hand:')
                layout.prop(ctx,"right_hand",expand = True)
                if ctx.right_hand in {'fingers'}:
                    box = layout.box()
                    box.label('Fingers right hand')
                    row = box.row()
                    row.prop(ctx,"finger_right_1",text="1")
                    row.prop(ctx,"finger_right_1_connect",text="done")
                    row = box.row()
                    row.prop(ctx,"finger_right_2",text="2")
                    row.prop(ctx,"finger_right_2_connect",text="done")
                    row = box.row()
                    row.prop(ctx,"finger_right_3",text="3")
                    row.prop(ctx,"finger_right_3_connect",text="done")
                    row = box.row()
                    row.prop(ctx,"finger_right_4",text="4")
                    row.prop(ctx,"finger_right_4_connect",text="done")
                    row = box.row()
                    row.prop(ctx,"finger_right_5",text="5")
                    row.prop(ctx,"finger_right_5_connect",text="done")
Вот такую гуёвинку получаем:

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Звук-Анимация, Анимация-Звук
« Ответ #87 : 18 Ноябрь 2016, 06:56:24 »
... заморачиваться на коде интерфейса пользователя преждевременно ...
... мне сейчас невидна вся оснастка, только некоторые её фрагменты ...

... вот например такой фрагмент - представление ноток в nla элементов инструмента ...
... допустим что есть связь (пряма или опосредованная) между "ноткой" и действием инструмента, при этом у инструмента прописаны все действия в виде "базовых" треков (на картинке это нижние треки 1 с невыделенными лентами note055, note067) ...
... у базовых треков отключено влияние на канал, они служат только для хранения ленты, которая копируется в рабочие треки note055_gen , note067_gen ...
... таким образом нужно скопировать и расставить в определённых местах рабочих треков действия из базовых треков ...
... на мой взгляд это удобно и контролируемо ...

Для Кота

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #88 : 18 Ноябрь 2016, 17:16:43 »
... заморачиваться на коде интерфейса пользователя преждевременно ...
... мне сейчас невидна вся оснастка, только некоторые её фрагменты ...

... вот например такой фрагмент - представление ноток в nla элементов инструмента ...
... допустим что есть связь (пряма или опосредованная) между "ноткой" и действием инструмента, при этом у инструмента прописаны все действия в виде "базовых" треков (на картинке это нижние треки 1 с невыделенными лентами note055, note067) ...
... у базовых треков отключено влияние на канал, они служат только для хранения ленты, которая копируется в рабочие треки note055_gen , note067_gen ...
... таким образом нужно скопировать и расставить в определённых местах рабочих треков действия из базовых треков ...
... на мой взгляд это удобно и контролируемо ...
Я не заморачиваюсь на коде интерфейса - это касается того, что ты называешь юзабельностью. Развивая какую-то идею я сразу хочу видеть, насколько это будет удобно.
Но, возможно, очень даже хорошо, что у нас с тобой разные взгляды на решение одной и той же задачи. Как ты сказал: "Мы никуда не торопимся".
Мне не хочется преждевременно лезть во все эти nla, dope sheet и graph, поэтому я попытаюсь развить то, что вчера тут накалякал. Сейчас я попробую создать трёхмерный трек для того, чтобы гуёвина показывала параметры той ноты, которую я выделю в треке прямо во вьюпорте.
Возвращаясь к ксилофону. Допустим, у нас есть возможность выбрать создание анимации автоматически. Во вьюпорте появится трек. На нём будет видно всё: какая рука по какой ноте стучит. Если видна ошибка, то выбираем ноту, на которой автомат споткнулся, корректируем. После коррекции, или в случае, если автомат распределил всё правильно, выбираем объекты, которые будем анимировать, жмём кнопку "Анимировать".

Оффлайн LanuHum

  • Житель
Re: Звук-Анимация, Анимация-Звук
« Ответ #89 : 19 Ноябрь 2016, 17:54:49 »
А, на форуме воцарилась тишина. Снег гребут. Мозоли, небось, уже по телу пошли.

Не могу решить, что лучше: использовать pyQt, pycairo или сломать голову об рисование картинки по пикселям, не обращаясь к внешним модулям.
(и, какая мля учила эту программу ошибки в постах искать? Подчёркивает то, что не подчёркиваемо: пиксели, пикселям - это правильное написание на русском языке!!!)
Цель такова: после импорта файла в фоне вьпорта появляется картинка, наподобие этой:


 


Яметрика

* По форуму

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

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

1 (1).png
Скачано: 68
Автор: LEXA ANЭGROWND
blender.png
Скачано: 78
Автор: ipv2007
4.png
Скачано: 100
Автор: hiroyukiss
2.png
Скачано: 122
Автор: hiroyukiss

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