ПрограммированиеФорумЗвук

Физическое моделирование музыкальных инструментов. (11 стр)

Страницы: 110 11 12 1315 Следующая »
#150
5:39, 19 апр 2013

основную гармонику струны длины l можно представить как полпериода синусоиды. если отклонение мало, синусоиду можно аппроксимировать как параболу вида
alpha * x * (x - l), если рассмотреть центральный узел, находящийся на высоте h, то alpha = h / (l/2)^2

рассмотрим ускорение, которое получает центральный узел струны:
a = 2 * deltah * stiffness / mass, где deltah - перепад узлов между узлом и двумя его соседями, deltah = (l / (n-1))^2 * alpha = 4 * h / (n-1)^2, подставляем в ускорение, получаем:
d^2h/dt^2 = 8 * h * stiffness / (mass * (n-1)^2), решаем диффур как функцию h(t), получаем циклическую частоту
w = 8 * sqrt(stiffness / mass) / (n-1)
то есть чтобы струны с разным n колебались с одной частотой, должно быть выполнено условие
stiffness / mass = (n-1) ^ 2
у меня вместо этого эвристически получалось близкое (n-2) * n. после подставления аналитической формулы результат совпал ещё лучше, можем расходиться.

#151
10:07, 19 апр 2013

Suslik
> масса равномерно распределяется между всеми узлами, включая статичные
Откуда масса у статичного узла? Его массу можно считать бесконечной, тогда получается n-1, что логично потому, что тогда число промежутков, то есть длина струны, равно n-1.
У меня практика сошлась с теорией - высота звука обратно пропорциональна длине и пропорциональна корню квадратному от силы натяжения.

#152
13:58, 19 апр 2013

Mikle
> Откуда масса у статичного узла? Его массу можно считать бесконечной, тогда
> получается n-1, что логично потому, что тогда число промежутков, то есть длина
> струны, равно n-1.
потому что я так захотел. можно было бы выводить формулу из соображений, что массой обладают только незакреплённые узлы, результат был бы немного другим. я проверил формулу на малых n - если количество узлов 3-10, тон сохраняется.

#153
14:46, 24 апр 2013

Вот я достал свои наработки и выкинул всё лишнее: Физическая модель струны, EXE плюс исходник.
Всё "интересное" находится в модуле modSounds, это всего две функции:
StStart вызываем для инициализации струны и удара по ней. В ней пять параметров - длина струны, сила натяжения, коэффициент демпфирования (вязкости), коэффициент рэндома для масс узлов и коэффициент жёсткости удара.
StTick без параметров, вызываем её для получения каждого следующего состояния струны.
Не все сочетания входных параметров дают реалистичный звук, например, коэффициент рэндома лучше всего ставить в пределах от 1/1000 до 1/500 длины струны. Меньше - звук электронный, больше - фальшивит.
Но и "неправильные" сочетания параметров иногда дают очень интересные звуки, например: максимальные длина и жёсткость, минимальные сила и демпфирование.

#154
19:23, 24 апр 2013

привет! как поживает синт, новые семплы предвидятся? по звуку более-менее ясно, что за зверь, что по структуре кода, насколько напряжно будет заюзать в проекте?

#155
19:34, 24 апр 2013

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

#156
19:36, 24 апр 2013

Mikle
> Вот я достал свои наработки и выкинул всё лишнее: Физическая модель струны, EXE
> плюс исходник.
я ещё в предыдущем исходнике разобрался(ну у тебя и код, конечно). к сожалению, основное различие между твоим звуком и моим оказалось в количестве узлов на струне, то есть разница лишь количественная. плюс мы с тобой по-разному учитываем, на каком ладу зажата струна, но мне мой способ больше нравится.

#157
19:39, 24 апр 2013

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

#158
19:50, 24 апр 2013

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

#159
1:36, 25 апр 2013

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

#160
9:25, 25 апр 2013

Pupilkan
> Жаль что нельзя "быстро и просто" генерировать сложные и реалистичные звуки.
Не сложно сделать формулу, принимающую ноту и велосити, и выдающую на выходе пять параметров для функции StStart, соответствующие конкретному инструменту, например бас гитаре. В некоторых прошлых версиях такая формула уже была, а тут я не стал вводить ограничений, чтобы показать диапазон для поиска.
И, благодаря элементу рэндома, звук получается каждый раз немного другой, не просто сдвиг фазы или расстройка частоты, как в дешёвых хорусах, а именно другой.

#161
10:21, 25 апр 2013

Тогда в том же майнкрафте, каждому типу блоков "запилить" собственное звучание) Я бы долго слушал эту игру.

#162
14:30, 27 апр 2013

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

#163
18:02, 27 апр 2013

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

#164
19:00, 27 апр 2013

gammaker
> Твой код хорошо параллелится?
Смотря что параллелить. Звук одной струны распараллелить сложновато будет, а вот звук целого рояля - легко.
gammaker
> Можно ли зная произвольный момент времени получить семпл?
Нет, получаются только последовательные семплы, но за счёт этого как раз все формулы сильно упрощаются.
gammaker
> К сожалению бейсик не знаю, ничего не понял.
Могу помочь перевести на C# или C++, но не раньше послезавтра.

Страницы: 110 11 12 1315 Следующая »
ПрограммированиеФорумЗвук

Тема в архиве.