![]() |
Вычисление формулы с записью в файл.
Очень нужен скрипт решающий такую задачу.
Код:
a * 17^(n/43), где a = 440,00 и n = {0,1,2,3,4,5,6,7,8...15,16,17} Вывод в файл нужен примерно такой Код:
значение Если есть варианты на Phyton и Perl тоже пишите, хотябы в личку, любые варианты интересуют |
Код:
$a = 440 |
Нельзя ли поправить программу, чтобы получилось следущее
Код:
;...
Хотя, наверное можно высчитать сразу некоторое нижнее значение и от него умножением подняться наверх? Или есть лучше способ? |
semiono, лучше от базовой, в пределах октавы, в обе стороны. Дальше «танцевать» опять от «A», вверх и вниз, заданной умножением/делением базовой.
|
Готово! :)
Код:
$a = 440 / 17 |
А что это ноты что-ли? Почему они с моим вариантам и частотами не сходится? У меня и играют правильно.
Код:
$a = 440 |
Ничего себе, Тико-тико на скрипте! :)
У меня это звуковой ряд только, но он "неправильный", идея в том чтобы построить ряд который не основывается на октаве. Кстати, у меня проблемма в том, что инструменты обычно настраиваются в центах, а не частотах. То-есть мне нужно будет перевести этот ряд в формат microtuning в центах. Тут бы калькулятор помог. Скачал программу Scala 2 http://www.huygens-fokker.org/scala/ но там столько лишнего, ничего не понятно и неудобно. Но похоже что только в ней можно частоты в центы перевести.. В синтезаторах типа Rob Papen Albino есть множество microtune пресетов, но фишка в том что они все octave-based, а мне хочется новый лад зделать) Либо в логарифмах сразу посчитать, как записано в TUN файле, но я не соображаю чё-то в логарифмах, теряюсь.. |
Цитата:
|
semiono, а воспроизведение на чём будет? MIDI разве поддерживает такие ноты? Там только питч-бэнд использовать.
Вот ссылка там есть DSBeep.au3, который звук (синусоиду) в колонки пускает по частоте. |
Цитата:
Ещё u-he Zebra, ACE и Cakewalk Z3ta+ поддерживают микротюнинг. Проблема лишь рассчитать звукоряд в центах, что по идее является логарифмической последовательностью. |
semiono
1. Немного математики: когда то я заметил что 12 лад делит струну гитары попалам, поэтому в ней играют флажолеты, при чём каждый остоящий на 12 ладов делит струну попалам. Отсюда стало понятно что отступ каждого последующего лада является константой в относительных размерах, ну к примеру в отношении к общей длине сруны. Так как у между полным делением на 2 происходит 12 шагов деления, которые при переменожении получат коэфициент 2 то каждый шаг деления равен квадратному корню 12-ой степерни из 2. Этот коэффициент отделяет один лад от другого. Представим что в этот участок нужно сделать 7 ладов отстоящих на в процентном отношении на стандартную величину, значит требуется кофициент корень 7-ой степерни из 2. Вроде логарифмы никакие не нужны. 2. Конечно можно придумать любую другую формулу, которая вообще не будет учитывать относительность предыдущего лада к последующему. Хотя в такой системе не удастся транспонировать, не будет октав, будет одна большая октава. 3. Вообще звуки не просто вычисляются согласно неизвестному логарифму. Думаю этот звукоряд при сложении получает сложные тембры... Надо думать скорее что они будут образовывать вместе, а не каждый в отдельности. 4. Кстати, сейчас этой информацией никого не удивить, потому что в google всё это расжёвано такими специалистами, что самому ещё долго учится чтобы понять. Я на официальном сайте позже нашёл ещё несколько постов с аналогами функции _Beep, так что я оказался далеко не первым, как я думал. |
Я тоже узнал однажды как делится гриф гитары, мне сразу же стало интересно творчески подумать об этом, но сейчас времена компьютеров и гитару ломать я уже не стал) тем более програмно уже даже сделали многое. Если интересно можете посмотреть микротюнинг в Albino или Alpha free.
Но дело в том что эти файлы записаны не в частотных значениях, а в степенях двойки, что вроде бы в математике называется логарифм, могу ошибаться. Это очень удобно для октавного строя. Но я затрудняюсь в расчëтах нестандартного строя, например, с основанием 3 а не 2,4,8.. Понимаю что это звучит необычно, но это моя фишка :) Я сделал семплы в Sound Forge, там можно точно по частотам сгенерировать, но простой синус звучит неинтересно, причëм генерировать каждый тон звукоряда в три-четыре октавы довольно рутинная работа) Я потом напишу расчëты как я думаю подобраться к логарифмам, но надо собраться мыслями) |
semiono, я думаю смысл центов тот же. Разница 1 лада (интервала между двумя соседнимим нотами) 100 единиц. Если делить пополам получится средина по частоте, но не средина в музыкальном смысле, потому что 6 лад между 0 и 12-ым не является срединой. Если у нас интервал между ладами имеет коэфициент 2^(1/12), то интервал между центами = (интервал между ладами)^(1/100) или 2^(1/1200). Кстати, проверил в википедии как раз то что я и предполагал. Если вы меняете ряд на 7 нот, то цент будет 2^(1/700). Но вы всё равно получаете ноту в частотах. Центы являются отклонением от нот звукоряда, поэтому я не понимаю как вы хотите получить частоту в центах.
|
Вложений: 1
Цитата:
Хочу уточнить и проверить, если не так поправте... Если до "первой" октавы C1 сам тон, то его удвоение C2, а двойное удвоение C3 или же 1, 2 ,4... 64 итд. Тогда "число" ТРИ будет лежать между 2 и 4, то есть это будет фа-диез второй октавы F#2 (?) Числа 5, 6, 7 должны соответствовать Eb3, F#3, A3. Иными словами они должны лежать на равных интервалах, так как темперированный строй сам по себе ровный (?) Сложнее будет с нахождением более высоких чисел 11, 13, 17 итд. - они не соответствуют нотам.. Однако я думаю надо взять центы и вычислить просто середину между звуками темперированного строя и найти центовое расположение ЭТИХ ЗВУКОВ. Меня сначало смущало само деление, так как я думал оно не соответствует частоте, однако я понял, что в самой центовой системе отражается точное следование частотам. То есть, если мы частоты вычисляем корнями, то в центовом отображении это соответствует делению. То есть, тут для меня лишь вопрос нахождения "середины", надеюсь я правильно понял, что логарифмическое деление пополам равно нахождению корня из двух. Я не математик, поэтому возможно туплю, но то что я выше обяснил, надеюсь это правильно? * То что я называю числами, это делители частоты либо струны, но здесь это не важно, главное рассчитать правильно) Далее просто хочу взять первый тон и верхний тон (какое нибудь простое число), например, одинадцать и поделить равномерно на звукоряд. Я прикрепил микротюн-файл темперированного строя, чтоб видно о чём речь. Там две секции, одна лишняя и заголовки в файле не нужны, синт Albino воспринимает только записи нот, причём можно всего одну указать. Просто файлы универсальные поэтому там лишнее присутствует. Инфы по этому нет, но я сам покопался) Числа после запятой синт тоже игнорирует скорее всего, вобщем-то их и не слышит никто) |
Первая колонка звук C в центах, вторая делитель. Начнём с величины 1200 центов.
0 1200 1 сам тон 2400 2 удвоение 3600 4 два удвоения 4800 8 ... 6000 16 .... 7200 32 .... 8400 64 здесь мы найдём середину октавы 64+32=96 или 9000 центов 9600 128 128-96=32 шага, чтобы получить значение в центах делим (9600-9000)/32 = 18,75 Значит делитель 97 равен 9000+18,75 ~9019 центам! Пожалуйста, поправте если не так? |
Время: 06:54. |
Время: 06:54.
© OSzone.net 2001-