3d форум по Blender

Blender => Другое => Дополнения, скрипты => Тема начата: LanuHum от 21 Октябрь 2016, 16:41:41

Название: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 21 Октябрь 2016, 16:41:41
Кстати, совсем забыл. Если кто-то захочет написать музыку и создать анимацию какого-нибудь сказочного ансамбля, исполняющего эту музыку, то ни фотошоп, ни кубэйс вам не помогут так успешно как ЛММС, ибо эта прога сохраняет композицию в обычный текстовой файл xml, который очень удобно парсить питоном и связывать с костями, ключами вершин и прочими инструментами Блендера создавая полную синхронизацию телодвижений с музыкой  :)
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: Samovar от 21 Октябрь 2016, 22:52:58
Скачал LMMS, потыкал. Прикольная халявная штука. Принцип аналогичен (Fruty Loops) FL Studio.
https://youtu.be/PI43L1Gp9uw
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 22 Октябрь 2016, 00:11:57
Скачал LMMS, потыкал. Прикольная халявная штука. Принцип аналогичен (Fruty Loops) FL Studio.
https://youtu.be/PI43L1Gp9uw
В описании ЛММС так и говорится, что аналог Fruty Loops, но, это, наверное правильно, только  для лиц непосвящённых в азы программирования и в принципы создания программ для Линукса. В Линуксе, обычное правило - одна программа для одной операции (для одного действия). В Линуксе всё обстоит несколько иначе, чем в платных программах для винды. Я увидел стёб сразу, но объяснить это трудно. Когда-то я знал винду, но понятия не имел, как там объединять программы. В Линуксе всё очевидно. Примитивную LMMS можно через коннектор соединить с другой программой, расширяющей возможности, ту в свою очередь можно соединить с третьей и так далее добившись того, что виндовый cakewalk sonar окажется примитивной игрушкой в руках композитора. Интерфейс ЛММС, действительно, удручает пользователя крякнутыми виндовыми прогами, но, нужно помнить, что эта прога лишь для написания треков, которые в последствии без проблем можно вывести для сведения звука в семидорожечную запись для домашнего кинотеатра, используя уже совсем другую программу.
Да, когда мне говорили о реалтайме, об использовании линукса для обработки сигнала между гитарой и усилителем, то, возможно, что у Линукса нет для этого достойных средств, но, когда идёт всё в фоновом режиме, то, с уверенностью могу сказать, что винде нужно отдохнуть.
Когда я в cakewalk sonar жму клавишу, то я ухом слышу, что отклик запаздывает. Для победы этого там придумали драйвер ASIO. В линуксе этого ничего не требуется - отклик мгновенный. Об этом даже есть статьи в интернете: почему в линуксе звук лучше. Погуглите...
Кроме этого могу сказать, что в Линуксе можно сделать так, что музыку для анимации можно будет писать в самом Блендере, прямо во вьюпорте, используя для этого соответствующий аддон, а вот использовать этот же аддон в винде окажется просто невозможным. Вот такая уж ваша халявная винда. Реально, в 249 был аддон соединяющий Ardour с Блендером. Напишите аддон соединяющий Блендер с cakewalk sonar или ACID PRO...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: Samovar от 22 Октябрь 2016, 02:18:51
Как и много раз до этого, упомяну ещё раз, что основная проблема не в крутом и навороченном ПО для Win, Mac или в доступном под Lin, а в другом...
https://youtu.be/2PVUlouy0tM
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: Samovar от 22 Октябрь 2016, 02:35:53
 ;D ;) :)
https://youtu.be/N4BYdMOrwbc
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 22 Октябрь 2016, 02:43:00
Как и много раз до этого, упомяну ещё раз, что основная проблема не в крутом и навороченном ПО для Win, Mac или в доступном под Lin, а в другом...
https://youtu.be/2PVUlouy0tM
Я первую проблему вижу в следующем. У нас сайт про Блендер. У Блендера есть PythonAPI, позволяющий расширять возможности Блендера. Вот про это мало кто хочет говорить. Я говорю, что возможности Блендера можно расширить используя программы, написанные как и сам Блендер с открытым исходным кодом, используя PythonAPI. То бишь, я стараюсь не уходить от темы. Мне очень странно читать, что люди используют Блендер, но категорически отказываются от программного обеспечения, способствующего развитию этого самого Блендера. Если такое отвращение к свободно распространяемому программному обеспечению, то почему тогда используют сам Блендер? Майя всё равно ведь лучше, как тут жопой не крути. Я юзал эту прогу, и знаю, что Блендеру до неё очень далеко. Там назначишь кучу волос, и она считает, а Блендеру назначишь кучу волос, он херак и улетел в небытие. Скин применил в Блендере - жди беды, если тысячи эджей. Я ни разу не смог майку заставить зависнуть, что бы я там с ней не вытворял. 3D-max - легко повесить, прожорливая тварь. Блендер повесить как два пальца об асфальт.
Но, про анимацию ансамбля я серьёзно сказал. Если кто-то захочет синхронное поведение персов относительно музыки, то ЛММС он расцелует, расцелует либу Cairo, а ни Fruty Loops и Corel Draw...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 22 Октябрь 2016, 05:30:16
>> Если кто-то захочет синхронное поведение персов относительно музыки, то ЛММС он расцелует, расцелует либу Cairo, а ни Fruty Loops и Corel Draw...
... Леонид, было бы не плохо устроить целовальню на конкретном примере, сможешь показать как это делать? ...
... на текущий момент можно делать без парсинга - https://www.blender.org/manual/ru/editors/graph_editor/fcurves/editing.html#bake-sound-to-f-curves  , то есть хотелось бы понять в чем преимущество разбора ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 22 Октябрь 2016, 08:12:42
... у меня есть предложение провести совместное исследование и оформить статью на тему "какделать: звук в анимацию" на вики нашего форума ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 22 Октябрь 2016, 09:42:57
>> Если кто-то захочет синхронное поведение персов относительно музыки, то ЛММС он расцелует, расцелует либу Cairo, а ни Fruty Loops и Corel Draw...
... Леонид, было бы не плохо устроить целовальню на конкретном примере, сможешь показать как это делать? ...
... на текущий момент можно делать без парсинга - https://www.blender.org/manual/ru/editors/graph_editor/fcurves/editing.html#bake-sound-to-f-curves  , то есть хотелось бы понять в чем преимущество разбора ...

Когда мы делали мультик, я зачем-то разбирался с подобным аддоном про fcurve и sound. Анализировать звук для получения ключевых кадров намного сложней, чем получить сами ключевые кадры из текста. Это больше пригодно для цветомузыки.
Вот фрагмент файла ЛММС:
Код
        <pattern steps="16" muted="0" type="1" name="TripleOscillator" pos="0" len="960">
          <note pan="0" key="65" vol="100" pos="12" len="48"/>
          <note pan="0" key="54" vol="100" pos="108" len="48"/>
          <note pan="0" key="50" vol="100" pos="252" len="48"/>
          <note pan="0" key="58" vol="100" pos="324" len="48"/>
          <note pan="0" key="65" vol="100" pos="528" len="48"/>
          <note pan="0" key="57" vol="100" pos="576" len="48"/>
          <note pan="0" key="62" vol="100" pos="648" len="48"/>
          <note pan="0" key="58" vol="100" pos="780" len="48"/>
          <note pan="0" key="63" vol="100" pos="828" len="48"/>
          <note pan="0" key="56" vol="100" pos="900" len="48"/>
        </pattern>
Здесь чётко видно, какую ноту жмёт перс, в какой позиции таймлайна и какой продолжительности нота. По-моему, даже без питона этой информацией можно эффективно воспользоваться, создавая ключи анимации вручную. Ты согласен?
Если партия ударных, то, особенно проблемно будет использовать анализатор. Там может быть два десятка инструментов, которые анализатор загонит в одну fcurve, или придётся для каждого барабана писать отдельную дорожку.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 22 Октябрь 2016, 10:54:08
А, если вот такая партия на пианино?
https://www.youtube.com/watch?v=FLYMfF8kkL0
Чем нам поможет https://www.blender.org/manual/ru/editors/graph_editor/fcurves/editing.html#bake-sound-to-f-curves?
Здесь мало получить безошибочно все ключи, здесь ещё и кривые пути для рук нужно создать...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 22 Октябрь 2016, 11:05:53
... у тебя есть интересный но не очень длинный пример, который можно разобрать? ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 22 Октябрь 2016, 11:42:22
>> Вот фрагмент файла ЛММС:
... как получить такой код? ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 22 Октябрь 2016, 12:44:22
>> Вот фрагмент файла ЛММС:
... как получить такой код? ...
Элементарно, Ватсон. Это файл проекта. Пишешь музыку, сохраняешь проект. Там есть два варианта сохранить как mmpz - сжатый, и mmp - обычный xml
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 22 Октябрь 2016, 14:26:24
Когда я писал сообщение,  sungreen был онлайн.
Прочитал мой пост, открыл ЛММС, разобрался и вышел из онлайн ;D
Подозрение на то, что он сейчас звонит автодеску...
Невольно вспомнился то ли Ошо, то ли Гурджиев...
"Люди узнали правду, но на Земле у нас есть свои агенты - священники..."
 ;D ;D ;D
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 22 Октябрь 2016, 14:40:53
... на самом деле после того как получил mmp, открыл его в geany и пошел искать/читать описание формата ...
... у тебя есть готовый/полуготовый код парсера? ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 22 Октябрь 2016, 15:20:03
... на самом деле после того как получил mmp, открыл его в geany и пошел искать/читать описание формата ...
... у тебя есть готовый/полуготовый код парсера? ...
Николай, спонтанность - это то, что отличает людей от нелюдей. Очень много идей у меня рождается спонтанно. Я - человек.
Когда-то я обращался на форум питон-программистов, мне там сказали, что для парсинга xml  есть модуль, и, мои идеи - правило дурного тона. Типа: ни один уважающий себя питонопрограммист не позволит себе того, что позволяю себе Я. Тогда я забросил идею. Из глаз слёзы, из ноздрей сопли....
Но, ты парень не промах - тебе давай вот прямо здесь и сейчас. Прямо здесь и сейчас у меня нет . Есть где-то на внешнем накопителе...
Но, ты говорил о совместном эксперименте...
instruments = []
parse = False
for line in open("lmms.mmp"):
    for word in line:
        if word.startswith("name")
            name = word[5:]
            name = name[:(len(name)-1)]
            instruments.append(name)
            parse = True
            continue
        if parse:
            нагружаем блендер согласно API
   
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 22 Октябрь 2016, 15:48:58
... в принципе вот xml прасер, то есть теперь нужно по смыслу пройтись ...

