Писане на ноти с GNU LilyPond

Posted by Kiril Kirov Mon, 05 Jan 2009 10:02:00 GMT

Преди празниците се появи една нова и интересна работа, с която решихме да се захванем. Имаме един клиент, който е посветил живота си на изучаването на българската народна музка. През годините той е обикалял страната и е записвал прилежно нотите на песните, които са се пеели в различните крайща. Резултатът е един колосален труд от хиляди народни песни, които са написани на ръка, с текстове и петолиния. Естествено единстения начин този труд да се запази за поколенията е той да бъде доведен до някаква цифрова форма, и евентуално след това да бъде издаден под формата на книги. Двете неща са силно свързани – за да се направи хубава книга, тези нотни текстове трябва да бъдат описани на компютър, с някаква нотация. След това трябва да се докарат до някакъв подходящ за печатане формат, примерно PostScript. Това разбира се, е една тежка задача и със сигурност много хора са я решавали по един или друг начин преди нас. Всъщност преди доста години (някъде около 1992 година) баща ми направи няколко книги с ноти за същия този клиент. За целта тогава беше използвал MusicTeX. Това е една от многото надстройки над TeX, конкретно тази е специализирана за писане на нотни текстове. Сигурен съм, че е бил един от първите в България, които са се занимавали с подобно нещо. Всъщност както тогава, така и сега нашата работа може да бъде свършена с TeX. Проблемът на този подход е, че там нотите се описват много подробно (и разточително), като за целта се изисква човек до голяма степен да интерпретира музиката. Няма да се впускам в подробности, защото едва ли ще мога да обясня добре проблема. Самият аз не съм особено музикално грамотен (да не кажа хич). Една от целите ни беше тези ноти да могат да се пишат от хора, които не разбират от музика и не разбират много от компютри. Първата система, на която попаднахме беше PMX/M-Tx. Тя предлага по-добра нотация за писане на ноти, която в последствие се транслира до MusixTeX с помощта на парсер. Проучвайки я попаднахме на няколко неприятни проблема. Най-напред липсата на каквато и да било документация, освен сравнително прости примери. Всъщност се оказа, че българската народна музика е уникална и в това отношение, има доста сложен и нетрадиционен нотен запис, който до голяма степен няма аналог. Друг проблем беше самият парсер, по някакви непонятни за мен причини, той е написан на FreePascal, като базовите му функции са написани на C, като библиотеки за FreePascal. Нищо особено против Pascal, като език, но явно писачите на FreePascal още не са разбрали, че на този свят има и машини различни от x86. Трябваше да правя виртуална машина или пък да работим на Windows, все неща с които не ми се занимава. Освен това трябваше сами да пишем документация как се работи с това нещо. Най-вероятно щеше да се наложи да бъркаме и из кода за да добавяме необходимите неща за нашата музика. По едно време имах идея да си направя парсер с yacc и lex за целта, отказах се много бързо – интересно ми е дали изобщо е възможно, при всички случаи не е за моята глава. Тогава попаднах на системата, която се оказа, че ни върши чудесна работа – GNU LilyPond. Написана е със C++ библиотеки, които се управляват от Scheme скриптове. Предлага хубава, сравнително проста и много добре документирана нотация за писане. За целта естествено има доста сложен парсер. Освен парсера, друг важен елемент на една такава система са шрифтовете. Тя очевидно трябва да си идва с някакви сложни нотни шрифтове, където има всички символи, които могат да се срещат на едно петолиние. Понеже това са песни, освен ноти там има и текст. Тук се набих в един глупав и много сложен, трупан с годините копютърен проблем свързан с шрифтовете. Системата използва Fontconfig за намиране и зареждане на TTF шрифтове, и Pango за визуализиране. Това е чудесно в случай, че човек работи с TTF шрифтове. Ние обаче искаме да направим хубава книга, а хубавите книги се правят с LaTeX. По тази причина LilyPond предлага(ше) да работи с TeX backend. Идеята е, човек да си пише нормално на LaTeX, а когато стигне до нотите да превклюи с команда в LilyPond режим, да си напише нотите и да продължи. Това е добро решение, но за да бъде идеално, LilyPond трябва да може да работи с METAFONT шрифтове. Естествено хората се бяха сетили за този проблем, но решението беше грозно, най-точното определение за него е хак. Някой беше ръгнал едни Scheme функции, които изпълнявайки външни команди намират къде по диска се намират Computer Modern шрифтовете, разчитат, че от самия TeX те ще са компилирани, правят свързан списък с всичко намерено и го подават към системата. Това нещо се дънеше много по-често от колкото работеше. Типично в техен стил Debian разработчиците бяха ръгнали там малко линуксизми и Debian-specific неща за да бачка при тях. Потроших няколко дни да показвам Scheme къде и как работи METAFONT системата. Нещата тръгнаха частично, когато забелязах, че LilyPond има нова версия, в която всички тези неща са разкарани с лаконично обяснение – “от сега нататък, системата работи само с Pango/Fontconfig”. Изпсувах и се отказах. Явно ще трябва да направим LaTeX да работи с TTF, въпреки че винаги TTF шрифтовете са били една идея по-грозни. Няма да задълбавам, вманиачаването на тема шрифтове е типично печатарска болест. Чудя се дали един нормален човек може да различи Times New Roman в Pango и METAFONT. Както и да е, ето какво се получава в крайна сметка.

