Когда-то я выводил формулу, поищу.
было бы кстати (можно и без нот, просто по частоте), а то состраивать с остальным тяжко
Нота у нас зависит от длины струны и натяжения. Длина у нас - величина целая, поэтому логично задавать ноту и длину, а рассчитывать натяжение, иначе, если мы будем рассчитывать длину и получим дробь, то в формулу её не подставишь.
Ноту ля второй октавы обозначим номером 0, соответственно ля первой октавы будет =-12, ми третьей октавы =7 и т. д.
Dim n As Long ' Нота Dim f As Single ' Частота n = 7 ' Задаём ноту МИ третьей октавы sLen = 30 ' Задаём длину 30 f = 440 * 2 ^ (n / 12) Frc = (f * (sLen - 1) * 0.0000641026) ^ 2
Если получается натяжение больше 2, то генератор выдаст переполнение, точнее больше двух не должна быть сумма Frc и kRand.
Спасибо!:)
Добавил параметр, задающий дребезг струн об лады при чрезмерно сильном ударе по струне, назвал его Slap, можно заценить:
http://tuapse-mikle.narod.ru/String.zip
Вот кстати тебе идея, вруг пригодится-сработает. В моей simon&patrick стоит магнитный датчик l.r. buggs m1a. Звука лучше от акустической гитары, подключенной, не слышал, хотя вариантов перепробовал много. Так вот. Там один хамбакер снимает струны (и тут идет наводка от соседних с учетом удаленности), а второй - резонанс корпуса.
В первой демке (SpainGuitar) я примерно это и делал, правда сама струна тогда была хуже нынешней, я ещё волшебную силу Rnd не использовал :).
Там у звуку примешивается квадратичная составляющая - имитация изгиба дэки продольным натяжением струны, добавлена пара резонансов и реверберация.
Эх, жаль что на басике, я бы портанул под мак :)
Sergio
> жаль что на басике
Так перевести - минутное дело. f0xx, вон, уже перевёл и на прошлой странице даже предлагал код желающим.
Кстати назрел вопрос, а толщину струны ты учитываешь? А когда скрипку делал - вращение струны?
f0xx
> а толщину струны ты учитываешь?
А надо? Там есть звенья цепочки с массами, толще струна - тяжелее погонный метр, больше звеньев при той же длине.
То есть одну и ту же ноту можно извлечь из струны с количеством узлов 30 и 50. На 50 получится струна толще.
f0xx
> А когда скрипку делал - вращение струны
Вот это не делал.
Имхо, по идее, число узлов должно определять только качество симуляции, а массу бы как-то по-другому учитывать. Запас по скорости у алгоритма есть, думаю можно попробовать более "тяжелые" решения.
А вообще, гениальное решение - моделировать пьезу, а не реальный звук инструмента, меня вперло.
По скрипке, было где-то обсуждение в середине, откуда брать звук. Там прикол, посмотри где стоит подставка, в каком соотношении. Она делит звук на части же. Звукосниматель крепят к ней, кстати... но тут сложно, сколько ни подзвучивали пьезой скрипку, и контактным микрофоном, лажа получается. Только с воздуха нормальный звук получается.
По вращению, там физика, насколько я помню, такая: смычок подворачивает струну вокруг ее оси, до определенного момента, дальше она "соскальзывает", возвращается в исходное положение с небольщим заносом, и все повторяется. Еще трение покоя бы учесть, взять звук и вести его это два разных усилия.
Трение покоя и скольжения у меня разные, отсюда и генерируется звук. А вот толщина струны нулевая, поэтому и вращения нет.
f0xx
> сколько ни подзвучивали пьезой скрипку, и контактным микрофоном, лажа
> получается.
Вот и у меня пока что-то типа пьезо датчика.
f0xx
> Запас по скорости у алгоритма есть, думаю можно попробовать более "тяжелые"
> решения.
Простейшее "более тяжёлое" решение - сэмплировать более высокую частоту, например 88.2 кГц, а потом уже конвертить в 44.1 кГц. Так, кстати, можно при той же длине получить вдвое более высокую ноту.
Mikle
> Простейшее "более тяжёлое" решение - сэмплировать более высокую частоту
не думаю что оверсемплинг кардинально улучшит качество. Я имел в виду алгоритмы синтеза более сложные
а нулевая толщина - препятствие для вращения? по идее, нужно просто колебания от щипка вверх-вниз заменить скручиванием. Кстати, а колеблешь же ты в 2д пространстве? в 3д не пробовал?
Тема в архиве.