import xml.etree.ElementTree as ET
tree = ET.parse('hardstyle-01.mmp')
root = tree.getroot()

print(root.tag)

for child in root:
    print(":",child.tag,child.attrib)
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 22 Октябрь 2016, 16:15:08
кстати, один из наших форумчан, один:
https://www.youtube.com/watch?v=AEg9DxWR2Us&list=PLdlM1p-xIQqIouKoQr7M1JmCLCbSDJlU3&index=2
думаю это узнаваемо:
https://gaming.youtube.com/watch?v=Fk04pbVC76M&list=PLdlM1p-xIQqIouKoQr7M1JmCLCbSDJlU3
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 22 Октябрь 2016, 16:45:17
... в принципе вот xml прасер, то есть теперь нужно по смыслу пройтись ...

import xml.etree.ElementTree as ET
tree = ET.parse('hardstyle-01.mmp')
root = tree.getroot()
print(root.tag)

for child in root:
    print(":",child.tag,child.attrib)

Моя проблема в том, что в текстовом файле мне не хочется видеть его формат.
Для меня главное, увидеть ключи, и мне похер, как я эти ключи вытащу из файла: буду я использовать соответствующий модуль, или пошлю всех нахер...
Парсинг xml, может, и крут, но он не может предвидеть все мотивации, которые рулят программистом...
Поэтому лучше взять строку, разделить её string.split()  и извлечь нужное не взирая на формат. Пофиг xml, главное текст...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 22 Октябрь 2016, 17:16:49
... у меня достаточно серьёзный настрой чтобы делать реверсинжиниринг "механического пианино" в blender ...
... у тебя будет код для этого или мне пользовать что есть? ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: Samovar от 22 Октябрь 2016, 17:18:33
Цитировать
Если кто-то захочет синхронное поведение персов относительно музыки, то ЛММС он расцелует, расцелует либу Cairo, а ни Fruty Loops и Corel Draw...
LMMS, ведь кушает .flp файлы FL Studio...  так что можно относительно просто конвертировать в .xml
FL Studio богаче в инструментарии, и там больше синтезаторов и эффектов... правда и цена у ней  от $99 до $737 в зависимости от комплектации...но радует прогресс LMMS.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 22 Октябрь 2016, 18:00:17
... у меня достаточно серьёзный настрой чтобы делать реверсинжиниринг "механического пианино" в blender ...
... у тебя будет код для этого или мне пользовать что есть? ...

Как пела Шапокляк?
-Кто людям помогает
-Тот тратит время зря
-Хорошими делами
-Прославиться нельзя
-Поэтому, я всем и каждому советую
-Всё делать только так
-Как делает старуха
-По кличке Шапокляк.
-Как делает старуха
-По кличке Шапокляк.
-Как делает старуха
-По кличке Шапокляк.

Цитировать
FL Studio богаче в инструментарии, и там больше синтезаторов и эффектов... правда и цена у ней  от $99 до $737 в зависимости от комплектации...но радует прогресс LMMS.
Не буду утверждать, но, есть подозрение, что весь инструментарий у FL Studio есть благодаря румынскому программисту Полю Наска. Нет ничего сложного скоммуниздить у ZynAddSubFX несколько десятков звуков и объявить их достоянием республики пиндосов.
Но, ZynAddSubFX может генерировать тысячи тысяч звуков, и, его код свободен и впилен в ЛММС...
Я тестировал проприетарные миди-секвенсоры: четыре ноты бесплатно, пятая в подарок...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: Samovar от 22 Октябрь 2016, 18:16:16
Цитировать
Я тестировал проприетарные миди-секвенсоры: четыре ноты бесплатно, пятая в подарок...
Не спорю, потому и пишу, что LMMS порадовал.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 22 Октябрь 2016, 18:37:02
Цитировать
Я тестировал проприетарные миди-секвенсоры: четыре ноты бесплатно, пятая в подарок...
Не спорю, потому и пишу, что LMMS порадовал.
Честное слово, я рад за тебя. У меня есть много чего сказать о краже, но ограничусь нелюбимым тобой текстом:
Код
Кое-где существуют ещё народы и стада, но не у нас, братья мои; у нас есть государства.

Государство? Что это такое? Итак, слушайте меня, ибо теперь я скажу вам своё слово о смерти народов.

Государством называется самое холодное из всех холодных чудовищ. Холодно лжёт оно; и эта ложь ползёт из уст его: «Я, государство, есмь народ».

Это - ложь! Созидателями были те, кто создали народы и дали им веру и любовь; так служили они жизни.

Разрушители - это те, кто ставит ловушки для многих и называет их государством: они навесили им меч и навязали им сотни желаний.

Где ещё существует народ, не понимает он государства и ненавидит его, как дурной глаз и нарушение обычаев и прав.

Это знамение даю я вам: каждый народ говорит на своём языке о добре и зле - этого языка не понимает сосед. Свой язык обрёл он себе в обычаях и правах.

Но государство лжёт на всех языках о добре и зле: и что оно говорит, оно лжёт - и что есть у него, оно украло.

Всё в нём поддельно: крадеными зубами кусает оно, зубастое. Поддельна даже утроба его.

Смешение языков в добре и зле: это знамение даю я вам как знамение государства. Поистине, волю к смерти означает это знамение! Поистине, оно подмигивает проповедникам смерти!

Рождается слишком много людей: для лишних изобретено государство!

Смотрите, как оно их привлекает к себе, это многое множество! Как оно их душит, жуёт и пережевывает!

«На земле нет ничего больше меня: я упорядочивающий перст Божий» - так рычит чудовище. И не только длинноухие и близорукие опускаются на колени!

Ах, даже вам, великие души, нашёптывает оно свою мрачную ложь! Ах, оно угадывает богатые сердца, охотно себя расточающие!

Да, даже вас угадывает оно, вы, победители старого Бога! Вы устали в борьбе, и теперь ваша усталость служит новому кумиру!

Героев и честных людей хотел бы он уставить вокруг себя, новый кумир! Оно любит греться в солнечном сиянии чистой совести, - холодное чудовище!

Всё готов дать вам, если вы поклонитесь ему, новый кумир: так покупает он себе блеск вашей добродетели и взор ваших гордых очей.

Приманить хочет он вас, вы, многое множество! И вот изобретена была адская штука, конь смерти, бряцающий сбруей божеских почестей!

Да, изобретена была смерть для многих, но она прославляет самое себя как жизнь: поистине, сердечная услуга всем проповедникам смерти!

Государством зову я, где все вместе пьют яд, хорошие и дурные; государством, где все теряют самих себя, хорошие и дурные; государством, где медленное самоубийство всех - называется - «жизнь».

Посмотрите же на этих лишних людей! Они крадут произведения изобретателей и сокровища мудрецов: культурой называют они свою кражу - и всё обращается у них в болезнь и беду!

Посмотрите же на этих лишних людей! Они всегда больны, они выблёвывают свою желчь и называют это газетой. Они проглатывают друг друга и никогда не могут переварить себя.

Посмотрите же на этих лишних людей! Богатства приобретают они и делаются от этого беднее. Власти хотят они, и прежде всего рычага власти, много денег, - эти немощные!

Посмотрите, как лезут они, эти проворные обезьяны! Они лезут друг на друга и потому срываются в грязь и в пропасть.

Все они хотят достичь трона: безумие их в том - будто счастье восседало бы на троне! Часто грязь восседает на троне - а часто и трон на грязи.

По-моему, все они безумцы, карабкающиеся обезьяны и находящиеся в бреду. По-моему, дурным запахом несёт от их кумира, холодного чудовища; по-моему, дурным запахом несёт от всех этих служителей кумира.

