omich / sitarcheg

Sitar physical, audible model in Pure C language
1 stars 1 forks source link

В чём суть? #1

Open lain-dono opened 11 years ago

lain-dono commented 11 years ago

С PureData разобрался в общих чертах.

Насколько я понел в итоге должно получиться что-то вроде: x Где sitarcheg~ это некая числомолотилка.

А теперь внимание вопрос: Что принимает алгоритм и что выплёвывает на выходе? Т.е. каков формат входящих и выходящих данных?

lain-dono commented 11 years ago

Асло -k*c[i]=a[i]-4*b[i]+b[i-1]+b[i+1]-формулу можно получить в виде человекочитаемом виде?

omich commented 11 years ago

Про формулы к математик-куну(nichegovamneskazhet). А про алгоритм, если я ничего не упустил, то он принимает следующие вещи: 1 сигнальный(аудио) вход, с помощью него можно подавать например щелчки(имитируя медиатор), или звук других инструментов для симпатического резонанса; много числовых входов(float), на них приходит: в первую очередь частота в герцах(в Pure Data нет целых, так что тоже float), во вторую очередь все остальные физические параметры(aka переменные в формуле), чьё изменение имеет смысл(вероятно все). Кажется тут есть противоречие: удельная масса(и толщина, может быть ещё что-нибудь) струны влияет на высоту, а высота должна задаваться одним параметром, но с этим разберёмся, опять же математику вопрос. А на выходе только звук, т.е. выход один.

lain-dono commented 11 years ago

Про формулы к математик-куну(nichegovamneskazhet).

Реквестирую его сюда. Ну или пусть в тред свои выкладки напишет.

1 сигнальный(аудио) вход аудио

Но зачем? Алгоритм должен сам примешивать себя к другому аудио?

в Pure Data нет целых, так что тоже float

Было очевидно из мануала и примеров.

во вторую очередь все остальные физические параметры(aka переменные в формуле)

Меня интересует полный список. Будет список - будет уже прям вся обвязка плугина готова. Пять минут работы.

Будут подробные математические выкладки - будет код. Судя по всему там работы на джва часа от силы. Ман PureData весьма маленький. И хидер там милипусечный(~600 строк это ниачом).

omich commented 11 years ago

Реквестирую его сюда.

Можно в треде позвать. Но зачем? Алгоритм должен сам примешивать себя к другому аудио?

Нам ведь нужна физическая модель струны, а струна резонирует с другими струнами и прочими звуками. Если щипок можно имитировать по-другому, то симпатический резонанс нельзя, и это не примешивание(микширование), а направление данных внутрь модели, чтобы она с ними прореагировала. Меня интересует полный список. Будет список - будет уже прям вся обвязка плугина готова. Пять минут работы.

Будет сделано, но когда переведём формулу.

omich commented 11 years ago

Ман PureData весьма маленький. И хидер там милипусечный(~600 строк это ниачом).

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

lain-dono commented 11 years ago

Будет сделано, но когда переведём формулу.

Жду.

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

Да не вопрос.

Я пытался разобраться в этом мане, но обилия незнакомых концепций мозг закипал.

http://pdstatic.iem.at/externals-HOWTO/node2.html http://pdstatic.iem.at/externals-HOWTO/node3.html Конечный продукт - библиотека, а не исполняемый файл(нет main).

// вставляем объявления всех типов и ф-ий puredata
#include "m_pd.h"

static t_class *helloworld_class;

// Тип
typedef struct _helloworld {
  t_object  x_obj;
} t_helloworld;

// Когда к нам приходит сообщение - мы обрабатываем его этой ф-ей
// т.е. это те "чёрточки" в блоках
// такие ф-ии могут иметь доп. параметры в разных форматах
void helloworld_bang(t_helloworld *x) {
  post("Hello world !!");
}

// Это конструктор нашего объекта
void *helloworld_new(void) {
  t_helloworld *x = (t_helloworld *)pd_new(helloworld_class);

  return (void *)x;
}

