Физическое моделирование гитары.

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Физическое моделирование гитары.

Сообщение Mikle » 11.09.2012 (Вт) 21:54

Хакер писал(а):я думаю, что FL Studio как минимум, а промышленные железные синтезаторы как максимум, умеют каким-то образом твикать начальную фазу своих синусовых осцилляторов так, чтобы при обеспечении максимально возможного [a] интерференционная картина никогда не вызвала переполнения целочисленных значений сэймпла.

Это бесполезно (подбор начальных фаз). Твой пример с нотами ля разных октав - исключение, в большинстве случаев (в 11-ти из 12-ти) соотношение частот сигналов - величина, кратная корню 12-й степени из 2-х, то есть число иррациональное, то есть фазы будут меняться постоянно так, что рано или поздно всё равно пики совпадут.
В твоём случае я бы сделал, чтобы одиночный сэмпл имел примерно половинную от максимальной амплитуду, дальше пусть вступает компрессия, сначала мягкая, потом всё жёстче. И не путай компрессию с насышением, овердрайвом и т. п. Коэффициент компрессии высчитывается из предыдущих значений за некоторый период, а насышение - одномоментная ф-ция, ничего не знающая о предыдущем состоянии системы.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Физическое моделирование гитары.

Сообщение Хакер » 11.09.2012 (Вт) 23:18

Mikle писал(а):В твоём случае я бы сделал, чтобы одиночный сэмпл имел примерно половинную от максимальной амплитуду, дальше пусть вступает компрессия, сначала мягкая, потом всё жёстче.


Отпадает. У меня частота дискретизации = 40 кГц. Тактовая частота процессора = 20 МГц.
Это получается 500 тактов на обработку каждого сэмпла. Учитывая то, что я оперирую в основном 16-битными числами, а процессор 8-битный, на каждую примитивную операцию уходит по две инструкции, и в основном два такта.

В итоге, имеем запас по 250 «условных инструкций» на обработку каждого сигнала. За это время надо просчитать сигнал для нескольких голосов. В общем, итак едва укладываюсь. Компрессия сюда не влезет.

А если делать её отдельным процессором, закачик доволен не будет. У него первейший приоритет — минимальная цена платы для каждого устройства.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Физическое моделирование гитары.

Сообщение Proxy » 11.09.2012 (Вт) 23:43

Почему бы просто не поделить на количество голосов тогда? И пускай сигнал будет не такой сильный, какой мог бы быть. И пускай некоторые биты вообще никогда не меняют значения и звук на выходе окажется на пару бит меньшим разрешением для таких случаев. Это критично?
Follow the white rabbit.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Физическое моделирование гитары.

Сообщение Хакер » 12.09.2012 (Ср) 0:43

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

Во-вторых потому, что у процессора нет инструкции деления. Её придётся реализовать ручками и она съест кучу тактов.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Физическое моделирование гитары.

Сообщение Proxy » 12.09.2012 (Ср) 6:52

Хакер писал(а):Потому что при появлении нового голоса остальные резко станут тише.

Нет, под количеством голосов я имел ввиду максимальное возможное число одновременных голосов, а не активных в текущий момент времени.
Хакер писал(а):Во-вторых потому, что у процессора нет инструкции деления. Её придётся реализовать ручками и она съест кучу тактов.

... и в этом случае это выходит просто константа коэффициент.

Ну а при превышении максимального числа одновременных голосов (скажем 6-и) уже использовать текущее число голосов. И пускай в этом случае отдельный голос станет тише на несколько процентов (не выше 16.7%), не думаю, что это будет как-то проблемно звучать. Ну или использовать компрессор чисто в этой исключительной ситуации, думаю его работа будет малозаметной при правильных параметрах. И это тоже позволит избавиться от деления.
Follow the white rabbit.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Физическое моделирование гитары.

Сообщение Mikle » 12.09.2012 (Ср) 8:16

Хакер, Proxy дело говорит. Просто ограничить полифонию 8-ю (16-ю) голосами, тогда вместо деления (умножения на float) будет просто битовый сдвиг.
А вообще, опиши чуть подробнее заказ, интересно же :), может что-то полезной посоветуем. Ты, например, уверен, что нужен именно синус, или будут разные типы волны? А генерация огибающей нужна, или только типа органа?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Физическое моделирование гитары.