Братья мои, разве хотите вы задохнуться в чаду их пастей и вожделений! Скорее разбейте окна и прыгайте вон!

Избегайте же дурного запаха! Сторонитесь идолопоклонства лишних людей!

Избегайте же дурного запаха! Сторонитесь дыма этих человеческих жертв!

Свободною стоит для великих душ и теперь ещё земля. Свободных много ещё мест для одиноких и для тех, кто одиночествует вдвоём, где веет благоухание тихих морей.

Ещё свободной стоит для великих душ свободная жизнь. Поистине, кто обладает малым, тот будет тем меньше обладаем: хвала малой бедности!

Там, где кончается государство, и начинается человек, не являющийся лишним: там начинается песнь необходимых, мелодия, единожды существующая и невозвратная.

Туда, где кончается государство, - туда смотрите, братья мои! Разве вы не видите радугу и мосты, ведущие к сверхчеловеку? -

Так говорил Заратустра.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: Samovar от 22 Октябрь 2016, 19:28:54
Цитировать
... у меня достаточно серьёзный настрой чтобы делать реверсинжиниринг "механического пианино" в blender ...
... у тебя будет код для этого или мне пользовать что есть? ...
Жаль, что LMMS не умеет экспортировать в формат MIDI
Нашёлся импортёр для 2.4x MIDI файлов http://jb.perin.pagesperso-orange.fr/midi_importer/doc/midi_importer.html
Халява: http://midifile.ru
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 22 Октябрь 2016, 19:58:41
Цитировать
... у меня достаточно серьёзный настрой чтобы делать реверсинжиниринг "механического пианино" в blender ...
... у тебя будет код для этого или мне пользовать что есть? ...
Жаль, что LMMS не умеет экспортировать в формат MIDI
Нашёлся импортёр для 2.4x MIDI файлов http://jb.perin.pagesperso-orange.fr/midi_importer/doc/midi_importer.html
Халява: http://midifile.ru
Я объяснял, что в линуксе программа может чего-то не уметь, но можно подключать другие программы. Если к ЛММС подключить Rosegarden, то партию можно будет сохранить и в миди файл:
Идёшь в меню File и выбираешь экспорт в миди:
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: Samovar от 22 Октябрь 2016, 20:05:55
Цитировать
Я объяснял, что в линуксе программа может чего-то не уметь, но можно подключать другие программы. Если к ЛММС подключить Rosegarden, то партию можно будет сохранить и в миди файл:
Идёшь в меню File и выбираешь экспорт в миди:
Великолепно! Осталось дело за малым: написать вменяемое дополнение импорта MIDI в текущую версию Блендер с вменяемым интерфейсом, и желательно прослушиванием всего файла и каналов инструментов, которые задействованы... :)
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: Samovar от 22 Октябрь 2016, 20:23:19


Цитировать
... у меня есть предложение провести совместное исследование и оформить статью на тему "какделать: звук в анимацию" на вики нашего форума ...
Вот для начала:
Нашёлся импортёр для 2.4x MIDI файлов http://jb.perin.pagesperso-orange.fr/midi_importer/doc/midi_importer.html
Халява: http://midifile.ru
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 22 Октябрь 2016, 21:05:37
Цитировать
Я объяснял, что в линуксе программа может чего-то не уметь, но можно подключать другие программы. Если к ЛММС подключить Rosegarden, то партию можно будет сохранить и в миди файл:
Идёшь в меню File и выбираешь экспорт в миди:
Великолепно! Осталось дело за малым: написать вменяемое дополнение импорта MIDI в текущую версию Блендер с вменяемым интерфейсом, и желательно прослушиванием всего файла и каналов инструментов, которые задействованы... :)

Ага, и от этого персы запрыгают сами по себе...
Начали за здравие - кончили за упокой.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: Samovar от 22 Октябрь 2016, 21:19:08
Цитировать
Ага, и от этого персы запрыгают сами по себе...
А они должны были сами начать скакать? :) Тот скрипт, для 2.4х просто импортирует партитуры инструментов из MIDI в отдельные IPO. А остальное - дело аниматора....
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 22 Октябрь 2016, 21:31:48
Цитировать
Ага, и от этого персы запрыгают сами по себе...
А они должны были сами начать скакать? :) Тот скрипт, для 2.4х просто импортирует партитуры инструментов из MIDI в отдельные IPO. А остальное - дело аниматора....
А кто сказал, что речь идёт о ТОМ СКРИПТЕ?
Речь идет об анимации персов синхронно с музыкой, если чо...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: Samovar от 22 Октябрь 2016, 21:34:46
Цитировать
Речь идет об анимации персов синхронно с музыкой, если чо...
если чо, то, то о чем ты пишешь, уже из раздела ИИ (частицы и поведение стаи)... а текущая версия Блендера даже MIDI не может конвертировать в кривые анимации.. :)
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 23 Октябрь 2016, 06:06:49
... на сколько теперь стало понятным подбирается несколько вариантов "звук в анимацию" ...
... думаю что прокачать связку lmms + blender на уровне обработки файлов mmp в python будет достаточно интересным ...
... проблемы с получение и разборов треков нет, но вопрос что и с чем должно связаться при анимации остаётся открытым ...
... более того нужен контейнер в модели blender куда складывать f-curve ...
... есть предложения? ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: Samovar от 23 Октябрь 2016, 07:00:22
Цитировать
... есть предложения? ...
Было предложение хернёй не страдать только с LMMS.  И если всерьёз берётесь, то лучше сделайте дополнение как импортёр MIDI в кривые анимации... многие вам спасибо скажут... а может, и деньгой подсобят :)
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 23 Октябрь 2016, 07:27:15
с midi более менее понятно и на самом деле реализуемо без дополнительных дополнений. Все треки midi файла конвертируются в отдельные wav файлы одной строкой в консоле. Об этом спрашивал на ЛОРе и там дали годный код http://www.linux.org.ru/forum/multimedia/12722602 , который легко затачивается для мирных целей. Далее wav файлы запекаются в f-curve стандартными средствами blender, об этом мы уже говорили в этой теме.

Вариант с парсером mmp меня заинтриговал и мне уже удалось получить доступ к трекам в python. Это весьма занятная тема.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: Samovar от 23 Октябрь 2016, 07:31:39
с midi более менее понятно и на самом деле реализуемо без дополнительных дополнений. Все треки midi файла конвертируются в отдельные wav файлы одной строкой в консоле. Об этом спрашивал на ЛОРе и там дали годный код http://www.linux.org.ru/forum/multimedia/12722602 , который легко затачивается для мирных целей. Далее wav файлы запекаются в f-curve стандартными средствами blender, об этом мы уже говорили в этой теме.

Вариант с парсером mmp меня заинтриговал и мне уже удалось получить доступ к трекам в python. Это весьма занятная тема.
Тогда таким же образом инструменты по отдельности можно экспортировать  в .ogg или .wav из LMMS (Экспортировать дорожки) или другого аудиоредактора... нахрена тогда писать дополнение вообще?
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 23 Октябрь 2016, 07:55:04
... экспортер Jean-Baptiste PERIN парсит midi файл и делает on|off - анимацию, и твой совет по адаптации его к новой версии blender не остался не замеченным, попробуем его вытащить ... 
... суть - получить последовательность действий - нажатие клавиш и прочего ...
... поэтому собираем дальше полезную информацию ...
... спасибо ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: Samovar от 23 Октябрь 2016, 09:28:37
Цитировать
... экспортер Jean-Baptiste PERIN парсит midi файл и делает on|off - анимацию, и твой совет по адаптации его к новой версии blender не остался не замеченным, попробуем его вытащить ... 
Рад, что был услышан... Успехов! :)
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 23 Октябрь 2016, 10:49:40
... экспортер Jean-Baptiste PERIN парсит midi файл и делает on|off - анимацию, и твой совет по адаптации его к новой версии blender не остался не замеченным, попробуем его вытащить ... 
... суть - получить последовательность действий - нажатие клавиш и прочего ...
... поэтому собираем дальше полезную информацию ...
... спасибо ...
Вот это можно приспособить к созданию ключей вершин на пианино. Но, по-моему нужен универсальный код для любого инструмента: анимировать какие-то параметры и прикручивать к нужному драйверами.
Код
import bpy
scene = bpy.context.scene
instrument = None
parse = False
bpy.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]
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 23 Октябрь 2016, 14:18:51
Не проверял, работает ли, но идея такая: создавать объекты по числу клавиш и передавать им ключи анимации. Таким образом мы будем иметь универсальную базу данных из которой уже каждый может брать инфу для созданных для сцены инструментов. Думаю 108 полигонов на инструмент - это немного.

Код
import bpy
scene = bpy.context.scene
instrument = None
parse = False
layers = 20*[False]
layers[19] = True


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]
        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
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 23 Октябрь 2016, 15:22:31
Немного подправил, работает.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 23 Октябрь 2016, 17:06:54
sungreen, ты не зАпил?
Вот рабочая версия:
Код
import bpy
scene = bpy.context.scene
instrument = None
parse = False
layers = 20*[False]
layers[0] = True