// Вызывается один раз при подключении библиотеки
void helloworld_setup(void) {
  // генерим ссылку на класс
  helloworld_class = class_new(
        gensym("helloworld"), // имя плашечки
        (t_newmethod)helloworld_new, // конструктор класса
        0, sizeof(t_helloworld),
        CLASS_DEFAULT, 0);
  // Добавляем ф-ию обработки значений, приходящих на "черточку"
  // (как "черточку" вообще правильно назвать?)
  class_addbang(helloworld_class, helloworld_bang);
}

И это я ещё только глазами пробежался. Дальше надо курить ман взатяг. Но мне оно всё ну прям совсем очевидно.

omich commented 11 years ago

О да, это я хотел узнать ещё с августа, когда первый раз его открыл. Но всё равно до конца(даже на 10%) не понял :С (синтаксис-то не знаю). Может всё-таки в джабере початимся, или в скайпе созвонимся? Или может откомментишь этот кусок в стиле учебника, типа: "структура _helloworld содержит две переменных: t_object и x_obj, которые впоследствии будут использованы для..".

omich commented 11 years ago

(как "черточку" вообще правильно назвать?)

Вход или выход же, технически-литературный вариант: впуск и выпуск.

nichegovamneskazhet commented 11 years ago

Лейн, я тебе так скажу - на математической модели мы будем сидеть месяц как минимум. В настоящее время нам нет смысла сразу собирать все, нам нужно получить правильно работающую модель, а потом привинтить интерфейс.

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

Начнем с моделирования дерганья струны медиатором. Нужно знать положение всех точек струны в момент срыва с нее медиатора и скорости этих точек.

Положению всех точек струны соответствует треугольник с вершинам в концах струны и в точке приложения медиатора.

omich commented 11 years ago

Лейн, я тебе так скажу - на математической модели мы будем сидеть месяц как минимум.

Ого! А в чём такой объём задачи? Получается надо не просто буквально перенести формулу, а что-то ещё додумать?

nichegovamneskazhet commented 11 years ago

Да, потому как хитрожопые авторы описали в статье примерно десятую часть алгоритма, остальной текст - КАКИЕ МЫ ПИЗДАТЫЕ, КАКИЕ МЫ ХОРОШИЕ. Как обычно все короче

lain-dono commented 11 years ago

@nichegovamneskazhet

математические выкладки эквивалентны перепечатыванию сюда учебника Пирумова

OH SHI~ Пойду гуглить мат. библиотеки тогда.

Как обычно все короче

Ато!

@omich

Может всё-таки в джабере початимся, или в скайпе созвонимся?

Я слоупок же.

Или может откомментишь этот кусок в стиле учебника, типа: "структура _helloworld содержит две переменных: t_object и x_obj, которые впоследствии будут использованы для..".

Прям сейчас нет. Завтра вечером может даже вольно переведу часть мана. Самому же удобнее будет. Но если ты не знаешь синтаксиса, то тебе неособо поможет.

В общем к завтрашнему вечеру я уже буду знать puredata и разберусь с доп. инструментарием. Как я понял задачка таки немного объёмнее, чем кажется на первый взгляд.

nichegovamneskazhet commented 11 years ago

Не надо сейчас хвататься за PureData!!1111 Нужно разобраться с математикой! Математическая библиотека нам может понадобиться только одна - GSL. Код будет очень тупой, но нужно кодить без ошибок.

omich commented 11 years ago

Но если ты не знаешь синтаксиса, то тебе неособо поможет.

Поможет! Я хочу написать пару простых объектов, которые нужны будут для моего синта, отличий от хеловорда мало, помимо метода. Учить С целиком конечно надо бы, но это как в военном походе ещё каждый день отжиматься и подтягиваться по 20 раз, даже хуже.

Не надо сейчас хвататься за PureData!!1111

Но мне-то можно, я же ничем не могу помочь с формулой. Кстати, я сейчас пишу одному шарящему человеку, если он будет в добром расположении духа, то может зайдёт, подскажет что-нибудь по алгоритму.

omich commented 11 years ago

..У нас есть конкретные вопросы? Если предположить, что он знает всё по теме. Может даже формулу целиком знает. Предлагаю обсуждать что касается непосредственно алгоритма в issue 2.

omich commented 10 years ago

Бампую реквест про мануал. @lain-dono, ответь хоть что-нибудь.