Сообщение Хакер » 12.09.2012 (Ср) 10:39

Mikle писал(а):Хакер, Proxy дело говорит.

Так что дело, оно и так сейчас всё сделано. Я думал есть хитрый способ, а получается нет.

Mikle писал(а):А вообще, опиши чуть подробнее заказ, интересно же :), может что-то полезной посоветуем.

Компания из Украины, специализирующаяся на производстве игрушек, заказала начинку для детского пианино.

Mikle писал(а):Ты, например, уверен, что нужен именно синус, или будут разные типы волны?

Уверен. Я изначально решил сделать FM-синтезатор с двум модуляторами (у каждого своя огибающая) и LFO. Пресеты решил слизать с Fruity DX10 (он же MDO DX10 в юности).

Сначала за ночь воплотил синтезатор в софте, чисто для себя. Собственно, заказ ещё на стадии переговоров. Заказчик хочется знать, во что выльется цена платы при массовом производстве в Китае. У него первый критерий — минимальная цена. У меня цель — приличный звук. Обогнать конкурентов из Китая по цене не получится в принципе, можно только обгонять по более приятному звучанию — такова моя позиция.

В общем, я пока прицеливаюсь к элементной базе, так сказать и способу синтеза. Война идёт за каждый бит и такт, надо понимать :)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Физическое моделирование гитары.

Сообщение Mikle » 12.09.2012 (Ср) 11:01

Хакер писал(а):можно только обгонять по более приятному звучанию

Согласен. Если синус, то зачем сэмплы? Ведь потоковый синус очень легко рассчитывается БЕЗ ПРИМЕНЕНИЯ ФУНКЦИИ Sin И ЕЁ ЭМУЛЯЦИЙ. А если есть память для сэмплов, то можно и реальное пианино засэмплировать.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Физическое моделирование гитары.

Сообщение Хакер » 12.09.2012 (Ср) 11:07

Mikle писал(а):Если синус, то зачем сэмплы?

В смысле? Я под сэймплами подразумеваю не нарезанные куски звуков (те сэймплы, которые для сэймплера). Я под сэймплами имею в виду 16-битные слова, отправляемые на ЦАП с частотой, которую по английски именуют sample rate.

Mikle писал(а):Ведь потоковый синус очень легко рассчитывается БЕЗ ПРИМЕНЕНИЯ ФУНКЦИИ Sin И ЕЁ ЭМУЛЯЦИЙ.

Не понял. Нельзя получить синус без функции sin. Как бы он там не считался, функция, возвращающая значения всё равно будет называться sin.
Но всё равно, расскажи, что ты имел в виду од потоковым вычислением синуса без функции и её эмуляции.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Физическое моделирование гитары.

Сообщение Mikle » 12.09.2012 (Ср) 12:49

Код: Выделить всё
Option Explicit

Private Sub Form_Load()
  Dim P As Single, S As Single, K As Single
  Dim i As Long

  ScaleMode = vbPixels
  Move Left, Top, Width - Screen.TwipsPerPixelX * (ScaleWidth - 512), Height - Screen.TwipsPerPixelY * (ScaleHeight - 256)
  Show

  P = 1: S = 0: K = 0.0005
  For i = 0 To 511
    PSet (i, P * 128 + 128)
    P = P + S
    S = S - P * K
  Next i
End Sub

Я имел ввиду это. Частота задаётся переменной K. Как таковой, функции, непосредственно вычисляющей Sin для произвольного аргумента нет, вычисляются только последовательные значения, но для звука оно и нужно.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Физическое моделирование гитары.

Сообщение Proxy » 12.09.2012 (Ср) 13:03

В указанное число тактов никак не уместится, к сожалению.
Follow the white rabbit.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Физическое моделирование гитары.

Сообщение Mikle » 12.09.2012 (Ср) 14:00

Достаточно уместиться этому:
Код: Выделить всё
    P = P + S
    S = S - P * K

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Физическое моделирование гитары.

Сообщение Proxy » 12.09.2012 (Ср) 16:31