for 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
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 23 Октябрь 2016, 21:22:34
Я так понял, интерес пропал у Николая...
Стало быть, голову ломать дальше не стОит. Отдохнём.  :)
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 23 Октябрь 2016, 21:26:18
... пока не вижу надлежащего контейнера в который складывать ...
... надо подумать над юзабельностью ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: Samovar от 23 Октябрь 2016, 22:25:01
Господа-товарищи, Ланухумыч и Сангриныч. Можете вкратце описать для публики функциональные возможности по пунктам того дополнения, которое  вы планируете? Очень интересно врубиться. Спасибо!
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 23 Октябрь 2016, 22:27:02
... пока не вижу надлежащего контейнера в который складывать ...
... надо подумать над юзабельностью ...
А какой контейнер ты хочешь увидеть? Использовать информацию полученную из ммр можно использовать как только душе угодно. Кому-то захочется просто клавиши анимировать, кому-то арматуру. Мы не можем предугадать, поэтому драйверы - единственное универсальное решение. Наш импорт будет полезен тому, у кого уже есть идея и замоделена сцена. Юзер выбирает свой объект анимации и связывает нужный ему параметр анимации драйвером с анимированным параметром импортированного объекта... Это можно будет сделать  либо питоном, либо вручную. Можно приделать кое-какие крутилки, чтобы можно было выбирать ни в аутлайнере, ни во вьюпорте, а в  панели инструментов в каком-нибудь EnumProperty...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 23 Октябрь 2016, 22:36:42
Господа-товарищи, Ланухумыч и Сангриныч. Можете вкратце описать для публики функциональные возможности по пунктам того дополнения, которое  вы планируете? Очень интересно врубиться. Спасибо!
Самый простой вариант: перс играет на ксилофоне и юзер желает, чтобы это было правдоподобно. Мы пытаемся облегчить юзеру исполнение поставленной задачи вплоть до полной автоматизации процесса. Извлечённые из файла данные могут позволить автоматом располагать предплечье над нужной плиткой и наносить удар по ней.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: Samovar от 23 Октябрь 2016, 22:44:53
Господа-товарищи, Ланухумыч и Сангриныч. Можете вкратце описать для публики функциональные возможности по пунктам того дополнения, которое  вы планируете? Очень интересно врубиться. Спасибо!
Самый простой вариант: перс играет на ксилофоне и юзер желает, чтобы это было правдоподобно. Мы пытаемся облегчить юзеру исполнение поставленной задачи вплоть до полной автоматизации процесса. Извлечённые из файла данные могут позволить автоматом располагать предплечье над нужной плиткой и наносить удар по ней.
Ты шутишь? :) Нет? :o
Тогда напомню, что "в каждой большой задаче сидит маленькая, пытающаяся вырваться наружу" (какой-то отечественный программёр так сказал)... можешь по функциям планируемое более детально разбить?
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 23 Октябрь 2016, 22:48:54
Господа-товарищи, Ланухумыч и Сангриныч. Можете вкратце описать для публики функциональные возможности по пунктам того дополнения, которое  вы планируете? Очень интересно врубиться. Спасибо!
Самый простой вариант: перс играет на ксилофоне и юзер желает, чтобы это было правдоподобно. Мы пытаемся облегчить юзеру исполнение поставленной задачи вплоть до полной автоматизации процесса. Извлечённые из файла данные могут позволить автоматом располагать предплечье над нужной плиткой и наносить удар по ней.
Ты шутишь? :) Нет? :o
Тогда напомню, что "в каждой большой задаче сидит маленькая, пытающаяся вырваться наружу" (какой-то отечественный программёр так сказал)... можешь по функциям планируемое более детально разбить?
Я не шучу. И, уже много сказал, вернее, написал код для реализации задумки. Читай код.
Тут тебе ни здесь, и, не хухры-мухры. :)
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: Samovar от 23 Октябрь 2016, 22:58:53
Цитировать
Я не шучу. И, уже много сказал, вернее, написал код для реализации задумки. Читай код.
Тут тебе ни здесь, и, не хухры-мухры. :)
Да я вижу.... пытаюсь врубиться в суть. Возникли вопросы: Это будет универсальные риг (оснастка) и сетап персонажа (типа .BVH) или как будет реализована связь с драйверами сетапа? На уровне пользователя дополнения или вручную?
http://3dyuriki.com/2009/06/21/setap-cetapshhik-slovar/
Предлагаю сразу не строить грандиозных планов, а замутить просто импорт  инструментов в кривые, в том числе и MIDI... а дальше  потихоньку разовьёте... Уже просто за импорт в анимационные кривые вам люди скажут большое спасибо.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 24 Октябрь 2016, 17:04:31
Цитировать
Я не шучу. И, уже много сказал, вернее, написал код для реализации задумки. Читай код.
Тут тебе ни здесь, и, не хухры-мухры. :)
Да я вижу.... пытаюсь врубиться в суть. Возникли вопросы: Это будет универсальные риг (оснастка) и сетап персонажа (типа .BVH) или как будет реализована связь с драйверами сетапа? На уровне пользователя дополнения или вручную?
http://3dyuriki.com/2009/06/21/setap-cetapshhik-slovar/
Предлагаю сразу не строить грандиозных планов, а замутить просто импорт  инструментов в кривые, в том числе и MIDI... а дальше  потихоньку разовьёте... Уже просто за импорт в анимационные кривые вам люди скажут большое спасибо.
Последний исправленный код и есть импорт в анимационные кривые. Скриншот же я делал.
Мидии, устрицы и прочие морепродукты... MIDI файл - бинарник, я с бинарниками не дружу. Тем более, что, возможно, может пригодиться обратная связь, то бишь запись mmp файла в Блендере, задающего ритм композиции на основе созданных юзером ключевых кадров для дальнейшего написания композиции в ЛММС.
Сейчас главное выделить общие особенности исполнения музыки на всевозможных интстументах. Используется ли рука для держания смычка, медиатора, барабанной палочки или ещё чего-то. Или же используются пальцы для тыкания в струны, клавиши ... не буду перечислять всё, куда можно ткнуть пальцем... ;D
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 24 Октябрь 2016, 18:48:45
... чтобы тема не ушла в песок и с учётом того что уже сделано и сказано, предлагаю через две недели более плотно обсудить "хотелки", мы же никуда не спешим ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 24 Октябрь 2016, 19:06:58
... чтобы тема не ушла в песок и с учётом того что уже сделано и сказано, предлагаю через две недели более плотно обсудить "хотелки", мы же никуда не спешим ...
Согласен.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 03 Ноябрь 2016, 05:58:10
Помогите решить проблему с экспортом в wav из lmms. Во вложении тестовый файл test27.mmp При его экспорте в wav о обратном импорте в lmms дорожки имеют разную длину? Почему так?
Если после реимпорта у вас длины дорожек совпали, то выложите полученный из этого тестогово файла wav.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 03 Ноябрь 2016, 16:11:36
Помогите решить проблему с экспортом в wav из lmms. Во вложении тестовый файл test27.mmp При его экспорте в wav о обратном импорте в lmms дорожки имеют разную длину? Почему так?
Если после реимпорта у вас длины дорожек совпали, то выложите полученный из этого тестогово файла wav.
Хм. Вообще, не вижу в своей версии 1.1.3, как добавить звуковую дорожку. Помнится, в прежних версиях видел.  ???
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: mr.A от 03 Ноябрь 2016, 16:48:04
sungreen, при экспорте, попробуй включить галочку "Экспортировать как петлю(убрать тишину в конце)". Тогда вроде все ок. Файл большой - не могу прикрепить сюда.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: mr.A от 03 Ноябрь 2016, 16:51:06
LanuHum, почитай тут https://lmms.io/wiki/index.php?title=Working_with_Samples
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 03 Ноябрь 2016, 16:58:45
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 03 Ноябрь 2016, 17:34:43
LanuHum, почитай тут https://lmms.io/wiki/index.php?title=Working_with_Samples
Разобрался не читая, но, спасибо. С дуру собрал последнюю версию с github. Действительно, "Экспортировать как петлю(убрать тишину в конце)"...
 :)
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: mr.A от 03 Ноябрь 2016, 19:04:33
Кстати очень жаль, что lmms, конкретно в ubuntu 16.04, очень падучая. Чуть не туда нажал крашится. Даже просто нормально прослушать встроенные треки не дает. Иногда вообще хрипит. Альса, пульса, сдл.
Может есть какой рецепт чтоб стабильно работала? У вас она как, стабильна? Какая версия, дистибутив?
Вот бэктрейс. Просто слушал Root84-TrancyLoop.mmpz, ничего не трогал, через минуту крашнулось.
Код
(gdb) run
Starting program: /usr/bin/lmms
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffe59f1700 (LWP 7744)]
[New Thread 0x7fffe51f0700 (LWP 7745)]
[New Thread 0x7fffe49ef700 (LWP 7746)]
Notice: could not set realtime priority.
[New Thread 0x7fffcca66700 (LWP 7747)]
VST sync support disabled in your configuration
[New Thread 0x7fffb4a51700 (LWP 7748)]
[New Thread 0x7fffabffe700 (LWP 7749)]
[New Thread 0x7fffab28d700 (LWP 7752)]
[New Thread 0x7fffaaa8c700 (LWP 7753)]

