Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.09.2013, 14:59
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

Алгоритм гитарного апликатора
Помогите,пожалуйста,с алгоритмом.
Пишу гитарный апликатор.
Гитарный строй:
1струна- ми 2 окт, 2струна- си 1 окт, 3струна- соль 1 окт,
4струна- ре 1 окт, 5струна- ля мал окт, 6струна- ми мал окт.
Известна нота,например ми второй октавы- это открытая первая струна.
Также например ре второй октавы - это вторая струна на третьем ладу.
Уж больно не хочется в цикле преебирать все 120 нот грифа.
Как более элегантно объяснить скрипту на js, на какой струне и на каком ладу брать ноту.
Ктсати ми второй октавы можно взять в четырех местах на грифе гитары...
Ответить с цитированием
  #2 (permalink)  
Старый 26.09.2013, 15:20
Профессор
Отправить личное сообщение для BallsShaped Посмотреть профиль Найти все сообщения от BallsShaped
 
Регистрация: 14.09.2012
Сообщений: 162

Тебе нужна библиотека аппликатур. И просто делаешь из нее выборку аккордов, где есть нужные ноты. Можно еще проиндексировать аккорды, что первыми предлагались более релевантные варианты.
Ответить с цитированием
  #3 (permalink)  
Старый 26.09.2013, 15:25
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

нет,мне не нужна никакая библиотека.Я делаю апликатор для начинающих гитаристов.
Для тех кто знает как определить ноту на нотном стане,но не знает как ее найти на грифе.
Конечно же технически я им могу объяснить,а как это сделать программно?
Ответить с цитированием
  #4 (permalink)  
Старый 26.09.2013, 15:45
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

Стандартные 19 ладов...
Я и говорю про стандартные,плюс ко всему я говорю про классический вариант- когда струн 6 и строй ми,си,соль,ре, ля ми.
Вобщем это палемика.
Меня интересует алгоритм,хотя бы намек на него.
Переборка,Типа:
если ноты до и ре и вторая октава,то это уже не первая струна- не годится.
Так как ре дубль диез- это и есть ми,которую как раз можно взять на открытой первой.
Также и далее,если это ля первой,то это уже не вторая струна.- тоже не катит.
Вобщем,есть ли соображения по поводу алгоритма?
Ответить с цитированием
  #5 (permalink)  
Старый 26.09.2013, 18:23
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

Абсолютно ничего не ясно.
Хоть бы какие пояснения что ли.
Я вижу примерно такое решение.
var oktava=2;
var note= [[a,2],[b,1],[c,2],[d,2],[e,1],[f,2],[g,2]]; //цифры- этополутона.Между си и до и между ми и фа 1 полутон
располагая такой информацией как программно выяснить что ми второй октавы есть на первой открытой струне и,допустим, на второй струне, 5 лад.
Или как выяснить что ре второй октавы нету на первой струне,а она на второй струне на 3 ладу?
Ответить с цитированием
  #6 (permalink)  
Старый 26.09.2013, 21:54
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

var oktava= [" малой", " первой", " второй", " третьей"];
var note= [["e",0],["f",1],["g",2],["a",2],["b",2],["c",1],["d",2]];
var oktindex=2; //индекс октавы
function poluton(id,okt){
ton=0;
for(var i=0;i<note.length;i++){
if(note[i][0]==id)break;
ton += note[i+1][1];
}
}
poluton("e",oktindex);
alert("это "+ton);
решил частично задачу вот так.
Идея в том,чтобы начинать отсчет по полутонам от ми малой октавы.
Чтобы добраться до ми второй октавы нужно прогнать цикл еще пару раз.
Если подаем на функцию ми малой,то все ок,
если ми первой,то надо как-то прибавить 12,
а если ми второй,то это уже 24 полутона.
Можно переменную ton умножать на индекс октавы,но тут тоже что-то не ладится.
Как мне тут быть?
Ответить с цитированием
  #7 (permalink)  
Старый 26.09.2013, 22:04
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

я нахожу свой код более прозрачным для меня.
Помогите мне его скорректировать.
По поводу науки:
Наименование нот в обыкновенной научной нотации, только си обозначается не H, а B. Каждый, кто хоть
это каждый....
За плечами 4 года училища и 5 по классической гармонии.
Так вот си обозначается h,
а вот си бемоль обозначается b.
заимствовано из старинной нотации:
abcdefgh
где b- это си бемоль и образует фригийский лад с пониженной второй ступенью(но тогда h в конце уже не нужен,так как старинные лады состоят из семи нот и не замыкаются в октаву).
Ответить с цитированием
  #8 (permalink)  
Старый 27.09.2013, 14:17
Профессор
Отправить личное сообщение для sotik Посмотреть профиль Найти все сообщения от sotik
 
Регистрация: 14.09.2012
Сообщений: 158

вот получился такой код..далее косметика и нахождение той же ноты на других струнах.
Может если будут какие-то поправки по модернизации кода,дабы привести его к более изящному виду,то буду очень рад выслушать. var oktava= [" малой", " первой", " второй", " третьей"];
var note= [["e",0],["f",1],["g",2],["a",2],["b",2],["c",1],["d",2]];
var oktindex=2;
var pozic = document.getElementById('pozic');

//обработка струны
lad=0;
for(var i=0;i<note.length;i++){
if(note[i][0]==id)break;
lad += note[i+1][1];
}
// поправка на октавы
old=oktindex;//делаем бекап октавы
if(i>=5 && oktindex>0)oktindex--;
kr=oktindex*12;
valton = lad+kr;
oktindex=old;
//нахождение минимальной струны
if(valton>=24){strun="первая";valton -= 24}
else if(valton>=19 && valton<24){strun="вторая";valton -= 19}
// и так далее
pozic.innerHTML = "это "+strun+" струна, "+valton+" лад";

<h3>Апликатор</h3>
<p><span id="note">Ми</span><span id="oktava">второй</span> октавы</p>
<div>
<span><img id="a" src="css/images/bullet.gif" alt="Ля" width="513" height="96" border="0" /></span>
<span><img id="b" src="css/images/bullet.gif" alt="Си" width="513" height="96" border="0" /></span>
<span><img id="c" src="css/images/bullet.gif" alt="До" width="513" height="96" border="0" /></span>
<span><img id="d" src="css/images/bullet.gif" alt="Ре" width="513" height="96" border="0" /></span>
<span><img id="e" src="css/images/bullet.gif" alt="Ми" width="513" height="96" border="0" /></span>
<span><img id="f" src="css/images/bullet.gif" alt="Фа" width="513" height="96" border="0" /></span>
<span><img id="g" src="css/images/bullet.gif" alt="Соль" width="513" height="96" border="0" /></span>
<span><img id="h" src="css/images/bullet.gif" alt="Ля" width="513" height="96" border="0" /></span>
</div>
<p id="pozic">Первая открытая</p>
<br>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм "Сортировка вставками" Maxim_Never Общие вопросы Javascript 6 23.06.2014 02:26
Как написать алгоритм выборки в javascript? Isaac Общие вопросы Javascript 13 06.02.2013 11:15
Волновой алгоритм Ли с 8-ми направлениями boy_cow Общие вопросы Javascript 6 04.10.2012 21:08
алгоритм шифрования DES brizzzobot Общие вопросы Javascript 3 25.04.2012 15:49
Спецификация Ecma-262. Пункт 8.7.2 PutValue(V,W) не до конца ясен алгоритм. vandy3 Общие вопросы Javascript 0 09.01.2012 17:31