Не могу сообразить в чём косячно звучит. Подбирал не сам, слышу, что есть разница, но проблема не в этом, а в звучании инструмента. А в звучании как раз не могу понять в чём именно криво звучит.
Follow the white rabbit.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Физическое моделирование гитары.

Сообщение Mikle » 12.09.2012 (Ср) 16:41

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

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Физическое моделирование гитары.

Сообщение Proxy » 12.09.2012 (Ср) 16:54

Чуть убавил нейлонность, но длительность затухания пока не поборол.
Follow the white rabbit.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Физическое моделирование гитары.

Сообщение Mikle » 12.09.2012 (Ср) 17:40

Тут не в длительности дело, а в том, что струны при игре зачастую принудительно глушат, этого не слышно.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Физическое моделирование гитары.

Сообщение Proxy » 12.09.2012 (Ср) 17:54

Mikle писал(а):Тут не в длительности дело, а в том, что струны при игре зачастую принудительно глушат, этого не слышно.

Не только в этом проблема. У меня пока расстановка пальцев никак не учтена. Т.е. без учёта длительностей при угасании у меня теоретически могут одновременно угасать хоть 6 струн (и все не открытые, хоть с разбросом на 12 ладов). В реальности пальцев чисто физически не хватило бы и если не учитывать намеренно при угасании длительность, то струна заглохнет в тот момент, когда палец от неё оторвётся. Можно это учитывать в партии, но по моей задумке оно само должно с этим справляться, полностью угаснуть может только открытая струна же, только открытая не занимает ни одного пальца.
Follow the white rabbit.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Физическое моделирование гитары.

Сообщение Mikle » 12.09.2012 (Ср) 19:10

А как же извлечение звука с открытой струны? А его заглушка?
У меня в демке SpainGuitar сделано так - есть шесть струн, у каждой есть текущая длина, точнее лад, на которой она нажата, струна открытая - 0-й лад. Плюс может быть ещё точка, где в данный момент мы струну глушим, просто вводится трение в этом месте. Если кратковременно приглушить струну на 1/2, 1/3, 1/4 и т. д. длины - естественным образом получается обертон. Есть характерный удар по заглушенным струнам, можно указать место и силу шипка.
И ещё есть одно дополнительное звено в цепи, общее для всех струн - имитация порожка, его масса значительно больше массы стандартных звеньев, поэтому он не сильно влияет на звук струн, зато через него звук постепенно передаётся на другие струны, если они не заглушены - они постепенно "заводятся".

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Физическое моделирование гитары.

Сообщение Хакер » 12.09.2012 (Ср) 20:21

Mikle писал(а):Достаточно уместиться этому:
Код: Выделить всё
    P = P + S
    S = S - P * K

Этот код требует FP-математику. Одна операция над FP-числами занимает 400 тактов.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Физическое моделирование гитары.

Сообщение Proxy » 12.09.2012 (Ср) 20:29

Кажется я немного неверно изложил суть идеи :)
В общем без особых ухищрений пальцы не открытых струнах на не нулевых порожках могут одновременно удерживать свыше 4 ладов суммарно. Атака открытой струны пальцев левой руки не занимает, на не нулевых порожках одна струна занимает один палец (естественно при учёте, что табулатура на входе адекватная, а не хаотичные броски левой руки по всему грифу, с которыми в реальности человек бы не справился, в отличие от секвенсора, которому нет никакого дела до этого).
Если требуется занять один палец, но при этом свободных нет, то высвобождается палец, который был задействован наиболее давно (я не учитываю какой именно палец, это для моего алгоритма не имеет значения, важен только хронологический порядок). Во время высвобождения активная длина струны становится равной полной длине, однако при этом палец в точке освобождения частично глушит струну (не намеренно — частично, намеренно хоть полностью, команду для пользователя для касания струны без прижима к порожку я теперь тоже реализовал, а так же добавил возможность слайдить без атаки и отрыва пальца).
Смысл автоматического контроля за пальцами состоит в том, что теперь можно секвенсору подавать табулатуру, а длительность он определит сам. Т.е. то, что указывается в табулатуре — это атака, а длительность лишь определяет когда будет произведена атака следующей по списку струны (хотя для этого тоже предусмотрено всё).
В общем вот что из этого вышло пока. Теперь с новым звуком стало слышно, что таба совсем кривая, но это не моих заслуг дело :) Помечу в планы подобрать самому этот фрагмент.
Вложения
Ex.7z
(9.18 Кб) Скачиваний: 121
Follow the white rabbit.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 12.09.2012 (Ср) 21:01