Thread 8 "QThread" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffab28d700 (LWP 7752)]
__memset_sse2 () at ../sysdeps/x86_64/multiarch/../memset.S:78
78 ../sysdeps/x86_64/multiarch/../memset.S: Нет такого файла или каталога.
(gdb) bt
#0  __memset_sse2 () at ../sysdeps/x86_64/multiarch/../memset.S:78
#1  0x0000000000556b15 in FxMixer::masterMix(float (*) [2]) ()
#2  0x0000000000594f72 in Mixer::renderNextBuffer() ()
#3  0x0000000000595214 in Mixer::fifoWriter::run() ()
#4  0x00007ffff6807e3c in ?? () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#5  0x00007ffff7bc170a in start_thread (arg=0x7fffab28d700) at pthread_create.c:333
#6  0x00007ffff432282d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:109
(gdb) quit

Ну, видно что "memset.S: Нет такого файла или каталога".   Собрать транк с гитхаба? Может мейтейнет накосячил, просто пересобрать?
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 03 Ноябрь 2016, 19:27:43
Кстати очень жаль, что lmms, конкретно в ubuntu 16.04, очень падучая. Чуть не туда нажал крашится. Даже просто нормально прослушать встроенные треки не дает. Иногда вообще хрипит. Альса, пульса, сдл.
Может есть какой рецепт чтоб стабильно работала? У вас она как, стабильна? Какая версия, дистибутив?
Вот бэктрейс. Просто слушал Root84-TrancyLoop.mmpz, ничего не трогал, через минуту крашнулось.
Ну, видно что "memset.S: Нет такого файла или каталога".   Собрать транк с гитхаба? Может мейтейнет накосячил, просто пересобрать?
Послушал несколько раз Root84-TrancyLoop.mmpz в транке с гитхаба. Для пущей уверенности установил оффициальную версию 1.1.3, ещё несколько раз послушал Root84-TrancyLoop.mmpz. Никаких проблем. Никаких проблем и с другими демками. В настройках звука SDL, в настройках миди ALSA. Дистрибутив ROSA Fresh 8.
Но, и в других мандривоподобных дистрибтивах проблемы с LMMS наблюдались только при переходе с версии 0.3х на 0.4 b  и при переходе на пульс. Но там в настройках и писалось: pulseaudio: bad latency
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: mr.A от 03 Ноябрь 2016, 20:00:59
Хм, интересно. Значит убунтовцы как всегда...
Надо попробовать в лайф режиме Росы загрузиться. А почему ты с Мигеи ушел?
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 03 Ноябрь 2016, 20:16:39
Хм, интересно. Значит убунтовцы как всегда...
Надо попробовать в лайф режиме Росы загрузиться. А почему ты с Мигеи ушел?
Да, там ,просто,косяк с nvidia-драйвером. Система обновляется, ставит ядро 4.4, и после начинает долго грузиться. Так грузится несколько секунд, а после обновления несколько минут. Меня это вымораживало, и, я систему снёс. У росы для моей GTX-440  припасён отдельный драйвер 361.42, а у Магеи его нет, и из-за этого сыр-бор. Про секунды я не вру, ибо у меня SSD - это, просто чудо для установки на него ОС.
Зато у росы с часами затык. Там московское время не нашёл как установить. Часы выкинул, как дзенствующий, а, когда надо, то время в интенете смотрю. Магея хорошая, и Роса хорошая...но, как видишь, не без изъянов. Зато ЛММС работает исправно... :)
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: mr.A от 03 Ноябрь 2016, 20:42:19
Магея 6 однако не скоро будет. Что-то тянут долго. Если будет вообще.
Я Росу пробовал, на пятых кедах. Что-то там не понравилось мне. Не вспомню никак. 
Моя рабочая лошадка это Манжаро. Который от арча отличается задержкой обновления до пару недель, а значит более стабильный чем он. Если в арче сразу косяки с обновлением можно получить, то в Манжаро это исправляют(или ждут когда арчеводы исправят), а потом обновляют репы.
Поставил убунту 16,04 на попробовать  думал тут все хорошо и стабильно, ан нет.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 03 Ноябрь 2016, 21:04:56
... может есть у кого "справка" о том как из файла формата mmp вытянуть время трека? в милли/микро/секундах-с ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 03 Ноябрь 2016, 22:31:16
... может есть у кого "справка" о том как из файла формата mmp вытянуть время трека? в милли/микро/секундах-с ...
Очень интересный вопрос. :)
Audacity показывает продолжительность звука 46.288, а темп в ЛММС у нас 140 и продолжительность трека 5184...
140 - это 140 ударов в минуту
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: mr.A от 04 Ноябрь 2016, 00:03:54
Поставил ROSA mate. Все равно брякается lmms.
Код
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffb63a7700 (LWP 14077)]
0x000000000050d712 in AutomatableModel::controllerValue(int) const ()
(gdb) bt
#0  0x000000000050d712 in AutomatableModel::controllerValue(int) const ()
#1  0x0000000000566af8 in FxMixer::masterMix(float (*) [2]) ()
#2  0x000000000054666a in Mixer::renderNextBuffer() ()
#3  0x00000000005468f4 in Mixer::fifoWriter::run() ()
#4  0x00007ffff68bae3f in  () at /usr/lib64/libQtCore.so.4
#5  0x00007ffff7bc5645 in start_thread () at /lib64/libpthread.so.0
#6  0x00007ffff43fadfd in clone () at /lib64/libc.so.6
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 04 Ноябрь 2016, 03:29:31
>>Все равно брякается lmms.
... это происходит на конкретном файле? в конкретном месте? ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 04 Ноябрь 2016, 06:22:50
... по своему вопросу про время нашел вот такой код, который связывает тики и время ...
Код: cpp
void TimeDisplayWidget::updateTime()
{
Song* s = Engine::getSong();

switch( m_displayMode )
{
case MinutesSeconds:
m_majorLCD.setValue( s->getMilliseconds() / 60000 );
m_minorLCD.setValue( ( s->getMilliseconds() / 1000 ) % 60 );
m_milliSecondsLCD.setValue( s->getMilliseconds() % 1000 );
break;

case BarsTicks:
int tick;
            tick = ( s->getMilliseconds() * s->getTempo() * (DefaultTicksPerTact / 4 ) ) / 60000 ;
            m_majorLCD.setValue( (int)(tick / s->ticksPerTact() ) + 1);
            m_minorLCD.setValue( ( tick % s->ticksPerTact() ) / ( s->ticksPerTact() / s->getTimeSigModel().getNumerator() ) +1 );
            m_milliSecondsLCD.setValue( ( tick % s->ticksPerTact() ) %( s->ticksPerTact() / s->getTimeSigModel().getNumerator() ) );
            break;
default: break;
}
}
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 04 Ноябрь 2016, 09:03:49
... по своему вопросу про время нашел вот такой код, который связывает тики и время ...
len = 5184 - это количество тиков?
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 04 Ноябрь 2016, 09:20:00
для определения номера кадра в который нужно вставить ключ анимации:
scale = 60 / bpm / (192/4) * fps
frame = pos * scale


192 - это константа DefaultTicksPerTact
fps = 24 scene.render.fps
bpm = 140 это аттрибут bpm узла head файла .mmp

... потестил, вроде wav и кривые анимации в blender синхронизируются ...
... вечерком сброшу файлик со скриптом для дальнейшего обсуждения ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 04 Ноябрь 2016, 22:14:41
... вечерком сброшу файлик со скриптом для дальнейшего обсуждения ...
Заканчивается вечерок, однако... :)
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 05 Ноябрь 2016, 01:55:16
... добавил во вложение предварительный вариант импорта mmp в кривые анимации ...
... это небольшое дополнение в раздел File->Import ...
... после вызова процедуры импорта создаётся пустой объект с pattern-секциями, у для которых добавлены анимированные свойства "custom properties" на основании параметров note(pos,len) ...
... ключи анимации расставляются с текущей позиции, кривая имеет линейные сегменты со смещением offset, которое задаётся через меню импорта ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 05 Ноябрь 2016, 09:36:27
... добавил во вложение предварительный вариант импорта mmp в кривые анимации ...
... это небольшое дополнение в раздел File->Import ...
... после вызова процедуры импорта создаётся пустой объект с pattern-секциями, у для которых добавлены анимированные свойства "custom properties" на основании параметров note(pos,len) ...
... ключи анимации расставляются с текущей позиции, кривая имеет линейные сегменты со смещением offset, которое задаётся через меню импорта ...

Это импорта не касается, но для удобства можно добавить фильтр.
Код
from bpy_extras.io_utils import ImportHelper
class LMMPPatternToScene(bpy.types.Operator, ImportHelper):
    """Load *.mmp"""
    bl_idname = "import.lmmp_pattern_to_scene"
    bl_label = "LMMP Pattern to Scene"
    bl_description = "Imports notes from LMMP files into 3D Scenes"
    bl_options = {'REGISTER','PRESET', 'UNDO'}

    filename_ext = ".mmp"
    filter_glob = StringProperty(
            default="*.mmp",
            options={'HIDDEN'},
            )

    Offset = FloatProperty(name="Offset Frame", description="Offset frame", min=0, default=1)
    DefaultTicksPerTact = FloatProperty(name="Default Ticks Per Tact", description="Default ticks per tact", min=16, default=192)
   
    def draw(self, context):