Код на Lilypond:
%{
TD_178_1_11
%}

\version "2.11.65" 

\score {
\relative c' {
 \tempo 4 = 132
  \time 2/4
 fis8 g\noBeam a4 a2 c4 bes a g fis8( ees) ees([ d)] d2  \bar ":|:" 
 \repeat volta 2 { g4. fis8
 \break
 ees( d) c4 d d a'8( g) g4 fis8( ees) ees([ d)] }
 \alternative { { a'2~ a4 r4 } { d2~ d4 r4 } }
 \bar "||" 
}
\addlyrics { Ю- нак вър- ви през го- ри- ца зе- ле на, тю- тюн пу- ши със
лу- ли- ца чер- ве- на -на }
%
\layout {
  indent = #0
  line-width = 190\mm
  ragged-right=##f
}
%
\midi {
   \context {
      \Score
      tempoWholesPerMinute = #(ly:make-moment 132 4)
      }
   }
}

\header{
  opus = "ТД-178,1,11" 
  tagline = ##f
}

\paper  {
    myStaffSize = #20
    #(define fonts
    (make-pango-font-tree "Times New Roman" 
    "Nimbus Sans" 
    "Luxi Mono" 
    (/ myStaffSize 20)))
  }

Резултат:

Естествено не е проблем музиката, описана по този начин да се изсвири от компютъра. За целта LilyPond може да произведе MIDI файл. От там с един хубава софтуер за свирене на MIDI, човек може да си пусне акомпанимент с различни инструменти, като текстовете му се визуализират паралелно с музиката. Както е видно от сорс кода, на места се прескача парсера и се викат директно Scheme фунцкии. Това е много удобно в случаи, когато човек иска да обиколи граматиката и да извика функционалност, която е написал на по-ниско ниво. Още не сме стигнали до там, но едва ли ще минем без писане на Scheme.

Всъщност пиша всички тези неща в блога с определена цел. Цялата тази работа я вършим почти на ентусиазъм. Както много хора се досещат, нито българската държава, нито някоя частна организация се е разсипала да дава пари за подобни проекти. А за тази работа се иска много акъл и много време, ако трябва да таксуваме по пазарни цени нашия клиент, той най-вероятно просто ще се откаже. За това ми е интересно дали не може натрупаните знания и опит от този проект, да бъдат приложени другаде. Чудя се има ли други хора в България, които да се занимават с подобни неща. На всеки един композитор му се налага да ползва някаква подобна система. Имам подозрения обаче, че в България този проблем е решен по български. Сигурно се използва масово някоя комерсиална, графична система за писане, където едно подобно петолиние се въвежда с помощта на 5000 кликания с мишката. За работа в този стил е необходима огромна армия от Microsoft Certified Double-clickers, която няма как да не допуска огромно количество грешки.

Ако някой от четещите тази статия, се занимава с подобна работа, интересува се от подобни неща или пък иска да прави книга с музика – да се свърже с мен по електронната поща.

Васко Кръпката на Василовден 2

Posted by Kiril Kirov Sun, 04 Jan 2009 10:15:00 GMT

Отвратих се от телевизионната програма по празниците и по конкретно на нова година. Всички големи телевизии бяха заложили на сигурното – чалгата и печалбарството. Предаванията им бяха направени само и единствено в името на печалбата. Участниците се държаха изкуствено и превзето, демонстрирайки, че те са там просто на работа. Върха на изпразнените от съдържание превземки, беше в изпълненията на плейбек, на една извесна силиконирана чалга певица по голяма (и с претенции) българска телевизия. Нейното представяне може да се сравнява по баналност единствено с изявлението на президента минути преди това. Поради мързел и затъпяване, май и на двамата им диктуват в ушите какво точно да кажат. С онези слушалки, завряни в едното ухо, тип “Secret Service”. Бях потресен колко всъщност е пропаднала милата ни държава. Не знам дали чалгата беше причината, но на концерта в София се виждаха много малко хора. Опитвам се да правя аналогия с концерта на Smokie от преди няколко години, но това са несравними неща – дори е неправилно да слагам Smokie и чалга в един и същ текст. Бях се примирил, че нищо интересно няма да видя тази година по телевизията, когато на 1 януари случайно попаднах на предаването на Васко Кръпката по СКАТ. Направи ми силно впечатление и много ме изкефи. Типично в негов стил, Васко се държи абсолютно естествено. Този човек е в състояние без никаква организация, с един стол и една китара да направи невероятно, истинско шоу. Песните му на пръв поглед звучат малко еднообразно, но той компенсира това много масйсторски с импровизации, лафове и сценично поведение. Много актуално звучат вечните му хитове, като “Таратайка”, “Бюрократ” и “Къде е купона?” и т.н. В един момент той си призна, че предаването му е на запис, и че в момента на излъчването ще пие някъде с приятели. Това направо ме разби, единственото искренно изявление на водещ за всичките празници. Предната вечер гледах как някаква ужасно тъпа водеща се превъзнася колко и било приятно с публиката. От далече й личаше, че няма никакво желание да е там и, че очевидно го прави за пари – тези неща трудно се прикриват. Не може човек скрит зад хонорара си да се държи естествено. Васко обаче може да се държи естествено – от далече му личи, че е влюбен в музиката и не прави шоу за пари (или поне не само за пари). Кога ли хората ще разберат, че целия този комерс е дразнещ и излишен. Музиката и сценичното поведение са изкуство, когато на един човек не му се отдава или просто не му се занимава в момента, той трябва да си намери друга работа. Хубаво е, че СКАТ покрай болните лидери на партии и криворазбания национализъм, пускат изяви и на нормални и готини хора.

Bob Marley 1

Posted by Kiril Kirov Tue, 27 Nov 2007 21:45:00 GMT

Не спирам да го слушам от няколко дни насам. До скоро знаех само една-две негови песни, и то само по мелодията. Обаче един ден попаднах по заобиколен начин на доста голяма музикална колекция и реших да я дръпна цялата. Оказа се, че вътре има дискографии на много известни изпълнители. Тъй като ми се слушаше нещо ново реших да го пробвам. В момента си въртя всичките му песни на random. Интересното е, че изобщо не ми омръзва и не ме дразни, а в същото време не е скучно. Много върви в студеното и мрачно време, действа още по-добре в комбинация с много светлина и някоя хубава тъмна бира. Вдъхва ми лятно и “Jamaica настроение”. Започвам да си мисля за палми, полуголи жени и алкохол. Спомням си колко е важно човек да бъде пълен непукист и неизбежно започва адски много да ме мързи. Предвид всички тези неща, направо не ми се мърда от вкъщи. С голямо нежелание излизам от нас за да се тъпча в миризливия градски транспорт, или да джапам по калните локви на нашата улица.

Online радио 1

Posted by Kiril Kirov Mon, 12 Mar 2007 20:24:00 GMT

Преди време много се бях запалил по Last.fm. Самата идея за огромна колекция от песни и възможноста човек да пропуска тези, които не му харесват много ме изкефи. Е да ама се оказа, че всъщност песните не са толкова много. Не знам как е ако човек си плати, но безплатната версия повтаря доста малък асортимент от песни. Въпреки, че давам “Next” доста често, се издразних от факта, че на няколко пъти в продължения на 10-15 минути се опита да ми пробута една и съща песен. Не съм му пробвал разните advanced features, като user generated streams и т.н., слушам си само каналите, които са вкарани по подразбиране в Amarok. Обаче се оказа, че там няма jazz канал. Онази вечер седнах доста изморен на компютъра с чаша вино в ръка и ми се слушаше точно това. Разтърсих се в Интернет и след, като смених няколко боклучиви, бавни и нискокачествени радиостанции попаднах на тази. Оказа се изненадващо добра, няма никакви реклами, качествето е прилично, скоростта също. Действа ми успокояващо и отпускащо…

Билети за Iron Maiden

Posted by Kiril Kirov Wed, 07 Mar 2007 11:08:00 GMT

Ето сега ще пробвам как Typo ще се справи с постване със задна дата. Снощи изгубих прекалено много време ровейки из възможностите му и така и не седнах да напиша няколко реда за случката с билетите за Iron Maiden. И така, като голям техен фен, реших да отида в 9:00 сутринта на 7 март пред Orange Center за да си купя билети за концерта. Бях решил да взема 2 въпреки, че още не съм решил кой искам да заведа с мен на концерта. Надявам се някой да си заслужи това право до 4.06.2007. Незнам защо, въпреки предупрежденията на сайта на Ticketpro не очаквах да има много хора. Оказах се най-отзад на една доста внушителна опашка от най-разнообразни младежи. От най-нормално изглеждащи до върли метали, с черни дрехи, вериги, дълги коси, мешки и всичко както си му е реда. Точно както ходех и аз в един специфичен период от пубертета. Мислех, че чакането на опашката ще ми отнеме целия ден, но за мое очудване тя се движеше доста бързо. За по-малко от час успях да напредна почти до вратата на магазина. Видях, че един човек от магазина пукса по 5 човека вътре, пред мен бяха една компаниика от хора, които влязоха вкупом и аз останах да чакам пред вратата. Зад мен имаше две сладки девойчета, с които се говорих на няколко пъти докато чакахме. И в този момент се случи нещо неочаквано, фатално, малоумно, точно по български и в най-неподходящ момент. След кратка суетня в магазина излезе добре изглеждащата какичка, която продаваше билетите за да ни съобщи, че им е спрял интернета. Били се обадили на БТК и те били казали, че ще го оправят. В този момент се прояви зялата ми професионална деформация. Много цветно си представих как вися там още няколко часа гледайки през витрината екрана за нямане на връзка на Internet Explorer. Не бях много далече от истината. Действително висяхме там доста време, повече от час. През това време се случваха доста интересни неща. Тъй като бях точно на вратата на магазина се налагаше да обяснявам на любопитните миновачи – “Абе вие за какво чакате тука?”, “Какво продават тук?”, “А магазина работи ли?”, “Момчета за какво е опашката?” и т.н. Поне лафа с другите чакащи на опашката вървеше и всъщност си прекарахме доста весело. Жалко, че хората от магазина не се навиха на мойта идея да пуснем Интернет през dial-up modem или GPRS. Явно въобще си нямаха представа за какво иде реч. Но поне наистина се оказа, че проблема е бил в БТК или трасетата. В началото цялата опашка имаше грозните подозрения, че катилите просто трябва да си рестартират ADSL модема. Както и да е, важното е, че се сдобих с билети, сега остава и Iron Maiden наистина да доидат. Дано не се наложи да връщам билетите, както при последното им “идване”.