Хакер писал(а):Этот код требует FP-математику. Одна операция над FP-числами занимает 400 тактов.

FP = floating point? А нельзя ли применить fixed point и битовый сдвиг?

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 12.09.2012 (Ср) 22:07

Qwertiy писал(а):
Хакер писал(а):Этот код требует FP-математику. Одна операция над FP-числами занимает 400 тактов.

FP = floating point? А нельзя ли применить fixed point и битовый сдвиг?

Код: Выделить всё
Option Explicit

Private Sub DrawSingle()
  Dim P As Single, S As Single, K As Single
  Dim i As Long

  P = 1
  S = 0
  K = 0.0005
 
  For i = 0 To 511
    PSet (i, P * 128 + 128)
    P = P + S
    S = S - P * K
  Next i
End Sub

Private Sub DrawInteger()
  Dim P As Integer, S As Integer
  Dim i As Long

  P = 2048
  S = 0
 
  For i = 0 To 511
    PSet (i, P / 16 + 128), vbRed
    P = P + S
    S = S - ((P + IIf(P > 0, 1023, -1023)) \ 2048)
  Next i
End Sub

Private Sub Form_Load()
  ScaleMode = vbPixels
  Move Left, Top, Width - Screen.TwipsPerPixelX * (ScaleWidth - 512), Height - Screen.TwipsPerPixelY * (ScaleHeight - 256)
  Show

  DrawSingle
  DrawInteger
End Sub

Красное - в целых числах.png
Красное - в целых числах.png (13.56 Кб) Просмотров: 8173

Конечно, разница есть, но я не знаю, насколько она принципиальна. К тому же, я заменил 1/2000 на 1/2048, чтобы была возможность использовать битовый сдвиг. Хотя, частоты ведь не в 2 раза различаются, наверное...

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Физическое моделирование гитары.

Сообщение Proxy » 12.09.2012 (Ср) 23:57

Доработал немного алгоритм, который контролирует расстановку пальцев левой руки (который решает, когда и какую струну следует "открыть" и приглушить в месте отрыва пальца от струны).
Переработал табу в свой формат, которую прислал мне одноклассник (она не дописана до конца, я не знаю кто её подбирал и т.к. фанатом творчества Виницкого не являюсь, то не могу судить насколько совпадает с оригиналом). При переработке в свой формат выяснил, что многого не учёл, поэтому пришлось кое-где наломать дров... Да и к тому же ещё где-то опечатался, похоже. Поэтому заранее извиняюсь, если чьи-то чувства задел, искалечив композицию. Но я выкладываю это только для оценки "реалистичности" звучания того, что у меня получилось из моего проекта.
В общем вот.
А здесь фрагмент какой-то песни ДДТ, полученный с доработанным алгоритмом.
Follow the white rabbit.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Физическое моделирование гитары.

Сообщение Mikle » 13.09.2012 (Чт) 8:25

Qwertiy писал(а):я заменил 1/2000 на 1/2048, чтобы была возможность использовать битовый сдвиг. Хотя, частоты ведь не в 2 раза различаются, наверное...

Так ведь переменная K как раз задаёт частоту, замени "K = 0.0005" на "K = 1/2048", и получишь тот же результат.
Плохо, что на произвольную величину в Integer так просто не разделишь, хотя... есть одна мысль!
Proxy писал(а):Доработал немного алгоритм, который контролирует расстановку пальцев левой руки (который решает, когда и какую струну следует "открыть" и приглушить в месте отрыва пальца от струны).

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

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Физическое моделирование гитары.

Сообщение Хакер » 13.09.2012 (Чт) 8:36

Mikle, кстати, это не честный синус, это скорее имитация колеблющегося подпружиненного объекта. И [k] определяет не частоту, а соотношение коэффициента жесткости пружины и массы грузика. Ни и конечно этот коэффициент влияет на частоту прямым образом.

Mikle писал(а):хотя... есть одна мысль!