Такой вопрос. Что пользователю известно про DefaultTicksPerTact? Нужно его выносить в prop?
У тебя работает скрипт? Что-то я не пойму, как ты используешь scale. Куб создаётся, но я не вижу у него fcurve и при анимации оно не дёргается.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 05 Ноябрь 2016, 11:11:12
>> Такой вопрос. Что пользователю известно про DefaultTicksPerTact? Нужно его выносить в prop?
... это же начальный тестинг, то есть параметры и функционал далеко не окончательные ...
... сейчас понятно что можно загружать "звук", но хотелось бы еще научиться выгружать в "звук" ...

>> У тебя работает скрипт? Что-то я не пойму, как ты используешь scale. Куб создаётся, но я не вижу у него fcurve и при анимации оно не дёргается.
... на куб анимации не накладываются, к нему подчиняются дополнительные объекты у которых есть дополнительные пользовательский свойства (custom properties), которые несут в себе анимацию ...
... выполни импорт mmp с 0 кадра ...
... проверь наличие созданных подчиненных узлов, выдели все ...
... открой редактор кривых и там должны быть кривые связанные с нотами note56, note67, note ...

>>Это импорта не касается, но для удобства можно добавить фильтр.
... за фильтр спасибо, добавлю ...




Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 05 Ноябрь 2016, 11:51:43
... сейчас понятно что можно загружать "звук", но хотелось бы еще научиться выгружать в "звук" ...
Что ты под этим подразумеваешь, то же что и я, или нет? :)
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 05 Ноябрь 2016, 12:08:35
Кстати, обратил внимание на консоль:
Warning: This script was written Blender version 2.78.0 and might not function (correctly), though it is enabled
Это ни страшно, но, может, стоит указать версию более раннюю?
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 05 Ноябрь 2016, 19:58:39
... пояснение где смотреть ...
(https://content-19.foto.my.mail.ru/mail/unixinfo/717/b-935.png)
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 05 Ноябрь 2016, 20:19:56
... пояснение где смотреть ...
Что дальше будем с этим делать?
Хорошо бы было, если бы в ЛММС ещё аппликатуру можно бы было указывать... ;D ;D ;D
Из вики:
Код
Аппликату́ра (нем. Applikatur, от лат. applico — прикладываю, прижимаю) — порядок расположения и чередования пальцев при игре на музыкальном инструменте. Аппликатурой также называется указание пальцев в нотах с помощью цифр или, реже, иным способом. Аппликатура особенно важна для клавишных и струнных инструментов. Умение разрабатывать аппликатуру — важная составляющая мастерства исполнителя.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 05 Ноябрь 2016, 22:07:45
>> ещё аппликатуру можно бы было указывать...
... несмотря на упоминание в этой теме подобного, указанной цели не ставилось ...
... тем не менее, если к этому функционалу есть интерес, давайте собирать информацию ...
... вот например
https://itunes.apple.com/ru/app/chord3d-guitar-ukulele-guitalele/id1004214587?mt=12

... есть у этой тематики технологические описания и готовые шаблоны? ...
... выкладывайте алгоритмы и методики ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 05 Ноябрь 2016, 23:21:34
>> ещё аппликатуру можно бы было указывать...
... несмотря на упоминание в этой теме подобного, указанной цели не ставилось ...
... тем не менее, если к этому функционалу есть интерес, давайте собирать информацию ...
... вот например
https://itunes.apple.com/ru/app/chord3d-guitar-ukulele-guitalele/id1004214587?mt=12
... есть у этой тематики технологические описания и готовые шаблоны? ...
... выкладывайте алгоритмы и методики ...
Я скажу так: тема может нас объединить. Ставилось - не ставилось, какая разница?
Первое, что приходит на ум, это пустышка(Empty), которая движется по нотам, и будет являться гидом для костей арматуры...
Второе, что приходит на ум, это то, что разработчики должны про нас знать. Якобы тут ни здесь и ни хухры-мухры. В смысле, возможно, освещённая идея принесёт вытекающие идеи от иностранцев...
Я это к тому, что тема может быть развита до серьёзных движений.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 13 Ноябрь 2016, 11:33:44
Моя шутка увела тему из поля видимости.
Но, хочется всё же реализовать то, о чём я серьёзно писал здесь ранее.
Игра на ксилофоне.
Для достижения цели возьмём музыкальную композицию римского товарища Корсакова "Полёт шмеля".
Я нашёл несколько вариантов миди файлов, импортируемых в ЛММС.
План таков:
1. Создаём в Блендере ксилофон наподобие такого:
(http://s53.radikal.ru/i140/0911/79/8ddd3d4f56c9.png)
Все эти доски обзываем числами, соответствующими нотам. Для этого подсмотрим в сохранённый полёт в виде mmp.
Центра досок устанавливаем в тех иместах, где по ним наносятся удары.
2. Создаём два шарика - наконечники на палочки, которыми стучат по доскам.
3. Думаем про алгоритм. Что нам нужно? Отсортировать ноты на чётные и нечётные.
Ещё что? Нам нужно для чётных и нечётных нот по одной f-curve, которые будут перемещать шарики от ноты к ноте на определённой высоте,
в нужный момент опускаясь на нужную доску...
4. Пытаемся что-то писать на пайтоне в текстовом редакторе.

Как план?
Полёт шмеля прилагаю.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 13 Ноябрь 2016, 17:00:41
>> Ещё что?
... умеренный сепаратизм ...
... у нас "уже" есть скрипт загрузки нот в кривые без привязки к конкретному инструменту ...
... допустим, что даже есть анимированный инструмент со своим ригом ...
... теперь нужно проработать интерфейс стыковки одного с другим ...
... и в целом правила стыковки не должны зависеть от инструмента (ксилофон, саксофон, миелафон, ...)  ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 13 Ноябрь 2016, 17:30:58
>> Ещё что?
... умеренный сепаратизм ...
... у нас "уже" есть скрипт загрузки нот в кривые без привязки к конкретному инструменту ...
... допустим, что даже есть анимированный инструмент со своим ригом ...
... теперь нужно проработать интерфейс стыковки одного с другим ...
... и в целом правила стыковки не должны зависеть от инструмента (ксилофон, саксофон, миелафон, ...)  ...
Я знаю, что у нас есть скрипт, но, как мне показалось, наш скрипт маловат. :)
Ранее я упоминал о вариантах, которые можно использовать для разных случаев: игра руками, игра пальцами, игра на ударных. Для этого можно использовать enumprop, чтобы выбрать, какие кривые мы хотим получить при импорте mmp. Это и будут правила стыковки не зависящие от инструмента.
Хотя, может, после вчерашнего я туго соображаю. Ты как предлагаешь связать полученные скриптом кривые с руками? Устанавливаем по очереди кадры и проверяем по всем нотам, какая из них в данный момент изменила своё состояние? Хотя, это тоже вариант.
Чет - нечет - это для полёта шмеля, ибо там все шестнадцатые доли, а если в такте одна четвертинка и две восьмые? Перс должен ударить два раза подряд одной рукой и один раз другой... Стало быть нужен счётчик, который по длительности нот в такте будет переключать руки: то ли это будет левая, то ли это будет правая.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 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
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 17 Ноябрь 2016, 20:08:08
>>несущий в себе ноты партии и указания того, что нам с этими нотами делать

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

... мне думается, что ксилофон уже должен содержать полный набор действий (action) и задача только их расставить во времени ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 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")
Вот такую гуёвинку получаем:
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 18 Ноябрь 2016, 06:56:24
... заморачиваться на коде интерфейса пользователя преждевременно ...
... мне сейчас невидна вся оснастка, только некоторые её фрагменты ...

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

(https://content-13.foto.my.mail.ru/mail/unixinfo/717/b-940.png)
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 18 Ноябрь 2016, 17:16:43
... заморачиваться на коде интерфейса пользователя преждевременно ...
... мне сейчас невидна вся оснастка, только некоторые её фрагменты ...

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

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

Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 19 Ноябрь 2016, 18:22:47
... а если сразу рисовать во вьюпорте bgl ...

например
http://blender.stackexchange.com/questions/61699/how-to-draw-geometry-in-3d-view-window-with-bgl?rq=1
https://svn.blender.org/svnroot/bf-extensions/trunk/py/scripts/addons/space_view3d_screencast_keys.py
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 19 Ноябрь 2016, 20:27:34
... а если сразу рисовать во вьюпорте bgl ...

например
http://blender.stackexchange.com/questions/61699/how-to-draw-geometry-in-3d-view-window-with-bgl?rq=1
http://hhttp://blender-3d.ru/forum/Smileys/default/wink.gifttps://svn.blender.org/svnroot/bf-extensions/trunk/py/scripts/addons/space_view3d_screencast_keys.py
Может, тогда лучше создать из кривой безье объект "нота"?
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 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'}






Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 20 Ноябрь 2016, 14:45:02
... так тоже пытаюсь :) ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 20 Ноябрь 2016, 16:59:18
... так тоже пытаюсь :) ...
:)
Надеюсь, что ты увидел, что я пытаюсь брать данные из твоим кодом созданного объекта. В принципе, должно получиться, просто, уже отдохнуть башке нужно.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 20 Ноябрь 2016, 18:23:41
>> я пытаюсь брать данные из твоим кодом созданного объекта
... упс, сам то  уже выкинул этот код и объекты в топку, новая тема  ;) ...
... суть - не управлять кривыми, а рулить уже готовыми действиями инструмента ...
... то есть настройка должным образом инструмента это отдельная задача, её нужно решать в рамках подготовки инструмента (ксилофон, саксофон, миелафон, ...) ...

