HTML-скрипт для автоматической транспозиции аккордов
Пока я занимался подбором и публикацией аккордов к песням из "Последнего испытания", меня смутно терзала мысль сделать так, чтобы можно было прямо на страничке взять и перейти в другую тональность. В итоге мысль вылилась в некий скрипт на jquery, который я представляю уважаемой общественности.
Идея проста. В исходнике аккорды записываются прямо в тексте песни:
Белый сн{Am}ег, серый лед На растр{C}ескавшейся земле
На выходе получаются красиво оформленные надстрочные аккорды:
Белый снAmег, серый лед
На растрCескавшейся земле
Кроме всего прочего, аккорды можно тут же перевести в произвольную тональность. Для иллюстрации того, как это все работает, я выбрал аккорды к песне "Привет", подобранные Ростиславом Чебыкиным - автором знаменитой еще со времен FidoNet "Антологии популярных песен", а также популярной шуточной песни "Что такое авторская песня?". В версии Чебыкина имеются, по-моему, все возможные виды и формы аккордов, так что для тестирования скрипта она подошла идеально.
Привет
Музыка: М.Леонидов
Слова: Д.Рубин
Подбор аккордов: Р.Чебыкин (Philigon Kender)Вступление:{ }{_Dm}{ }{_Bb}{ }{_A7}{ }(3 раза)
Прив{Dm}ет! Сегодня д{Dm(maj)7}ождь и скверно,
А мы не в{Dm7}иделись, н{Dm6}аверно,
Сто л{Gm}ет.{ (Gm6)}
{A}Тебе в метро? Скажи на м{Asus}илость,
А ты совс{A}ем не измен{A7}илась,
Hет-н{Dm}ет!{ B A7}
Прив{Dm}ет! А жить ты будешь д{Dm(maj)7}олго,
Я вспомин{Dm7}ал тебя вот т{D7}олько
В об{Gm}ед!{ Gm/A}
{Bb}Прости, конечно же,{Dm/F} нелепо
{E7}Кричать тебе на весь тролл{A7}ейбус:
"Прив{Dm}ет!"Прив{Dm}ет! Дождливо этим л{Dm(maj)7}етом...
{Dm7}{ }А впрочем, стоит ли об {Dm6}этом?
Ведь н{Gm}ет!..{ (Gm6)}
{A}{ }Тогда о чем? О сн{Asus}ах, о книгах?
И ч{A}ерт меня попутал кр{A7}икнуть
"Прив{Dm}ет!"{ B A7}
{Dm}Как жизнь? Hе то чтоб очень гл{Dm(maj)7}адко,
Hо, в общем, зн{Dm7}аешь, все в пор{D7}ядке -
Без б{Gm}ед;{ Gm/A}
{Bb }Дела отлично, как об{Dm/F}ычно,
А с л{E7}ичным... Hу, вот т{A7}олько с личным -
Прив{Dm}ет.{ H7}Прив{Em}ет! А дождь все не прох{Em(maj)7}одит,
{Em7}{ }А я с утра не по пог{Em6}оде
Од{Am}ет.{ (Am6)}
{H}Hаверно, я уже прост{Hsus}ужен,
Да б{H}ог с ним! Слушай, мн{H7}е твой нужен
Сов{Em}ет.{ C H7}
{Em}В конце концов, мне дела н{Em(maj)7}ету,
Реш{Em7}ишь ли ты, что {E7}я с приветом,
Иль н{Gm}ет, - { Am/H}
{C }Hо, может, черт возьм{Em/G}и, нам снова!..
Выходишь зд{F#7}есь?.. Hу, будь здор{H7}ова...
Прив{Em}ет...{ C H7}
Прив{Em}ет...{ C H7}
Прив{Em}ет...Комментарии:
1. Строго говоря, вместо большого количества достаточно сложных аккордов можно играть просто {_Dm}, {_Gm} и так далее. Hо в оригинале играется именно так, как здесь приведено.
2. Во вступлении и между куплетами иногда играют {_Dm} - {_Gm} - {_A7} вместо правильного {_Dm} - {_Bb} - {_A7}.
3. Практически всегда игнорируется модуляция (смена тональности) в третьем куплете.
Исходники вместе с примерами я выложил на GitHub.
Скрипт предполагает два вида аккордов: надстрочные и внутристрочные. Внутристрочные аккорды нужны при записи вступления (где попросту нет текста, над которым ставить аккорды) или при записи комментариев, как в примере выше. Задаются они при помощи фигурных скобок, внутри которых первым символом стоит знак подчеркивания: {_Am}.
Есть несколько допущений и ограничений:
- Действие скрипта распространяется только на те области документа, которые располагаются внутри элементов <div class="song">. Таких элементов может быть сколь угодно много.
- Скрипт предполагает, что каждый куплет завернут в тег <p>. Поскольку многие блог-платформы (и Drupal в том числе) автоматически заворачивают абзацы в этот тег, можно воспринимать его как данность.
- Скрипт раздвигает все строчки в куплетах, вне зависимости от наличия в них аккордов. Элегантного решения, позволяющего различать куплеты с аккордами и без, я не придумал. В песнях из "Последнего испытания" я все равно ставлю аккорды во всех строчках :)
- Символы { и } не экранируются ничем :( Т.е. предполагается, что в песне они не встречаются.
- Ввиду возможности обозначения одной и той же ноты несколькими способами, переходы вверх и вниз различаются. Переход вниз - всегда на бемоль, переходы вверх - всегда на диез. Скрипт понимает B и Bb как "си-бемоль", но при переходах всегда использует H.
- Чтобы разместить управляющие элементы для смены тональности, нужно воткнуть <div class="transposition"></div> в любое место внутри песни - причем это можно сделать произвольное количество раз (в примере выше это сделано дважды).
- Если аккорд нужно разместить над пустым местом (перед началом строки или после ее конца, можно перед ним или после него воткнуть произвольное количество пробелов, а то и вовсе отделить аккорд пустой структурой с произвольным количеством пробелов внутри { }. Пробелы, поставленные вне фигурных скобок, будут проигнорированы HTML-интерпретатором.
Пример использования можно также посмотреть на страничке, куда я выкладываю подобранные аккорды из "Последнего испытания".
P.S. Если кто из коллег по цеху это читает - потестируйте, пожалуйста! :)
Комментарии
LD
Вс, 2012-01-08 09:44
Link
Re: HTML-скрипт для автоматической транспозиции аккордов
что только люди не придумают, чтобы не учить сольфеджио :-)))
я не коллега, меня даже слово скрипт пугает. поэтому смогла только потыкать в буковки "на полтона вверх" и убедиться что таки, на полтона, и действительно вверх.
myx
Вс, 2012-01-08 11:16
Link
Re: HTML-скрипт для автоматической транспозиции аккордов
Сольфеджио - это мое больное место :) Я его так и не освоил, до сих пор малую сексту от большой на слух не отличаю (про то, чтобы спеть по нотам, я вообще молчу). Вот и приходится изворачиваться :)
dima.chertov
Вс, 2012-01-08 11:33
Link
Re: HTML-скрипт для автоматической транспозиции аккордов
Я сейчас учу сольфеджио потихоньку. Есть надежда, что освою его года за два. Так что - начать никогда не поздно!
А скрипт отличный, респект!!
Если хочешь, могу прислать хороший старый учебник Адольфа Даннхаузера "Solfege des solfeges", 1897 года. Качественная штука!
myx
Вс, 2012-01-08 11:38
Link
Re: HTML-скрипт для автоматической транспозиции аккордов
Спасибо, хочу! Он не на немецком, надеюсь? :)
dima.chertov
Вс, 2012-01-08 12:19
Link
Re: HTML-скрипт для автоматической транспозиции аккордов
Переведён на английский. Но сольфеджио - оно на всех языках сольфеджио, там и по-немецки справиться можно!
Я пришлю в среду, он у меня в офисе на компе.
myx
Вс, 2012-01-08 14:07
Link
Re: HTML-скрипт для автоматической транспозиции аккордов
Английский - это хорошо :) При всей интернациональности сольфеджио, сопровождающий его язык, полагаю, тоже немаловажен :)
Я был даже морально готов к французскому, я его еще помню, но вот с немецким у меня совсем плохо :)