Дело в том, что даже сейчас самый оптимальный по скорости вариант: большая таблица значений значений синусов для всех 65536 возможных значений аргумента (немного недоговариваю: всего лишь для 65536/4 — с учёттом симметрий) оказывается слишком медленным.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Физическое моделирование гитары.

Сообщение Хакер » 13.09.2012 (Чт) 8:47

Тут надо учитывать, кстати, что не только целочисленного деления в нашем распоряжении нет, но и битовых сдвигов на N бит — тоже нет. Есть инструкции битового сдвига только на 1 бит. Хотим сдвигать на n — бит, надо организовывать цикл. Так что сдвиг на 1 бит займёт один такт процессора, а сдвиг на n бит — около 3*n тактов, если n не константа, и около n, если константа.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Физическое моделирование гитары.

Сообщение Mikle » 13.09.2012 (Чт) 8:59

Хакер писал(а):это не честный синус, это скорее имитация колеблющегося подпружиненного объекта.

Всё верно, это физическая эмуляция процесса, но этот процесс - синусоидальный. Отклонения от синуса есть, но они меньше, чем f^2, где f - отношение частоты сэмплирования к частоте генерируемого синуса, точнее оценить у меня не хватает математической подкованности, скорее всего - значительно меньше.
Хакер писал(а):сейчас самый оптимальный по скорости вариант: большая таблица значений значений синусов для всех 65536 возможных значений аргумента (немного недоговариваю: всего лишь для 65536/4 — с учёттом симметрий) оказывается слишком медленным.

Вот это уже хуже, тогда становится вопрос - почему выбран именно синус? Например двусторонняя пила с разными подъёмом и спуском даёт очень мягкий (не то, что меандр) звук, и он ближе к струнному, чем синус.
Хакер писал(а):около 3*n тактов, если n не константа, и около n, если константа.

А если прописать 8 сдвигов и делать JMP на нужный?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Физическое моделирование гитары.

Сообщение Хакер » 13.09.2012 (Чт) 9:17

Mikle писал(а):Вот это уже хуже, тогда становится вопрос - почему выбран именно синус? Например двусторонняя пила с разными подъёмом и спуском даёт очень мягкий (не то, что меандр) звук, и он ближе к струнному, чем синус.

А где сказано, что нужен звук, близкий к струнному? Синус выбран потому, что из всех софтовых синтезаторов, которые я слышал, по коэффициенту {вкусный звук}/{сложность синтеза} выиграл Fruity DX10. (Правда он выиграл с учётом включённого внешнего эффекта Reverb, без которого он звучит тоже неважно).

Mikle писал(а):А если прописать 8 сдвигов и делать JMP на нужный?

Иногда можно. Тут баланс между кучей факторов: надо учитывать, что памяти под код+данные тоже код наплакал. Вернее, за эту память надо тоже платить.

Просто тут видишь какое дело. Самого заказа ещё нет. Я позволил себе потратить время на то, чтобы оценить скорость выполнения вычислений на конкретном чипе, при этом код я писал на Сях. Для подобных трюков надо писать код на ассемблере. Написание кода на ассемблере дорого стоит, а с учётом того, что заказ на стадии переговоров, я не хочу идти на такие жертвы. Хотя сама задача мне самому интересна.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 13.09.2012 (Чт) 13:04

Mikle писал(а):Так ведь переменная K как раз задаёт частоту, замени "K = 0.0005" на "K = 1/2048", и получишь тот же результат.

Я понимаю что это. Но не знаю, значит ли твоё число что-нибудь конкретное, например, задаёт какую-то определённую ноту...

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: Физическое моделирование гитары.

Сообщение Proxy » 14.09.2012 (Пт) 0:35

Mikle писал(а):И, всё же, это решать должен не алгоритм, а композитор, это нужно прописывать в табулатуре. Оно, видимо, потому и фальшивит, что аккорд уже давно сменился, а "остатки" старого всё ещё звучат. И эта "шарманка" в звучании тоже по причине безостановочного звучания.

Исправил. Здесь небольшой фрагмент, но для удобства пришлось разбить на 2 дорожки, а потом свести в Audacity.
Follow the white rabbit.

Пред.След.

Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 0

    TopList