>> уже отдохнуть башке нужно
... попробуй запустить шмеля {ALT+A}...
https://yadi.sk/d/RQpSw8o3z5Qno
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 20 Ноябрь 2016, 18:32:29
... звуковая дорожка, или слей  шмеля из lmms ...
https://yadi.sk/d/8Pc0CvYUz5Tof
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 21 Ноябрь 2016, 22:17:46
>> я пытаюсь брать данные из твоим кодом созданного объекта
... упс, сам то  уже выкинул этот код и объекты в топку, новая тема  ;) ...
... суть - не управлять кривыми, а рулить уже готовыми действиями инструмента ...
... то есть настройка должным образом инструмента это отдельная задача, её нужно решать в рамках подготовки инструмента (ксилофон, саксофон, миелафон, ...) ...

>> уже отдохнуть башке нужно
... попробуй запустить шмеля {ALT+A}...
https://yadi.sk/d/RQpSw8o3z5Qno
Запустил. Ну, это в принципе то же, что я и писал здесь в своём первом парсере. Или нет? Ты свой код зря выбросил. Ладно, завтра гляну, сегодня времени не было. :)
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 22 Ноябрь 2016, 06:43:04
>> Ты свой код зря выбросил
... конечно же код в копилке, но ...
... но в последней варианте уровень абстракции выше ...
... есть файлы с данными (mmp,midi,xml) в которых упакована информация о старте и продолжительности действия ...
... есть 3d модель с анимацией и своим набором действий ...
... нужно связать действия из файла с действиями из анимации ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 22 Ноябрь 2016, 17:17:49
>> Ты свой код зря выбросил
... конечно же код в копилке, но ...
... но в последней варианте уровень абстракции выше ...
... есть файлы с данными (mmp,midi,xml) в которых упакована информация о старте и продолжительности действия ...
... есть 3d модель с анимацией и своим набором действий ...
... нужно связать действия из файла с действиями из анимации ...
Я уже писал, что нужно систематизировать действия. Независимо от инструментов действия музыканта ограничены: игра рукой (рукой, смычком, медиатором, палочкой) и игра пальцами.  Но, к этому нужно добавить и поведение инструментов в зависимости от их типа: клавишные, струнные, духовые, какие-то там ещё. Если музыкант играет на пианино, то нужно анимировать пальцы обеих рук и клавиши, если играет на трубе, то так же. Если играет на гитаре медиатором, то анимировать нужно одну руку, пальцы другой руки и струны. Вот я и рисовал гуёвину, объединяющую все доступные действия. А ты считал, что это преждевременно. Своевременно я рисовал. :)
В гёувине нужно только начало ноты и её продолжительность записывать уже пересчитанные по твоей формуле в кадры.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 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]
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 23 Ноябрь 2016, 07:11:09
на текущий момент моё видение такое:

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

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

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

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


твой код служит оснасткой для кузнеца для подготовки инструмента
опять же инструмент , это уже не просто (ксилофон, саксофон, миелафон, ...), а (ксилофон, саксофон, миелафон, ...) + исполнитель (если таковой предусмотрен сценой) ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 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
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 23 Ноябрь 2016, 18:38:13
>> Название клавиш должно начинаться с названия инструмента, а заканчиваться буквами, соответствующими ноте, например: "Piano_C2".
... это хорошая идея ...

>> Только, не создаём action для каждой ноты, а создаём анимацию каждого объекта - клавиши3д.
... каким образом узнать какой тип анимации нужно создать по указанной ноте для конкретного объекта - клавиши3д? ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 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])
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 23 Ноябрь 2016, 18:49:47
... поясни, каким образом узнать какой тип анимации нужно создать по указанной ноте для конкретного объекта - клавиши3д? ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 23 Ноябрь 2016, 18:56:09
>> Название клавиш должно начинаться с названия инструмента, а заканчиваться буквами, соответствующими ноте, например: "Piano_C2".
... это хорошая идея ...

>> Только, не создаём action для каждой ноты, а создаём анимацию каждого объекта - клавиши3д.
... каким образом узнать какой тип анимации нужно создать по указанной ноте для конкретного объекта - клавиши3д? ...
Я писал ранее и добавил крутилки, правда, ни все. В гуи мы выбираем, какой объект мы будем анимировать: музыканта или инструмент?
Если мы выбрали инструмент, мы должны выбрать тип инструмента в добавленном после этого поста enumprop: клавишный, духовой, струнный, ударный и так далее.
Твой код очень подходит для клавишных инструментов, и файл .blend , который ты предоставил, это хорошо демонстрирует.
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 23 Ноябрь 2016, 19:10:09
>> Твой код очень подходит для клавишных инструментов, и файл .blend , который ты предоставил, это хорошо демонстрирует.
... в том файле не было кода который создавал анимацию, там был код который создавал копии действия и расставлял эти действия в нужные места ...
... поэтому вопрос остаётся открытым - каким образом узнать какой тип анимации (или какую анимацию) нужно создать по указанной ноте для конкретного объекта - клавиши3д? ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 23 Ноябрь 2016, 19:27:30
>> Твой код очень подходит для клавишных инструментов, и файл .blend , который ты предоставил, это хорошо демонстрирует.
... в том файле не было кода который создавал анимацию, там был код который создавал копии действия и расставлял эти действия в нужные места ...
... поэтому вопрос остаётся открытым - каким образом узнать какой тип анимации (или какую анимацию) нужно создать по указанной ноте для конкретного объекта - клавиши3д? ...
Ну, какой тип анимации для клавишей пианино? Location по Z. Я только не вникал, как по отдельным осям вставлять ключи, но по моему, знаю, как удалить ненужные fcurve. :)
Для других инструментов, скорей всего подойдёт анимация костей в режиме Pose с тем же типом Location
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 23 Ноябрь 2016, 19:33:48
>> Location по Z.
... на какую величину, какой формы? ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 23 Ноябрь 2016, 19:45:29
>> Location по Z.
... на какую величину, какой формы? ...
Крутилку нужно добавить, и, для того мы указываем оператору bl_options = UNDO, чтобы можно было визуально подобрать. Двигаем крутилку - всё переписывается. Также, можно предварительно приблизительно вычислить величину из габаритов инструмента.
Форму также нужно определять крутилкой, но, как мне кажется, в большинстве случаев это будет линейная интерполяция. Какой ты знаешь инструмент, где нота извлекается путём синусоидального нажатия или по какой-то другой замысловатой тригонометрической формуле? :)
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 25 Ноябрь 2016, 19:57:31
Николай! Запарился я искать как ты всё  это перепрыгиваешь:
Код
        tree = ET.parse(self.filepath)
        node = tree.getroot()
        for head in node.findall('song'):
            for child_song in head.findall('trackcontainer'):
                for child_trackcontainer in child_song.findall('track'):
                    for child_track in child_trackcontainer.findall('pattern'):
                        for child_pattern in child_track.findall('note'):
                            print(child_pattern)
???
Как ты добираешься до паттерна от корня?

Вроде понял, рекурсию используешь...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 25 Ноябрь 2016, 20:22:47
>> Вроде понял, рекурсию используешь...
... вроде логично для xml использовать рекурсию ...
Код: python
def mmp_parse(node):
    if node.tag=='pattern':
        notes={}
        for note in node:
            key = note.attrib['key'].zfill(3)
            if not (key in notes):
                notes[key] = []
            note=(int(note.attrib['pos']), int(note.attrib['len']), int(note.attrib['vol']))
            notes[key].append(note)
        if len(notes)>0:
            return [{'name':node.attrib['name'], 'pos':int(node.attrib['pos']), 'len':int(node.attrib['len']), 'notes':notes}]
        return []
    patterns = []
    for child in node:
        patterns.extend(mmp_parse(child))       
    return patterns 

>>Чтобы было понятней, вот словарь, написанный для одной октавы:
... кстати, ты сможешь сделать весь словарь ...
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 25 Ноябрь 2016, 21:35:29
>>Чтобы было понятней, вот словарь, написанный для одной октавы:
... кстати, ты сможешь сделать весь словарь ...

