У нас всегда так - каждый сидит в своей норке и о других мало что знает. Я побывал ещё на двух сайтах. Визит на сайт классической музыки был продуктивным, меня там много о чём просветили. Вот эта ветка - http://www.forumklassika.ru/showthread.php?t=111910
Общение всегда полезно, прежде всего в отношении своих собственных разработок.
Я и тут многие интересные для себя вещи отметил.
Всегда полезно знать немного больше. Я и с МИДИ протоколом разобрался http://www.proza.ru/2017/03/16/1463
хотя вряд ли буду с этим форматом работать. Мне мои самоделки с текстовыми файлами больше нравятся. С ними между нотами и звуковой записью имеется как бы две ступени - 1 мнемоничекая запись нотного текста. 2 текст партитур с указанием частот, длительностей и нюансов исполнения. И оба этих текстовых файла можно править в обычном Блокнотике. ориентируясь не на слух, а на точные цифры.
Один подход не исключает другого, у каждого я вижу свою область применения.
Дмитрий.
gammaker
> А на 2 МБ есть?
Посмотри wavetable банки для SBLive! в формате sf2, там 2-х, 4-х и 8-ми мегабайтные шли в комплекте с драйверами, вполне неплохо по сравнению с виндовым набором. А если копать дальше в сторону минимализма, можно взять банк от AWE32, это всего 512 Кб, но я как-то встречал в формате sf2, звучал очень неплохо.
Suslik
> человек специализируется в своей области и зарегился на форуме специально,
> чтобы об этом написать. я считаю, именно таких надо поддерживать, а не как у
> нас обычно получается.
С мыслью согласен, но не могу не сказать - результаты в п. 207 никак не впечатляют.
Mikle
> А если копать дальше в сторону минимализма, можно взять банк от AWE32, это
> всего 512 Кб, но я как-то встречал в формате sf2, звучал очень неплохо.
О, вот это уже интересно! Скачал, но по факту несжатый файл на 561 КБ.
Это уже аргумент в пользу прикручивания поддержки SF к синтезатору. Правда я уже отвлёкся от синтезатора и другими вещами занялся. Так что может как-нибудь потом.
об особенностях синтеза скрипичного звука можно прочесть здесь -
http://www.proza.ru/2016/12/12/989
http://www.proza.ru/2016/03/08/2244
о синтезе звука фортепьяно тут - http://www.proza.ru/2017/04/25/939
о программировании звука популярно - http://www.proza.ru/2017/04/03/171 там в конце статьи некая философия есть
Дмитрий
gammaker
> Скачал, но по факту несжатый файл на 561 КБ.
Возможно, всё дело в каких-нибудь заголовках и другой служебной информации. На AWE32 стояла ПЗУшка на 512 Кб, в неё это всё помещалось.
sti-hi
> о программировании звука популярно
Мне бы эту статью 20 лет назад :)
По факту синтез звука одним периодом (управляя только огибающей) даёт слишком скудный результат. Я много экспериментировал, брал семплы живого звука и пытался их зациклить, но даже такие, казалось бы, "ровные" звуки, как вокал или звук трубы, получаются ненатуральными.
Различные методы плавного изменения периода по ходу звучания дают некоторое улучшение, та же "деформация синуса" из статьи, или пропускание каждый раз периода через лоу-пасс фильтр (Карплюс-Стронг) - это всего лишь задание разных форм огибающих для разных гармоник, но гармоники остаются те же - только кратные основному тону частоты, то есть всё это при желании сводится к суммированию ограниченного количества синусов с кратными частотами и разными огибающими. Я выше приводил пример гитары (фактически Карплюс-Стронг) и "пиано" (фактически деформация синуса).
FordPerfect
Оцени рояль на jsfiddle.net:
var f = 440 * pow(2, A * 8 - 4); var w = 0.000071235 * f; var g = 3200 / f; var i = t * 44100; var a1 = pow(1 - f * 0.000000025, i); var a2 = pow(1 - sqrt(f) * 0.000009, i); var v0 = sin(i * w); v0 = sin(v0 * g * a1 * a1 * a1 * 0.9) * v0 * v0 * 0.375; var v1 = sin(i * w * 0.499 - 0.57); v1 = pow((v1 * v1), (a1 * g + 1)); var v2 = sin(i * w * 0.501 + 0.57); v2 = pow((v2 * v2), (a1 * g * 3 + 1)); return (v0 + v1 - v2) * (a1 + a2) * 0.3;
Вообще говоря, от струны странно ждать не кратных типов колебаний.
Тем не менее согласен - спектр реального звука широк. Линии расширяются из-за нелинейных процессов.
Но и в по-периодном синтезе отдельная нота тоже имеет широкий спектр - http://yadi.sk/i/dFMgJf7E3LpJXC
Разумеется, если взять семпл реального звука и просто размножить его рельеф, то хорошего будет мало. Звук безжизненный, и спектр будет уныло-линейчатый. Однако плавное изменение рельефа звука от периода к периоду звук оживляет - http://www.proza.ru/2016/04/22/1982
Причём, опыт показывает, что изменение рельефа следует делать не хаотическим, а неким сложно-периодическим манером, именно такое изменение ухо принимает как естественно-гармоничное.
Но даже и этого оказывается недостаточно. Звук альта я в настоящее время складываю из амплитуд, получаемых по двум алгоритмам - 1. изменение рельефа, 2. небольшое движение пичков с эхом на фоне этого рельефа (тоже гармонично-апериодическое).
Ну, а если и этого мало, то можно и обертоны добавить, и не обязательно целочисленные. Хороши бывают обертоны с небольшой расстройкой.
Со всем этим приходится долго экспериментировать, прежде чем получится приемлемый результат.
Но тут конструктивные идеи нужны. Вот идея квазиобертонов. Чем она не хороша? По моему, хороша.
Гитарную струну серьёзно не делал, только попробовал, вот здесь можно посмотреть - http://www.proza.ru/2016/05/16/1070
К этому вполне можно добавить и посыпание рельефа случайными пичками, если шуршания пальцев по струне хочется. Почему бы и нет?
Можно плавно перестраивать тембр, переходя от металлического звона к шуршанию.
Дмитрий
sti-hi
> Вообще говоря, от струны странно ждать не кратных типов колебаний.
Вовсе нет. Даже если забыть про продольные волны, в струне может быть как минимум два вида поперечных. Первая - это та самая, дающая основной тон и обусловленная длиной, массой и силой натяжения струны, вторая волна, это та, которая вызвана жёсткостью струны, когда согнутая струна стремится выпрямиться не потому, что натянута, а потому, что упругая, частота этих колебаний не зависит от силы натяжения.
sti-hi
> Гитарную струну серьёзно не делал, только попробовал, вот здесь можно посмотреть
А сам получающийся звук струны и колокола послушать можно?
Mikle
> Первая - это та самая, дающая основной тон и обусловленная длиной, массой и силой натяжения струны, вторая волна, это та, которая вызвана жёсткостью струны, когда согнутая струна стремится выпрямиться не потому, что натянута, а потому, что упругая, частота этих колебаний не зависит от силы натяжения.
Это одна и та же волна, просто возвращающая сила складывается из двух компонент, вследствие чего немного плывет частота.
Два вида поперечных колебаний — это две разных поляризации, условно, колебания вдоль X и Y (сама струна вдоль Z).
А помимо продольных колебаний есть еще и крутильные, но на эти типы, я думаю, можно забить, ибо они высокочастотные и быстро затухают.
Однако, обертоны в реальных струнах, действительно, не кратны друг другу, в основном из-за неравномерности свойств струны.
Мне попадалась струна, у который второй обертон был смещен на четверть тона от октавы (и звучала она ужасно).
Вообще, любая линейная система может быть разложена на набор обертонов (в общем случае бесконечный).
Т. е. всегда можно обойтись суммой экспоненциально затухающих синусов/косинусов.
Сложность тут создает взаимное влияние струн друг на друга, да и в случае одной струны необходимо учитывать резонатор для всякой акустики.
Mikle
Вроде прилично. Какой-то живости, богатства что-ли, не хватает, особенно в начале (возле атаки).
Как тебе
var y=(v0 + v1 - v2) * (a1 + a2) * 0.3; y=y-a1*a1*a1*(y*y*y*(pow(a1,1/4)-a1*y*y)); return y;
лучше/хуже?
FordPerfect
> Как тебе
Не работает, ты что-то не скопипастил, дошло, это добавление к моему варианту.
На домашних колонках не слышу разницы, только громкость чуть-чуть отличается, приду в студию - послушаю.
FordPerfect
> богатства что-ли, не хватает, особенно в начале (возле атаки).
Это в миксе сильно проявляется, плотная аккордовая партия звучит значительно хуже отдельных нот, я добавлял в самое начало шумовой щелчок, типа удара молоточком, в миксе становится лучше, но отдельные ноты звучат хуже.
На сколько сложно добавить в твой инструмент Static переменные? Чтобы они первый раз при старте инициализировались нулями, а между следующими вызовами сохраняли свои значения, многие расчёты можно сильно упростить, интегрируя численно то, что сложно интегрировать аналитически.
}:+()___ [Smile]
> Два вида поперечных колебаний — это две разных поляризации, условно, колебания
> вдоль X и Y (сама струна вдоль Z).
Причём плоскости этих колебаний в реальной струне плавно вращаются вокруг Z, это хорошо заметно на глаз.
}:+()___ [Smile]
> обертоны в реальных струнах, действительно, не кратны друг другу, в основном
> из-за неравномерности свойств струны.
Я много экспериментировал, рэндомно менял погонную плотность вдоль струны, но что-то уж очень большую неравномерность приходится вносить в струну, чтобы воссоздать подобное поведение. Вот я и начал искать другую причину.
Михаил, послушать из статьи http://www.proza.ru/2016/05/16/1070 лучше - там 3 ссылки с пояснениями есть.
Я понимаю, что звук колокола или гитары достаточно сложный звук, с ним ещё работать и работать.
Это у меня на будущее в планах. Пока мало что делаю - стационарный компьютер сломался, на ноутбуке звук плохой.
Дмитрий.
sti-hi
> послушать из статьи
Теперь заметил, там ссылки неактивные, видны плохо, сначала увидел только последнюю, на исходники.
Просто сравни:
Колокол: https://yadi.sk/d/_BIXEKp_3LqV4s
Струна: https://yadi.sk/d/OvbAjShQ3LqV5U
Да, замечательно. А как это сделано?
Если можно, поподробнее.
Дмитрий
Тема в архиве.