Код
notes_data = {
    0: ["До_4","c4","C4"],
    1: ["До_диез_4","Ре_бемоль_4","cis4","des4","C-sharp4","D-flat4"],
    2: ["Ре_4","d4","D4"],
    3: ["Ре_диез_4","Ми_бемоль_4","dis4","es4","D-sharp4","E-flat4"],
    4: ["Ми_4","e4","E4"],
    5: ["Фа_4","f4","F4"],
    6: ["Фа_диез_4","Соль_бемоль_4","fis4","ges4","F-sharp4","G-flat4"],
    7: ["Соль_4","g4","G4"],
    8: ["Соль_диез_4","Ля_бемоль_4","gis4","as4","G-sharp4","A-flat4"],
    9: ["Ля_4","a4","A4"],
    10: ["Ля_диез_4","Си_бемоль_4","ais4","b4","A-sharp4","B-flat4"],
    11: ["Си_4","h4","B4"]
}

notes = {}
for o in range(9):
    for i in range(12):
        key = i + (o*9)
        a=notes_data[i]
        n = []
        for s in a:
            s = s.replace("4","%s"%o)
            n.append(s)
        notes[key] = n
print(notes)

Кстати, вот здесь я дописал:
Код
        bpm = None
        for head in node.findall('head'):
            if 'bpm' in head.attrib:
                bpm = int(head.attrib['bpm'])
            if not bpm:
                for child in head.findall('bpm'):
                    if 'value' in child.attrib:
                        bpm = int(child.attrib['value'])
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: sungreen от 26 Ноябрь 2016, 02:41:46
>> Кстати, вот здесь я дописал:
... в ранее выложенным .blend файле, который во вложении сообщения http://blender-3d.ru/forum/index.php/topic,1597.msg23008.html#msg23008 есть похожий код ...
... мне показалось более простым вместо findall использовать find, поскольку любая коллизия с множественным наличием head или bpm игнорируется ...
... и можно сразу задать bmp дефолтное значение, например 120 ...

Код: python
def data_from_mmp(path,name):
    filename=path+name+'.mmp'
    node = mmp_load(filename)

    bpm = 120
    elem = node.find('.//head')
    if elem:
        if 'bpm' in elem.attrib:
            bpm = int(elem.attrib['bpm'])
        else:                   
            elem = node.find('.//bpm')
            bpm = int(elem.attrib['value'])

    return {'tempo':bpm, 'patterns':mmp_parse(node)}
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 26 Ноябрь 2016, 09:25:37
Я забыл просмотреть текст, но, не важно, если ты знаешь о том, что bpm может быть записан двумя вариантами...
Вот мой черновик, может, что-то увидишь в нём полезное:
Код
# ##### BEGIN GPL LICENSE BLOCK #####
#
#  This program is free software; you can redistribute it and/or
#  modify it under the terms of the GNU General Public License
#  as published by the Free Software Foundation; either version 2
#  of the License, or (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software Foundation,
#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####

import os, subprocess
import bpy
from bpy.props import *
from bpy_extras.io_utils import ImportHelper
import xml.etree.ElementTree as ET

bl_info = {
    "name": "Import LMMP Pattern to Scene (.mmp)",
    "author": "blender-3d.ru/forum",
    "version": (0, 0, 1),
    "blender": (2, 78, 0),
    "location": "File > Import > LMMP Pattern to Scene(.mmp)",
    "description": "Imports LMMP files as a series of animation properties",
    "category": "Import-Export",
}

"""
This script imports LMMP files into 3D Scenes (.mmp)
"""

def fingers_item_callback(self, context):
    ob = context.object
    items = [("1", "1", ""),
            ("2", "2", ""),
            ("3", "3", ""),
            ("4", "4", ""),
            ("5", "5", "")]
    if ob.instrument_type == 'guitar':
        items = [("b", "B", ""),
                ("1", "1", ""),
                ("2", "2", ""),
                ("3", "3", ""),
                ("4", "4", "")]
    return items

class MusicPatternSettings(bpy.types.PropertyGroup):
    @classmethod
    def register(cls):
        bpy.types.TextCurve.music_pattern = PointerProperty(
                name="Music Pattern Settings",
                description="",
                type=cls,
                )
    autocreate = BoolProperty()
    midi_data_object = StringProperty()
    musician_instrument = bpy.props.EnumProperty(
        name="Musician or Instrument",
        items=( ("instrument", "Instrument", ""),
                ("musician", "Musician", "")),
        default="instrument")
    instrument_type = bpy.props.EnumProperty(
        name="Instrument Type",
        items=( ("bowed", "Bowed Strings", ""),
                ("brass", "Brass Instruments", ""),
                ("guitar", "Guitar family", ""),
                ("keyboard", "Keyboard instruments", ""),
                ("percussion", "Percussion instruments", ""),
                ("woodwind", "Woodwind", "")),
        default="keyboard")

    @classmethod
    def unregister(cls):
        del bpy.types.TextCurve.music_pattern

class NoteSettingItem(bpy.types.PropertyGroup):
    name = bpy.props.StringProperty()
    index = bpy.props.IntProperty()
    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")

    fingers_left = bpy.props.EnumProperty(
        name="Fingers Left Hand",
        items=fingers_item_callback)

    finger_connect_left = bpy.props.BoolProperty()


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

    fingers_right = bpy.props.EnumProperty(
        name="Fingers Right Hand",
        items=fingers_item_callback)

    finger_connect_right = bpy.props.BoolProperty()

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
            layout.prop_search(ob,"midi_data_object",context.blend_data,'objects',text='Musician')
            layout.prop(ob,"auto")
            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')
                    box.prop(ctx,"fingers_left",text="1")
                    box.prop(ctx,"finger_connect_left",text="Leave Pressed")

            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')
                    box.prop(ctx,"fingers_right",text="1")
                    box.prop(ctx,"finger_connect_right",text="Leave Pressed") 

scale = 1
offset = 0
scene = None
startframe = 0

class LMMPPatternToScene(bpy.types.Operator, ImportHelper):
   
    bl_idname = "import.lmmp_pattern_to_scene"
    bl_label = "LMMP Pattern to Scene"
    bl_description = "Imports notes from LMMP files into 3D Scenes"
    bl_options = {'REGISTER', 'UNDO'}
 
    filename_ext = {".mmp"}
    filter_glob = StringProperty(
            default="*.mmp",
            options={'HIDDEN'},
            )

    Offset = FloatProperty(name="Offset Frame", description="Offset frame", min=0, default=1)
    DefaultTicksPerTact = FloatProperty(name="Default Ticks Per Tact", description="Default ticks per tact", min=16, default=192)
   
    def draw(self, context):
        layout = self.layout
        box = layout.box()
        box.label('LMMP Pattern:', icon='SORTSIZE')
        box.prop(self, 'Offset')
        box.prop(self, 'DefaultTicksPerTact')
   
    def execute(self, context):
        scene = context.scene
        fps = scene.render.fps

        layers = 20*[False]
        layers[0]=True

        tree = ET.parse(self.filepath)
        node = tree.getroot()
        bpm = None
        for head in node.findall('head'):
            if 'bpm' in head.attrib:
                bpm = int(head.attrib['bpm'])
            if not bpm:
                for child in head.findall('bpm'):
                    if 'value' in child.attrib:
                        bpm = int(child.attrib['value'])
        scale = 60/bpm/(self.DefaultTicksPerTact/4)*fps
        location = 0
        for head in node.findall('song'):
            for child_song in head.findall('trackcontainer'):
                for child_trackcontainer in child_song.findall('track'):
                    for child_track in child_trackcontainer.findall('pattern'):
                        tname=child_track.attrib['name']
                        tpos=int(child_track.attrib['pos'])
                        tlen=int(child_track.attrib['len'])
                        bpy.ops.object.text_add(location=(0, 0, location), layers=layers)
                        ob = bpy.context.object
                        ob.data.body = tname
                        ob.name = tname
                        location += 0.1
                        for pnote in child_track.findall('note'):
                            note = ob.data.notes.add()
                            key=pnote.attrib['key']
                            pos=int(pnote.attrib['pos'])
                            len=int(pnote.attrib['len'])
                            vol=int(pnote.attrib['vol'])
                            note.name =
                            note.index =
                            note.volume =
                            note.position =
                            note.duration =
        return {'FINISHED'}

def menu_func(self, context):
    self.layout.operator(LMMPPatternToScene.bl_idname, text="LMMP Pattern to Scene (.mmp)", icon='PLUGIN')

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

if __name__ == "__main__":
    register()
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: LanuHum от 09 Май 2023, 23:46:31
7 лет прошло?
sungreen, а, что ты имел ввиду тогда говоря об обратной отдаче? В блендере пишем, а оно играет? Сегодня это легко. Но, надеюсь, без меня за 7 лет уже родилось нечто с дивидендами?
Название: Re: Звук-Анимация, Анимация-Звук
Отправлено: Николай Николаев от 10 Май 2023, 07:50:41
читаешь мысли, в начале недели вспоминал эту тему, но в контексте обратной перспективы https://www.youtube.com/watch?v=QoBpsq06RAU и https://www.youtube.com/watch?v=3uXdX7Z720w
очевидно же без монетизации и дивидендов, но призадумался https://www.youtube.com/watch?v=M6F5T6rKga8 дважды призадумался https://www.youtube.com/watch?v=VTvou-cjkzI