@end ignore
+@item
+Compound time signatures are now supported by the @code{\compoundMeter} command,
+which can be used instead of @code{\time}:
+@lilypond
+\relative c'' {
+ \compoundMeter #'(3 1 8)
+ c8 c c c
+ \compoundMeter #'((2 8) (5 8))
+ c8 c c c c c c
+ \compoundMeter #'((1 2 3 8) (1 4) (3 8))
+ c8 c c c c c c4 c8 c c
+}
+@end lilypond
+
+@item
+Lyrics above a staff must have their @code{staff-affinity} set to
+@code{DOWN} or must have their @code{alignAboveContext} property
+set in order to be properly aligned. For more information, see
+@ruser{Placing lyrics vertically}.
+
@item
@code{stringTunings} property values have changed from a list of
semitones above middle C to a list of LilyPond pitch values.
* Issue classification::
* Adding issues to the tracker::
* Summary of project status::
-* Finding the cause of a regression::
@end menu
@enumerate
@item
-Skim through every section of this chapter, @ref{Issues}. Read in
-detail any sections called @qq{Bug Squad...}, or any page linked
-from @ref{Bug Squad checklists}.
+Read every section of this chapter, @ref{Issues}.
@item
If you do not have one already, create a gmail account and send
Issues that only affect specific operating systems.
+@subheading Patch (optional)
+
+@itemize
+
+@item
+Patch-new: the patch has not been checked for @qq{obvious}
+mistakes. When in doubt, use this tag.
+
+@item
+Patch-review: the patch has no @qq{obvious} mistakes (as checked
+by the Patch Meister), and is ready for review from main
+developers.
+
+Developers with git push ability can use this category, skipping
+over @code{patch-new}.
+
+@item
+Patch-needs_work: a developer has some concerns about the patch.
+This does not necessarily mean that the patch must be changed; in
+some cases, the developer's concerns can be resolved simply by
+discussion the situation or providing notation examples.
+
+If the patch is updated, the category should be changed to
+@code{patch-new} (for normal contributors) or @code{patch-new}
+(for developers who are very confident about their patch).
+
+@item
+Patch-abandoned: the author has not responded to review comments
+for a few months.
+
+@end itemize
@subheading Other items (optional)
In particular, anything that breaks a regression test is a
regression.
-@item
-Patch: a patch to fix an issue is attached.
-
@item
Frog: the fix is believed to be suitable for a new contributor
(does not require a great deal of knowledge about LilyPond). The
email should contain a link to the issue you just added.
-
@node Summary of project status
@section Summary of project status
-The best overview of our current status is given by the grid view:
+@subsubheading Project overview
+
+Grid view provides the best overview:
@example
@uref{http://code.google.com/p/lilypond/issues/list?mode=grid&y=Priority&x=Type&cells=ids}
@end example
-Also of interest might be the issues hindering future development:
+@subsubheading Hindering development
+
+These issues stop or slow development work:
@example
@uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:Maintainability&mode=grid&y=Priority&x=Type&cells=ids}
@end example
-Finally, issues tagged with @code{Frog} indicates a task suitable
-for a relatively new contributor. The time given is a quick
+@subsubheading Easy tasks
+
+Issues tagged with @code{Frog} indicates a task suitable for a
+relatively new contributor. The time given is a quick
(inaccurate) estimate of the time required for somebody who is
familiar with material in this manual, but does not know anything
else about LilyPond development.
@uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:Frog&mode=grid&y=Priority&x=Type&cells=ids}
@end example
+@subsubheading Patches to review
-@node Finding the cause of a regression
-@section Finding the cause of a regression
-
-@warning{This is not a @qq{simple} task; it requires a fair amount
-of technical knowledge.}
-
-Git has special functionality to help tracking down the exact
-commit which causes a problem. See the git manual page for
-@code{git bisect}. This is a job that non-programmers can do,
-although it requires familiarity with git, ability to compile
-LilyPond, and generally a fair amount of technical knowledge. A
-brief summary is given below, but you may need to consult other
-documentation for in-depth explanations.
-
-Even if you are not familiar with git or are not able to compile
-LilyPond you can still help to narrow down the cause of a
-regression simply by downloading the binary releases of different
-LilyPond versions and testing them for the regression. Knowing
-which version of LilyPond first exhibited the regression is
-helpful to a developer as it shortens the @code{git bisect}
-procedure.
-
-Once a problematic commit is identified, the programmers' job is
-much easier. In fact, for most regression bugs, the majority of
-the time is spent simply finding the problematic commit.
-
-More information is in @ref{Regression tests}.
-
-@subheading git bisect setup
-
-We need to set up the bisect for each problem we want to
-investigate.
-
-Suppose we have an input file which compiled in version 2.13.32,
-but fails in version 2.13.38 and above.
-
-@enumerate
-@item
-Begin the process:
-
-@example
-git bisect start
-@end example
-
-@item
-Give it the earliest known bad tag:
-
-@example
-git bisect bad release/2.13.38-1
-@end example
-
-(you can see tags with: @code{git tag} )
-
-@item
-Give it the latest known good tag:
-
-@example
-git bisect good release/2.13.32-1
-@end example
-
-You should now see something like:
-@example
-Bisecting: 195 revisions left to test after this (roughly 8 steps)
-[b17e2f3d7a5853a30f7d5a3cdc6b5079e77a3d2a] Web: Announcement
-update for the new @qq{LilyPond Report}.
-@end example
-
-@end enumerate
-
-@subheading git bisect actual
-
-@enumerate
-
-@item
-Compile the source:
-
-@example
-make
-@end example
-
-@item
-Test your input file:
-
-@example
-out/bin/lilypond test.ly
-@end example
-
-@item
-Test results?
-
-@itemize
-@item
-Does it crash, or is the output bad? If so:
+Patches which have no @qq{obvious} problems:
@example
-git bisect bad
+@uref{http://code.google.com/p/lilypond/issues/list?can=2&q=label:patch-review}
@end example
-@item
-Does your input file produce good output? If so:
-@example
-git bisect good
-@end example
-@end itemize
-
-@item
-Once the exact problem commit has been identified, git will inform
-you with a message like:
-
-@example
-6d28aebbaaab1be9961a00bf15a1ef93acb91e30 is the first bad commit
-%%% ... blah blah blah ...
-@end example
-
-If there is still a range of commits, then git will automatically
-select a new version for you to test. Go to step #1.
-
-@end enumerate
-
-@subheading Recommendation: use two terminal windows
-
-@itemize
-@item
-One window is open to the @code{build/} directory, and alternates
-between these commands:
-
-@example
-make
-out/bin/lilypond test.ly
-@end example
-
-@item
-One window is open to the top source directory, and alternates
-between these commands:
-
-@example
-git bisect good
-git bisect bad
-@end example
-
-@end itemize
In order to avoid breaking LilyPond, it is important to verify that
the regression tests succeed, and that no unwanted changes are
introduced into the output. This process is described in
-@ref{Identifying code regressions}.
+@ref{Regtest comparison}.
@subheading Typical developer's edit/compile/test cycle
(approximately 1 GB)
@example
-@uref{http://files.lilynet.net/ubuntu-lilydev-remix-1.0.iso}
+@uref{http://files.lilynet.net/ubuntu-lilydev-remix-1.1.iso}
@end example
@advanced{Some users might want these files, but if you don't
recognize what they are, then you don't want them:
@*
-@uref{http://files.lilynet.net/ubuntu-lilydev-remix-1.0.iso.md5}
-@*
-@uref{http://files.lilynet.net/ubuntu-lilydev-remix-1.0.iso.torrent}
+@uref{http://files.lilynet.net/ubuntu-lilydev-remix-1.1.iso.md5}
+@c @*
+@c @uref{http://files.lilynet.net/ubuntu-lilydev-remix-1.0.iso.torrent}
}
@item
-Create a new @qq{virtual machine} inside your virtualization
+Create a music new @qq{virtual machine} inside your virtualization
software.
If possible, use at least 700 MB of RAM (1GB would be better) for
@enumerate
@item
-When @file{lilydev2.iso} boots, it shows an ISOLINUX
+When @file{lilydev.iso} boots, it shows an ISOLINUX
@code{boot:} prompt. Type:
@example
* Introduction to regression tests::
* Precompiled regression tests::
* Compiling regression tests::
-* Identifying code regressions::
+* Regtest comparison::
+* Finding the cause of a regression::
* Memory and coverage tests::
* MusicXML tests::
@end menu
@ref{Requirements for building documentation}.
-@node Identifying code regressions
-@section Identifying code regressions
+@node Regtest comparison
+@section Regtest comparison
Before modified code is committed to master, a regression test
comparison must be completed to ensure that the changes have
@end enumerate
+@node Finding the cause of a regression
+@section Finding the cause of a regression
+
+Git has special functionality to help tracking down the exact
+commit which causes a problem. See the git manual page for
+@code{git bisect}. This is a job that non-programmers can do,
+although it requires familiarity with git, ability to compile
+LilyPond, and generally a fair amount of technical knowledge. A
+brief summary is given below, but you may need to consult other
+documentation for in-depth explanations.
+
+Even if you are not familiar with git or are not able to compile
+LilyPond you can still help to narrow down the cause of a
+regression simply by downloading the binary releases of different
+LilyPond versions and testing them for the regression. Knowing
+which version of LilyPond first exhibited the regression is
+helpful to a developer as it shortens the @code{git bisect}
+procedure.
+
+Once a problematic commit is identified, the programmers' job is
+much easier. In fact, for most regression bugs, the majority of
+the time is spent simply finding the problematic commit.
+
+More information is in @ref{Regression tests}.
+
+@subheading git bisect setup
+
+We need to set up the bisect for each problem we want to
+investigate.
+
+Suppose we have an input file which compiled in version 2.13.32,
+but fails in version 2.13.38 and above.
+
+@enumerate
+@item
+Begin the process:
+
+@example
+git bisect start
+@end example
+
+@item
+Give it the earliest known bad tag:
+
+@example
+git bisect bad release/2.13.38-1
+@end example
+
+(you can see tags with: @code{git tag} )
+
+@item
+Give it the latest known good tag:
+
+@example
+git bisect good release/2.13.32-1
+@end example
+
+You should now see something like:
+@example
+Bisecting: 195 revisions left to test after this (roughly 8 steps)
+[b17e2f3d7a5853a30f7d5a3cdc6b5079e77a3d2a] Web: Announcement
+update for the new @qq{LilyPond Report}.
+@end example
+
+@end enumerate
+
+@subheading git bisect actual
+
+@enumerate
+
+@item
+Compile the source:
+
+@example
+make
+@end example
+
+@item
+Test your input file:
+
+@example
+out/bin/lilypond test.ly
+@end example
+
+@item
+Test results?
+
+@itemize
+@item
+Does it crash, or is the output bad? If so:
+
+@example
+git bisect bad
+@end example
+
+@item
+Does your input file produce good output? If so:
+
+@example
+git bisect good
+@end example
+
+@end itemize
+
+@item
+Once the exact problem commit has been identified, git will inform
+you with a message like:
+
+@example
+6d28aebbaaab1be9961a00bf15a1ef93acb91e30 is the first bad commit
+%%% ... blah blah blah ...
+@end example
+
+If there is still a range of commits, then git will automatically
+select a new version for you to test. Go to step #1.
+
+@end enumerate
+
+@subheading Recommendation: use two terminal windows
+
+@itemize
+@item
+One window is open to the @code{build/} directory, and alternates
+between these commands:
+
+@example
+make
+out/bin/lilypond test.ly
+@end example
+
+@item
+One window is open to the top source directory, and alternates
+between these commands:
+
+@example
+git bisect good
+git bisect bad
+@end example
+
+@end itemize
+
+
@node Memory and coverage tests
@section Memory and coverage tests
patch set will be posted to Rietveld, and you will be given a URL
for your patch.
+@warning{Some installations of git-cl fail when uploading a patch
+set that includes a .scm file. When this happens, it can
+generally be fixed by editing the file @file{/etc/mime.types}.
+Add a line to this file containing @code{text/x-script.scheme scm}.}
+
@subsubheading Announcing your patch set
You should then announce the patch by logging into the code review
@section Música vocal
@translationof Vocal music
-@c TODO: inspirational headword
+@lilypondfile[quote]{vocal-headword.ly}
Esta sección explica cómo tipografiar música vocal, y cómo asegurarse
de que la letra se alinea con las notas de su melodía correspondiente.
Copyright @copyright{} 2009--2011 by the authors.
@quotation
-GNU フリー文書利用許諾契約書バージョン 1.1
-またはフリー ソフトウェア財団によって発行されたその後のバージョンの@c
-約定に従う限り、@c
-このドキュメントを複製、変更する許可を与えます。@c
-変更不可部分はありません。@c
-この利用許諾契約書のコピーは
-``GNU フリー文書利用許諾契約書'' という章に含まれています。
+GNU フリー文書利用許諾契約書バージョン 1.1 またはフリー ソフトウェア財団によって
+発行されたその後のバージョンの約定に従う限り、このドキュメントを複製、変更する
+許可を与えます。
+変更不可部分はありません。
+この利用許諾契約書のコピーは ``GNU フリー文書利用許諾契約書'' という章に含まれて
+います。
@end quotation
@end copying
+
+@c Info files are no longer installed in a subdirectory, images are
+@c expected to be found in lilypond/ subdirectory.
+@dircategory GNU LilyPond --- 楽譜譜刻プログラム
+@direntry
+* LilyPond 学習マニュアル: (lilypond-learning). ここから始めてください。
+* 音楽用語集: (music-glossary). 非英語圏のユーザ向け。
+* LilyPond: (lilypond-notation). LilyPond 記譜法リファレンス。
+* LilyPond コード断片集: (lilypond-snippets). ちょっとしたテクニック、@c
+TIPS、それに例。
+* LilyPond 内部リファレンス: (lilypond-internals). 調整するための定義。
+* LilyPond アプリケーション使用方法: (lilypond-usage). アプリケーションを@c
+インスールして、実行する方法。
+* LilyPond Web サイト: (lilypond-web). 新しい Web サイトのプレビュー。
+* lilypond: (lilypond-usage)lilypond を実行する. LilyPond を呼び出す。
+* abc2ly: (lilypond-usage)abc2ly を呼び出す. ABC をインポートする。
+* convert-ly: (lilypond-usage)convert-ly でファイルを更新する. 古い LilyPond バージョン。
+* etf2ly: (lilypond-usage)etf2ly を呼び出す. Finale をインポートする。
+* lilypond-book: (lilypond-usage)lilypond-book. 文章と楽譜を統合する。
+* midi2ly: (lilypond-usage)midi2ly を呼び出す. MIDI をインポートする。
+* musicxml2ly: (lilypond-usage)musicxml2ly を呼び出す. MusicXML をインポートする。
+@end direntry
+
+
@c TITLE PAGE
@ifnottex
@node Top
@titlepage
@title LilyPond
-@subtitle The music typesetter
-@titlefont{General Information}
+@subtitle 楽譜譜刻プログラム
+@titlefont{全般的な情報}
@author LilyPond 開発チーム
@vskip 0pt plus 1filll
LilyPond は、可能な限り高品位な楽譜を生み出すことを目的とする、@c
オープン ソースの楽譜作成プログラムです。@c
このフリー ソフトウェアは、伝統的な彫版の楽譜の美しさを@c
-コンピュータ プリントアウトで実現します。
+コンピュータ プリントアウトで実現します。@c
+LilyPond はフリーソフトウェアであり、@uref{http://gnu.org,GNU プロジェクト}
+の一部です。
+
@divClass{align-right}
@ref{導入部} を読んで、LilyPond をもっと知ってください!
@divClass{hide}
@menu
-* 導入部:: Start here to creating sheet music.
-* ダウンロード:: Get LilyPond.
-* マニュアル:: Read The Fine Manuals (RTFM).
-* Community:: Contact other users.
+* 導入部:: ここから始めて、楽譜を作ってください。
+* ダウンロード:: LilyPond の入手方法。
+* マニュアル:: マニュアルを読んでください。
+* Community:: 他のユーザとの交流。
@end menu
@divEnd
@c LilyPond program.
@end ignore
-@c Info files are no longer installed in a subdirectory, images are
-@c expected to be found in lilypond/ subdirectory.
-@dircategory GNU LilyPond --- 楽譜譜刻プログラム
-@direntry
-* LilyPond Learning Manual: (lilypond-learning). Start here.
-* Music Glossary: (music-glossary). For non-English users.
-* LilyPond: (lilypond-notation). LilyPond Notation Reference.
-* LilyPond Snippets: (lilypond-snippets). Short tricks, tips, and examples.
-* LilyPond Internals Reference: (lilypond-internals). Definitions for tweaking.
-* LilyPond Application Usage: (lilypond-application). Installing and running applications.
-* LilyPond Website: (lilypond-general). Preview of new website.
-* abc2ly: (lilypond-application)Invoking abc2ly. Importing ABC.
-* convert-ly: (lilypond-application)Updating files with convert-ly. Older LilyPond versions.
-* etf2ly: (lilypond-application)Invoking etf2ly. Importing Finale.
-* lilypond-book: (lilypond-application)LilyPond-book. Integrating text and music.
-* midi2ly: (lilypond-application)Invoking midi2ly. Importing MIDI.
-* musicxml2ly: (lilypond-application)Invoking musicxml2ly. Importing MusicXML.
-@end direntry
-
-
@c FIXME: this still doesn't solve the broken links in pdf and big
@c html; we'll need a bunch of @iftext and stuff in here. -gp
@c ****************** SPECIAL MACROS FOR WEB MANUAL ************
@macro docLinkSplit{name,base,webLink}
@ifclear web_version
- @uref{../\base\/index.html, \name\ (split HTML)}
+ @uref{../\base\/index.html, \name\ (ページ毎に分割された HTML)}
@end ifclear
@ifset web_version
\webLink\
@macro docLinkBig{name,base,webLink}
@ifclear web_version
- @uref{../\base\-big-page.html, \name\ (big HTML)}
+ @uref{../\base\-big-page.html, \name\ (1 つの大きな HTML)}
@end ifclear
@ifset web_version
\webLink\
@item @docLinkSplit{\name\,\base\,\split\} @minus{}
このマニュアルはいくつもの HTML ページに分割されています。
- @*@ @ @emph{(small download for each page)}
+ @*@ @ @emph{(ページ毎の小さなダウンロード)}
@item @docLinkBig{\name\,\base\,\big\} @minus{}
このマニュアルは 1 つの巨大な HTML ページです。
- @*@ @ @emph{(large single download, \bigsize\)}
+ @*@ @ @emph{(大きな単一のダウンロード, \bigsize\)}
@item @docLinkPdf{\name\,\base\,\pdf\} @minus{}
日本語では PDF 形式での提供はありません。
- @*@ @ @emph{(large single download, \pdfsize\)}
+ @*@ @ @emph{(大きな単一のダウンロード, \pdfsize\)}
@end itemize
@end macro
+@ifhtml
+@macro contactUsAbout{topic}
+
+@divClass{heading-center}
+@divClass{contactBox}
+If you are aware of any other \topic\ which could be listed here,
+please let us know by following the instructions on
+@ref{Bug reports}.
+
+@divEnd
+@divEnd
+
+@end macro
+@end ifhtml
+
+@ifnothtml
+@macro contactUsAbout{topic}
+@cartouche
+If you are aware of any other \topic\ which could be listed here,
+please let us know by following the instructions on
+@ref{Bug reports}.
+
+@end cartouche
+
+@end macro
+@end ifnothtml
+
@include web/introduction.itexi
@include web/download.itexi
@include web/manuals.itexi
@c -*- coding: utf-8; mode: texinfo; documentlanguage: ja -*-
@ignore
- Translation of GIT committish: 9a65042d49324f2e3dff18c4b0858def81232eea
+ Translation of GIT committish: 42ae342ba877dc8f26cabb5cc3937a6d3cdb4066
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
@unnumbered マニュアル
@translationof Manuals
+@macro details{reference}
+@spanClass{detail}
+(@ref{\reference\, \reference\} の詳細)
+@spanEnd
+@end macro
+
@divClass{heading-center}
@ifclear web_version
@heading LilyPond @version 用のドキュメント
@end ifclear
@ifset web_version
@heading LilyPond @versionStable 用のドキュメント
- @heading Manuals for LilyPond @versionStable
@end ifset
@divEnd
-@c TODO: do we want these links to be in larger text / bold ? CSS.
+@divClass{link-headings}
-@c if you change this page, also change All.
@divClass{column-center-top}
@subheading 導入部
@item @ref{テキスト入力}:
LilyPond は @strong{テキスト ベース} の楽譜作成プログラムです。@c
-ã\81\93ã\81®ã\82³ã\83³ã\82»ã\83\97ã\83\88ã\81«é¦´æ\9f\93ã\81¿ã\81\8cç\84¡ã\81\84ã\81®ã\81§ã\81\82ã\82\8cã\81°ã\80\81ä»\8aã\81\99ã\81\90このドキュメントを読んでください!
+ã\81¾ã\81\9aæ\9c\80å\88\9dã\81«このドキュメントを読んでください!
-@item @ref{学習}:
+@item @ifWebLinks{@manualStableLearningSplitNoName,@rlearningnamed{Top,学習}}
@qq{必読} のやさしい LilyPond 入門書です。
+@details{学習}
-@item @ref{用語集}:
+@item @ifWebLinks{@manualStableGlossarySplitNoName,@rglosnamed{Top,用語集}}
@emph{(副読本)}
音楽用語についての説明と、
英語の音楽用語に馴染みの無いユーザのための訳語を提供します。
+@details{用語集}
-@item @ref{エッセー}:
+@item @ifWebLinks{@manualStableEssaySplitNoName,@ressaynamed{Top,Essay}}
@emph{(副読本)}
-譜刻プロセスについての背景と、19 世紀の楽譜の審美性。
+コンピュータによる譜刻についての背景。
+@details{エッセー}
@end itemize
@itemize
-@item @ref{記譜法}:
-このドキュメントの主要部です:
-楽譜作成についての詳しい情報を提供します。
+@item @ifWebLinks{@manualStableNotationSplitNoName,@rusernamed{Top,記譜法}}
+構文リファレンス。
+@details{記譜法}
-@item @ref{使用方法}:
-ã\83\97ã\83ã\82°ã\83©ã\83 ã\81®å®\9fé\9a\9bã\81¨ã\80\81ã\82ªã\83\9aã\83¬ã\83¼ã\82·ã\83§ã\83³ ã\82·ã\82¹ã\83\86ã\83 ç\89¹æ\9c\89ã\81®å\95\8fé¡\8cã\81«ã\81¤ã\81\84ã\81¦@c
-議論します。
+@item @ifWebLinks{@manualStableUsageSplitNoName,@rprogramnamed{Top,使用方法}}
+ã\81\93ã\81®ã\83\97ã\83ã\82°ã\83©ã\83 ã\81®å®\9fè¡\8cæ\96¹æ³\95ã\80\82
+@details{使用方法}
-@item @ref{コード断片集}:
-ちょっとしたトリック、秘訣、例。
+@item @ifWebLinks{@manualStableSnippetsSplitNoName,@rlsrnamed{Top,Snippets}}
+ちょっとしたトリック、秘訣。
+@details{コード断片集}
@end itemize
@itemize
@item @ref{FAQ}:
-FAQ の回答へのリンク。
+頻繁に質問されること。
+
+@item @ref{Top, Web}:
+このドキュメント。
+@details{Web}
-@item @ref{変更点}:
-最新のメジャー バージョンから変更された点。
+@item @ifWebLinks{@manualStableChangesSplitNoName,@rchangesnamed{Top,Changes}}
+変更点。
+@details{変更点}
-@item @ref{拡張}:
-LilyPond での思いつきの調整をプログラミングします。
+@item @ifWebLinks{@manualStableExtendingSplitNoName,@rextendnamed{Top,Extending}}
+変則的な調整。
+@details{拡張}
-@item @ref{内部リファレンス}:
-調整を行うために必要となる、LilyPond の内部構造についての情報。
+@item @ifWebLinks{@manualStableInternalsSplitNoName,@rinternalsnamed{Top,Internals}}
+調整のためのリファレンス。
+@details{内部リファレンス}
@end itemize
非英語圏の読者のための翻訳状況。
@item @ref{すべて}:
-ã\82¯ã\82¤ã\83\83ã\82¯ ã\83ªã\83³ã\82¯ã\80\81ã\83\80ã\82¦ã\83³ã\83ã\83¼ã\83\89å\8f¯è\83½ã\81ªã\83\9eã\83\8bã\83¥ã\82¢ã\83«ã\80\81ã\81\9dã\82\8cã\81«古いマニュアル。
+ã\83\80ã\82¦ã\83³ã\83ã\83¼ã\83\89å\8f¯è\83½ã\81ªã\83\90ã\83¼ã\82¸ã\83§ã\83³ã\81¨古いマニュアル。
@item @ref{Development}:
開発バージョンのためのマニュアル。
@divClass{hide}
@menu
-* 学習:: 学習
-* 用語集:: 用語集
-* エッセー:: エッセー
-* 記譜法:: リファレンス
-* 使用方法:: 使用方法
-* コード断片集:: コード断片集
-* Web:: Web
-* FAQ:: FAQ
-* 変更点:: ニュース
+* 学習:: 学習
+* 用語集:: 用語集
+* エッセー:: エッセー
+* 記譜法:: リファレンス
+* 使用方法:: 使用方法
+* コード断片集:: コード断片集
+* FAQ:: FAQ
+* Web:: Web
+* 変更点:: ニュース
* 拡張:: プログラミング
* 内部リファレンス::内部リファレンス
* 翻訳済み:: 翻訳
* すべて:: すべてのマニュアル
-* FDL:: ライセンス
+* FDL:: ライセンス
@end menu
@divEnd
@docLinks{学習, learning,
@rlearningnamed{Top,学習},
- @manualStableLearningSplit-ja,
- @manualStableLearningBig-ja, 1.5 MB,
- @manualStableLearningPdf-ja, 3 MB}
+ @manualStableLearningSplit,
+ @manualStableLearningBig, 1.5 MB,
+ @manualStableLearningPdf, 3 MB}
@divEnd
-@ignore
-@subheading お読みください
-
-@itemize
-
-@item @rlearningnamed{Top,学習マニュアル}:
-マニュアルをこのページと同じフォーマットで読むことができます。
-
-@end itemize
-
-@subheading すべてのフォーマット
-
-@divClass{keep-bullets}
-@itemize
-
-@item @uref{../learning/index.html, 学習マニュアル (分割 HTML)}:
-このマニュアルはいくつもの HTML ページに分割されています。@c
-@emph{(ページごとの小さなダウンロード)}
-
-@item @uref{../learning-big-page.html, 学習マニュアル (大きな HTML)}:
-このマニュアルは 1 つの巨大な HTML ページです。@c
-@emph{(約 10? Mb の大きなダウンロード)}
-
-@c @item @uref{../learning.pdf, learning.pdf}:
-@item learning.pdf:
-日本語では PDF 形式での提供はありません。
-
-@c TODO: should make links to info?
-@c @item @uref{../TODO, learning.info}:
-@c GNU info format for documentation. link broken.
-
-@end itemize
-@divEnd
-@divEnd
-@end ignore
@node 用語集
@unnumberedsec 用語集
@docLinks{音楽用語集, music-glossary,
@rglosnamed{Top,音楽用語集},
- @manualStableGlossarySplit-ja,
- @manualStableGlossaryBig-ja, 1 MB,
- @manualStableGlossaryPdf-ja, 1.5 MB}
-
-@divEnd
-
-
-@ignore
-@divClass{column-right-bottom}
-@subheading お読みください
-
-@itemize
-
-@item @rglosnamed{Top,音楽用語集}:
-マニュアルをこのページと同じフォーマットで読むことができます。
-
-@end itemize
-
-@subheading すべてのフォーマット
-
-@divClass{keep-bullets}
-@itemize
-
-@item @uref{../music-glossary/index.html, 音楽用語集 (分割 HTML)}:
-このマニュアルはいくつもの HTML ページに分割されています。@c
-@emph{(ページごとの小さなダウンロード)}
-
-@item @uref{../music-glossary-big-page.html, 音楽用語集 (大きな HTML)}:
-このマニュアルは 1 つの巨大な HTML ページです。@c
-@emph{(約 10? Mb の大きなダウンロード)}
+ @manualStableGlossarySplit,
+ @manualStableGlossaryBig, 1 MB,
+ @manualStableGlossaryPdf, 1.5 MB}
-@c @item @uref{../music-glossary.pdf, glossary.pdf}:
-@item glossary.pdf:
-日本語では PDF 形式での提供はありません。
-
-@c @item @uref{../TODO, glossary.info}:
-@c GNU info format for documentation. TODO, link broken.
-
-@end itemize
@divEnd
-@divEnd
-@end ignore
@node エッセー
@docLinks{エッセー, essay,
@ressaynamed{Top,エッセー},
- @manualStableEssaySplit-ja,
- @manualStableEssayBig-ja, 2 MB,
- @manualStableEssayPdf-ja, 2.5 MB}
-
-@divEnd
-
-
-@ignore
-@divClass{column-right-bottom}
-@subheading お読みください
-
-@itemize
-
-@item @ressaynamed{Top,エッセー}:
-マニュアルをこのページと同じフォーマットで読むことができます。
-
-@end itemize
-
-@subheading すべてのフォーマット
-
-@divClass{keep-bullets}
-@itemize
-
-@item @uref{../essay/index.html, エッセー (分割 HTML)}:
-このマニュアルはいくつもの HTML ページに分割されています。@c
-@emph{(ページごとの小さなダウンロード)}
-
-@item @uref{../essay-big-page.html, エッセー (大きな HTML)}:
-このマニュアルは 1 つの巨大な HTML ページです。@c
-@emph{(約 ?? Mb の大きなダウンロード)}
-
-@c @item @uref{../essay.pdf, essay.pdf}:
-@item essay.pdf:
-日本語では PDF 形式での提供はありません。
-
-@c @item @uref{../TODO, essay.info}:
-@c GNU info format for documentation. TODO, link broken.
+ @manualStableEssaySplit,
+ @manualStableEssayBig, 2 MB,
+ @manualStableEssayPdf, 2.5 MB}
-@end itemize
-@divEnd
@divEnd
-@end ignore
@node 記譜法
@docLinks{記譜法, notation,
@rusernamed{Top,記譜法},
- @manualStableNotationSplit-ja,
- @manualStableNotationBig-ja, 7 MB,
- @manualStableNotationPdf-ja, 18 MB}
+ @manualStableNotationSplit,
+ @manualStableNotationBig, 7 MB,
+ @manualStableNotationPdf, 18 MB}
@divEnd
-@ignore
-@divClass{column-right-bottom}
-@subheading お読みください
-
-@itemize
-
-@item @rusernamed{Top,記譜法リファレンス}:
-マニュアルをこのページと同じフォーマットで読むことができます。
-
-@end itemize
-
-@subheading すべてのフォーマット
-
-@divClass{keep-bullets}
-@itemize
-
-@item @uref{../notation/index.html, 記譜法リファレンス (分割 HTML)}:
-このマニュアルはいくつもの HTML ページに分割されています。@c
-@emph{(ページごとの小さなダウンロード)}
-
-@item @uref{../notation-big-page.html, 記譜法リファレンス (大きな HTML)}:
-このマニュアルは 1 つの巨大な HTML ページです。@c
-@emph{(約 10? Mb の大きなダウンロード)}
-
-@c @item @uref{../notation.pdf, notation.pdf}:
-@item notation.pdf:
-日本語では PDF 形式での提供はありません。
-
-@c @item @uref{../TODO, notation.info}:
-@c GNU info format for documentation. TODO, link broken.
-
-@end itemize
-@divEnd
-@divEnd
-@end ignore
-
@node 使用方法
@unnumberedsec 使用方法
@translationof Usage
@docLinks{使用方法, usage,
@rprogramnamed{Top,使用方法},
- @manualStableUsageSplit-ja,
- @manualStableUsageBig-ja, 300 KB,
- @manualStableUsagePdf-ja, 400 KB}
+ @manualStableUsageSplit,
+ @manualStableUsageBig, 300 KB,
+ @manualStableUsagePdf, 400 KB}
@divEnd
-@ignore
-@subheading お読みください
-
-@itemize
-
-@item @rprogramnamed{Top,使用方法}:
-マニュアルをこのページと同じフォーマットで読むことができます。
-
-@end itemize
-
-@subheading すべてのフォーマット
-
-@divClass{keep-bullets}
-@itemize
-
-@item @uref{../usage/index.html, 使用方法 (分割 HTML)}:
-このマニュアルはいくつもの HTML ページに分割されています。@c
-@emph{(ページごとの小さなダウンロード)}
-
-@item @uref{../usage-big-page.html, 使用方法 (大きな HTML)}:
-このマニュアルは 1 つの巨大な HTML ページです。@c
-@emph{(約 10? Mb の大きなダウンロード)}
-
-@c @item @uref{../usage.pdf, usage.pdf}:
-@item usage.pdf:
-日本語では PDF 形式での提供はありません。
-
-@c @item @uref{../TODO, lilypond-usage.info}:
-@c GNU info format for documentation. TODO, link broken.
-
-@end itemize
-@divEnd
-@divEnd
-@end ignore
-
@node コード断片集
@unnumberedsec コード断片集
@translationof Snippets
@docLinks{コード断片集, snippets,
@rlsrnamed{Top,コード断片集},
- @manualStableSnippetsSplit-ja,
- @manualStableSnippetsBig-ja, 2.5 MB,
- @manualStableSnippetsPdf-ja, 8 MB}
-
-@divEnd
-
-
-@ignore
-@subheading お読みください
-
-@itemize
-
-@item @rlsrnamed{Top,コード断片集}:
-マニュアルをこのページと同じフォーマットで読むことができます。
-
-@end itemize
-
-@subheading すべてのフォーマット
-
-@divClass{keep-bullets}
-@itemize
-
-@item @uref{../snippets/index.html, コード断片集 (分割 HTML)}:
-このマニュアルはいくつもの HTML ページに分割されています。@c
-@emph{(ページごとの小さなダウンロード)}
-
-@item @uref{../snippets-big-page.html, 断片集 (大きな HTML)}:
-このマニュアルは 1 つの巨大な HTML ページです。@c
-@emph{(約 10? Mb の大きなダウンロード)}
-
-@c @item @uref{../snippets.pdf, snippets.pdf}:
-@item snippets.pdf:
-日本語では PDF 形式での提供はありません。
-
-@c @item @uref{../TODO, snippets.info}:
-@c GNU info format for documentation. TODO, link broken.
-
-@end itemize
-@divEnd
-@divEnd
-@end ignore
-
-
-@node Web
-@unnumberedsec Web
-@translationof Web
-
-@divClass{column-left-top}
-@subheading Web
-
-本書は LilyPond についての全般的な情報を提供します。@c
-さらに、さまざまなコミュニティ フォーラム、バグ レポート、@c
-それに開発についての情報も含んでいます。
-
-@divEnd
-
-@divClass{column-right-bottom}
-
-@docLinks{Web, web,
- @ref{Top,,,,Web},
- @manualStableWebSplit-ja,
- @manualStableWebBig-ja, 1 MB,
- @manualStableWebPdf-ja, 2 MB}
+ @manualStableSnippetsSplit,
+ @manualStableSnippetsBig, 2.5 MB,
+ @manualStableSnippetsPdf, 8 MB}
@divEnd
@translationof FAQ
@divClass{column-center-top}
-@subheading 使用前の質問
+@subheading 使い始めの質問
@subsubheading グラフィカルなキャンバス、メニュー、それにツールバーはどこに@c
あるのですか?
-@c Where are the graphical canvas, menus, and toolbars?
LilyPond は、ユーザが音楽をテキストで書くソフトウェアです。@c
@ref{テキスト入力} を読んでください。
@subsubheading ドキュメントがたくさんあります!すべて読む必要があるのですか!?
-@c There's a lot of documentation! Do I need to read it?
読む必要があるのは @ref{学習, 学習マニュアル} です。@c
他のドキュメントで読む必要があるのは、@c
@subsubheading それでもまだ、読むものがたくさんあります!そこまでする価値のあるソフトウェアなのですか?
-@c That's still a lot of reading! Is it worth it?
あなた自身で決めてください。@c
LilyPond を使う理由については、@ref{導入部} に書かれています。
@c Usage questions
@subsubheading 何かがうまくいっていません!どうやって直せば良いのですか?
-@c Something isn't working! How do I fix it?
-修正方法については、@rprogram{トラブルシューティング (すべてをバラバラにする)} で説明されています。
-@c @rprogram{Troubleshooting}.
+修正方法については、@rprogram{トラブルシュート} で説明されています。
@subsubheading 何故、構文が変更されるのですか?
-@c Why do you change the syntax?
そのことについては、@rprogram{何故構文は変更されるのか?} で説明されています。
-@c @rprogram{Why does the syntax change?}.
@divEnd
-@node 変更点
-@unnumberedsec 変更点
-@translationof Changes
+@node Web
+@unnumberedsec Web
+@translationof Web
@divClass{column-left-top}
-@subheading 変更点
-@c Changes
+@subheading Web
-本書は、LilyPond の前の安定バージョンからの、@c
-重要な変更点と新しい機能についての要約です。
+本書は LilyPond についての全般的な情報を提供します。@c
+さらに、さまざまなコミュニティ フォーラム、バグ レポート、@c
+それに開発についての情報も含んでいます。
@divEnd
@divClass{column-right-bottom}
+@subheading お読みください
-@docLinks{変更点, changes,
- @rchangesnamed{Top,変更点},
- @manualStableChangesSplit-ja,
- @manualStableChangesBig-ja, 6 KB,
- @manualStableChangesPdf-ja, 200 KB}
+@subsubheading 最新のマニュアル
+@divClass{keep-bullets}
+@itemize
+@ref{Top,Web}
+@end itemize
+@divEnd
-@ignore
-@subheading お読みください
+@subsubheading @versionDevel の Web マニュアル
-@itemize
+@docLinksBare{Web, web,
+ @ref{Top,Web},
+ @manualDevelWebSplit,
+ @manualDevelWebBig, 1 MB,
+ @manualDevelWebPdf, 2 MB}
-@item @rchangesnamed{Top,変更点}:
-マニュアルをこのページと同じフォーマットで読むことができます。
+@divEnd
-@end itemize
-@subheading すべてのフォーマット
+@node 変更点
+@unnumberedsec 変更点
+@translationof Changes
-@divClass{keep-bullets}
-@itemize
+@divClass{column-left-top}
+@subheading 変更点
-@item @uref{../changes/index.html, 変更点 (分割 HTML)}:
-このマニュアルはいくつもの HTML ページに分割されています。@c
-@emph{(ページごとの小さなダウンロード)}
+本書は、LilyPond の前の安定バージョンからの、@c
+重要な変更点と新しい機能についての要約です。
-@item @uref{../changes-big-page.html, Changes (大きな HTML)}:
-このマニュアルは 1 つの巨大な HTML ページです。@c
-@emph{(約 10? Mb の大きなダウンロード)}
+@divEnd
-@c @item @uref{../changes.pdf, changes.pdf}:
-@item changes.pdf:
-日本語では PDF 形式での提供はありません。
+@divClass{column-right-bottom}
-@c @item @uref{../TODO, changes.info}:
-@c GNU info format for documentation. TODO, link broken.
+@docLinks{変更点, changes,
+ @rchangesnamed{Top,変更点},
+ @manualStableChangesSplit,
+ @manualStableChangesBig, 6 KB,
+ @manualStableChangesPdf, 200 KB}
-@end itemize
-@divEnd
@divEnd
-@end ignore
-
@node 拡張
@unnumberedsec 拡張
-@translationof Extend
+@translationof Extending
@divClass{column-left-top}
@subheading LilyPond の拡張
-@c Extend LilyPond
本書は、LilyPond を拡張する方法について説明しています。
@docLinks{拡張, extend,
@rextendnamed{Top,拡張},
- @manualStableExtendingSplit-ja,
- @manualStableExtendingBig-ja, 200 KB,
- @manualStableExtendingPdf-ja, 400 KB}
-
-
-@ignore
-@subheading お読みください
-
-@itemize
+ @manualStableExtendingSplit,
+ @manualStableExtendingBig, 200 KB,
+ @manualStableExtendingPdf, 400 KB}
-@item @rextendnamed{Top,拡張}:
-マニュアルをこのページと同じフォーマットで読むことができます。
-
-@end itemize
-
-@subheading すべてのフォーマット
-
-@divClass{keep-bullets}
-@itemize
-
-@item @uref{../extending/index.html, 拡張 (分割 HTML)}:
-このマニュアルはいくつもの HTML ページに分割されています。@c
-@emph{(ページごとの小さなダウンロード)}
-
-@item @uref{../extending-big-page.html, 拡張 (大きな HTML)}:
-このマニュアルは 1 つの巨大な HTML ページです。@c
-@emph{(約 10? Mb の大きなダウンロード)}
-
-@c @item @uref{../extending.pdf, extending.pdf}:
-@item extending.pdf:
-日本語では PDF 形式での提供はありません。
-
-@c @item @uref{../TODO, extending.info}:
-@c GNU info format for documentation. TODO, link broken.
-
-@end itemize
-@divEnd
@divEnd
-@end ignore
@node 内部リファレンス
@divClass{column-left-top}
@subheading 内部リファレンス
-@c Internals reference
本書は、LilyPond のクラス、オブジェクト、それに関数を@c
それぞれすべて詳細に、かつ具体的にドキュメント化した@c
@docLinks{内部リファレンス, internals,
@rinternalsnamed{Top,内部リファレンス},
- @manualStableInternalsSplit-ja,
- @manualStableInternalsBig-ja, 2.5 MB,
- @manualStableInternalsPdf-ja, 2.8 MB}
-
-
-@ignore
-@subheading お読みください
-
-@itemize
+ @manualStableInternalsSplit,
+ @manualStableInternalsBig, 2.5 MB,
+ @manualStableInternalsPdf, 2.8 MB}
-@item @rinternalsnamed{Top,内部リファレンス}:
-マニュアルをこのページと同じフォーマットで読むことができます。
-@end itemize
-
-@subheading すべてのフォーマット
-
-@divClass{keep-bullets}
-@itemize
-
-@item @uref{../internals/index.html, 内部リファレンス (分割 HTML)}:
-このマニュアルはいくつもの HTML ページに分割されています。@c
-@emph{(ページごとの小さなダウンロード)}
-
-@item @uref{../internals-big-page.html, 内部リファレンス (大きな HTML)}:
-このマニュアルは 1 つの巨大な HTML ページです。@c
-@emph{(約 10? Mb の大きなダウンロード)}
-
-@c @item @uref{../internals.pdf, internals.pdf}:
-@item internals.pdf:
-日本語では PDF 形式での提供はありません。
-
-@c @item @uref{../TODO, internals.info}:
-@c GNU info format for documentation. TODO, link broken.
-
-@end itemize
-@divEnd
@divEnd
-@end ignore
@node 翻訳済み
@unnumberedsec すべて
@translationof All
-@divClass{heading-center}
-@heading ドキュメント クイック リンク
-@c Documentation quick links
-
-他の形式でのマニュアルへのリンクは、@ref{マニュアル} にあります。
-
-@divEnd
-
-@c this should match the (main) manual page.
-@divClass{column-center-top}
-@subheading 導入部
-@c Introduction
-
-@itemize
-
-@c no colon : needed in this section
-@item @ifWebLinks{@manualStableLearningSplit-ja,@rlearningnamed{Top,学習}}
-@qq{必読} のやさしい LilyPond 入門書です。
-
-@item @ifWebLinks{@manualStableGlossarySplit-ja,@rglosnamed{Top,音楽用語集}}
-@emph{(副読本)}
-これは音楽用語集について説明し、@c
-英語の音楽用語に馴染みの無いユーザに訳語を提供します。
-
-@item @ifWebLinks{@manualStableEssaySplit-ja,@ressaynamed{Top,エッセー}}
-@emph{(副読本)}
-楽譜譜刻プロセスと 19 世紀の楽譜譜刻の審美性についてのバックグラウンド情報です。
-
-
-@ignore
-@item @rlearningnamed{Top,学習}:
-@qq{必読} のやさしい LilyPond 入門書です。
-
-@item @rglosnamed{Top,用語集}:
-@emph{(副読本)}
-これは音楽用語集について説明し、@c
-英語の音楽用語に馴染みの無いユーザに訳語を提供します。
-
-@item @ressaynamed{Top,エッセー}:
-@emph{(副読本)}
-楽譜譜刻プロセスと 19 世紀の楽譜譜刻の審美性についてのバックグラウンド情報です。
-@end ignore
-
-@end itemize
-
-@divEnd
-
@divClass{column-left-top}
-@subheading 常用するマニュアル
-@c Regular use
-
-@itemize
-
-@item @ifWebLinks{@manualStableNotationSplit-ja,@rusernamed{Top,記譜法}}
-このドキュメントの主要部です: 楽譜作成についての詳しい情報を提供します。
-
-@item @ifWebLinks{@manualStableUsageSplit-ja,@rprogramnamed{Top,使用方法}}
-プログラムの実際と、オペレーション システム特有の問題について議論します。
-
-@item @ifWebLinks{@manualStableSnippetsSplit-ja,@rlsrnamed{Top,コード断片集}}
-ちょっとしたトリック、秘訣、例。
-
-
-@ignore
-@item @rusernamed{Top,記譜法}:
-このドキュメントの主要部です: 楽譜作成についての詳しい情報を提供します。
-
-@item @rprogramnamed{Top,使用方法}:
-プログラムの実際と、オペレーション システム特有の問題について議論します。
-
-@item @rlsrnamed{Top,コード断片集}:
-ちょっとしたトリック、秘訣、例。
-@end ignore
-
-@end itemize
-
-@divEnd
-
-
-@divClass{column-right-top}
-@subheading 常用外のマニュアル
-@c Infrequent Use
-
-@itemize
-
-@item @ref{FAQ}:
-FAQ の回答へのリンク
-
-@item @ifWebLinks{@manualStableChangesSplit-ja,@rchangesnamed{Top,変更点}}
-最新のメジャー バージョンから変更された点。
-
-@item @ifWebLinks{@manualStableExtendingSplit-ja,@rextendnamed{Top,拡張}}
-LilyPond での思いつきの調整をプログラミングします。
-
-@item @ifWebLinks{@manualStableInternalsSplit-ja,@rinternalsnamed{Top,内部リファレンス}}
-調整を行うために必要となる、LilyPond の内部構造についての情報。
-
-
-@ignore
-@item @rchangesnamed{Top,変更点}:
-最新のメジャー バージョンから変更された点。
-
-@item @rextendnamed{Top,拡張}:
-LilyPond での思いつきの調整をプログラミングします。
-
-@item @rinternalsnamed{Top,内部リファレンス}:
-調整を行うために必要となる、LilyPond の内部構造についての情報。
-@end ignore
-
-@end itemize
-
-@divEnd
-
-
-@divClass{column-center-bottom}
@subheading ダウンロード可能なバージョン
-@c Downloadable versions
-
-@help{compare tarball vs. zip size, ask about windows users
-dealing with tarballs (both gz and bz2), etc.}
-@help{on second thought, wait until the new doc build. write an
-apology here for no tarballs}
+@ifclear web_version
+ダウンロード可能な .tar.gz ファイルは @uref{http://lilypond.org} でのみ入手可能です。
+@end ifclear
+@ifset web_version
@divClass{keep-bullets}
@itemize
-@item html-split zip
-
-@item html-big zip
-
-@item pdf zip
-
-@item info zip maybe?!?!
+@item @doctarballStable
@end itemize
@divEnd
+@end ifset
+@divEnd
+
+@divClass{column-right-bottom}
@subheading 以前の安定バージョン
-@c Previous stable versions
@divClass{keep-bullets}
@itemize
@item @uref{http://lilypond.org/doc/v2.8/Documentation/,
LilyPond 2.8 ドキュメント}
-@help anybody want to write this stuff?
+@item @uref{http://lilypond.org/doc/v2.6/Documentation/,
+LilyPond 2.6 ドキュメント}
+
+@item @uref{http://lilypond.org/doc/v2.4/Documentation/,
+LilyPond 2.4 ドキュメント}
+
+@item @uref{http://lilypond.org/doc/v2.2/Documentation/,
+LilyPond 2.2 ドキュメント}
+
+@item @uref{http://lilypond.org/doc/v2.0/Documentation/,
+LilyPond 2.0 ドキュメント}
+
+@item @uref{http://lilypond.org/doc/v1.8/Documentation/,
+LilyPond 1.8 ドキュメント}
+
+@item @uref{http://lilypond.org/doc/v1.6/Documentation/,
+LilyPond 1.6 ドキュメント}
@end itemize
@divClass{column-center-top}
@subheading ドキュメント ライセンス
-@c Documentation license
GNU LilyPond のドキュメントは、@c
GNU Free Documentation License に基づいて公開されています。@c
@include fdl.itexi
@divEnd
-
@end lilypond
Each of the vertical spacing grob properties (except
-@code{staff-affinity}) is stored as an alist (association list),
-and each uses the same alist structure as the @code{\paper}
-spacing variables discussed in
+@code{staff-affinity}) uses the same alist structure
+as the @code{\paper} spacing variables discussed in
@ref{Flexible vertical spacing \paper variables}. Specific methods
for modifying alists are discussed in @ref{Modifying alists}.
Grob properties should be adjusted with an @code{\override} inside
@table @code
@item staff-staff-spacing
-The distance between the current staff and the staff just below it
-in the same system, even if one or more non-staff lines (such as
-@code{Lyrics}) are placed between the two staves. Does not apply
-to the bottom staff of a system. This replaces any settings
-inherited from the @code{StaffGrouper} grob of the containing
-staff-group, if there is one. If this is unset, and there are no
-@code{StaffGrouper} properties to inherit, the
-@code{default-staff-staff-spacing} property is used.
+
+Used to determine the distance between the current staff and the
+staff just below it in the same system, even if one or more
+non-staff lines (such as @code{Lyrics}) are placed between the two
+staves. Does not apply to the bottom staff of a system.
+
+Initially, the @code{staff-staff-spacing} of a
+@code{VerticalAxisGroup} is a Scheme function that applies the
+properties of the @code{StaffGrouper} if the staff is part of a
+group, or the @code{default-staff-staff-spacing} of the staff
+otherwise. This allows staves to be spaced differently when they
+are grouped. For uniform spacing regardless of grouping, this
+function may be replaced by a flexible-spacing alist, using the
+complete-redefinition form of override shown above.
@item default-staff-staff-spacing
-The settings to use for @code{staff-staff-spacing} when it is
-unset. This applies to ungrouped staves and to grouped staves
-that do not inherit settings from the @code{StaffGrouper} grob.
+A flexible-spacing alist defining the @code{staff-staff-spacing} used for
+ungrouped staves, unless @code{staff-staff-spacing} has been explicitly
+set with an @code{\override}.
@item staff-affinity
The direction of the staff to use for spacing the current
@item staff-staff-spacing
The distance between consecutive staves within the current
staff-group. The @code{staff-staff-spacing} property of an
-individual staff's @code{VerticalAxisGroup} grob will be used
-instead for any staves in the staff-group that have it set. Also
-see @code{default-staff-staff-spacing}.
+individual staff's @code{VerticalAxisGroup} grob can be
+overriden with different spacing settings for that staff.
@item staffgroup-staff-spacing
The distance between the last staff of the current staff-group and
non-staff lines (such as @code{Lyrics}) exist between the two
staves. Does not apply to the bottom staff of a system. The
@code{staff-staff-spacing} property of an individual staff's
-@code{VerticalAxisGroup} grob will be used instead for any staves
-in the staff-group that have it set. Also see
-@code{default-staff-staff-spacing}.
+@code{VerticalAxisGroup} grob can be overriden with different
+spacing settings for that staff.
@end table
@seealso
@itemize
@item @code{VerticalAxisGroup} properties:
@itemize
+@item @code{default-staff-staff-spacing}
@item @code{staff-staff-spacing}
@end itemize
@end itemize
Additional properties are involved for staves that are part of a
staff-group; see @ref{Spacing of grouped staves}.
-The following example shows how the @code{staff-staff-spacing}
-property can affect the spacing of ungrouped staves:
+The following example shows how the @code{default-staff-staff-spacing}
+property can affect the spacing of ungrouped staves.
+The same overrides applied to @code{staff-staff-spacing} would
+have the same effect, but would also apply in cases where the staves
+are combined in a group or groups.
@lilypond[verbatim,quote,staffsize=16]
\layout {
\context {
\Staff
- \override VerticalAxisGroup #'staff-staff-spacing =
+ \override VerticalAxisGroup #'default-staff-staff-spacing =
#'((basic-distance . 8)
(minimum-distance . 7)
(padding . 1))
}
}
-\new StaffGroup <<
+<<
% The very low note here needs more room than 'basic-distance
% can provide, so the distance between this staff and the next
% is determined by 'padding.
% By setting 'padding to a negative value, staves can be made to
% collide. The lowest acceptable value for 'basic-distance is 0.
\new Staff \with {
- \override VerticalAxisGroup #'staff-staff-spacing =
+ \override VerticalAxisGroup #'default-staff-staff-spacing =
#'((basic-distance . 3.5)
(padding . -10))
} { \clef bass g2 r | }
@item @code{VerticalAxisGroup} properties:
@itemize
@item @code{staff-staff-spacing}
-@item @code{default-staff-staff-spacing}
@end itemize
@item @code{StaffGrouper} properties:
@itemize
@cindex instrument names, short
Instrument names can be printed on the left side of staves in the
-@code{Staff} and @code{PianoStaff} contexts. The value of
+@code{Staff}, @code{PianoStaff}, @code{StaffGroup}, @code{GrandStaff}
+and @code{ChoirStaff} contexts. The value of
@code{instrumentName} is used for the first staff, and the value
of @code{shortInstrumentName} is used for all succeeding staves.
@cindex instrument names, adding to other contexts
To add instrument names to other contexts (such as
-@code{GrandStaff}, @code{ChoirStaff}, or @code{StaffGroup}),
+@code{ChordNames} or @code{FiguredBass}),
@code{Instrument_name_engraver} must be added to that context.
For details, see @ref{Modifying context plug-ins}.
@node Vocal music
@section Vocal music
-@c TODO: inspirational headword
+@lilypondfile[quote]{vocal-headword.ly}
This section explains how to typeset vocal music, and make sure
that the lyrics will be aligned with the notes of their melody.
* Manual syllable durations::
* Multiple syllables to one note::
* Multiple notes to one syllable::
-* Skipping notes::
* Extenders and hyphens::
@end menu
It is possible to have ties, slurs and manual beams in the melody
without their indicating melismata. To do this, set
-@code{melismaBusyProperties} and indicate the melismata with single
-underscores in the lyrics, one underscore for each extra note:
+@code{melismaBusyProperties}:
@lilypond[relative=1,verbatim,quote]
<<
\time 3/4
\set melismaBusyProperties = #'()
c4 d ( e )
- g8 [ f ] f4( e)
- d e ~ e
+ g8 [ f ] f4 ~ f
}
\new Lyrics \lyricsto "melody" {
- Ky -- _ _ _ _ ri -- _ _ e __ _
+ Ky -- ri -- e e -- le -- i -- son
}
>>
@end lilypond
Other settings for @code{melismaBusyProperties} can be used to
-include or exclude ties, slurs, and beams from the automatic
-detection of melismata; see @code{melismaBusyProperties} in
-@rinternals{Tunable context properties}.
+selectively include or exclude ties, slurs, and beams from the
+automatic detection of melismata; see @code{melismaBusyProperties}
+in @rinternals{Tunable context properties}.
+
+Alternatively, if all melismata indications are to be ignored,
+@code{ignoreMelismata} may be set true;
+see @ref{Stanzas with different rhythms}.
+
+If a melisma is required during a passage in which
+@code{melismaBusyProperties} is active, it may be indicated by
+placing a single underscore in the lyrics for each note which
+should be included in the melisma:
+
+@lilypond[relative=1,verbatim,quote]
+<<
+ \new Voice = "melody" {
+ \time 3/4
+ \set melismaBusyProperties = #'()
+ c4 d ( e )
+ g8 [ f ] ~ f4 ~ f
+ }
+ \new Lyrics \lyricsto "melody" {
+ Ky -- ri -- _ e __ _ _ _
+ }
+>>
+@end lilypond
+
@predefined
Notation Reference:
@ref{Aligning lyrics to a melody},
@ref{Automatic syllable durations},
-@ref{Setting automatic beam behavior}.
+@ref{Setting automatic beam behavior},
+@ref{Stanzas with different rhythms}.
Internals Reference:
@rinternals{Tunable context properties}.
Extender lines under melismata are not created automatically; they
must be inserted manually with a double underscore.
-@node Skipping notes
-@unnumberedsubsubsec Skipping notes
-
-Making a lyric line run slower than the melody can be achieved by
-inserting @code{\skip}s into the lyrics. For every @code{\skip},
-the text will be delayed by another note. The @code{\skip} command
-must be followed by a valid duration, but this is ignored when
-@code{\skip} is used in lyrics which derive their durations from the
-notes in an associated melody through @code{\addlyrics} or
-@code{\lyricsto}.
-
-@lilypond[verbatim,ragged-right,quote]
-\relative c' { c c g' }
-\addlyrics {
- twin -- \skip 4
- kle
-}
-@end lilypond
-
@node Extenders and hyphens
@unnumberedsubsubsec Extenders and hyphens
@end lilypond
Lyrics may be positioned above the staff using one of
-two methods. The simplest is to use the same syntax as
-above and explicitly specify the position of the lyrics:
+two methods. The simplest (and preferred) method
+is to use the same syntax as above and explicitly
+specify the position of the lyrics:
@lilypond[quote,verbatim]
\score {
@lilypond[quote,verbatim]
\score {
<<
- \new Lyrics = "lyrics"
+ \new Lyrics = "lyrics" \with {
+ % lyrics above a staff should have this override
+ \override VerticalAxisGroup #'staff-affinity = #DOWN
+ }
\new Staff {
\new Voice = "melody" {
\relative c'' { c4 c c c }
}
}
\new Lyrics = "sopranos"
- \new Lyrics = "contraltos"
+ \new Lyrics = "contraltos" \with {
+ % lyrics above a staff should have this override
+ \override VerticalAxisGroup #'staff-affinity = #DOWN
+ }
\new Staff {
\new Voice = "contraltos" {
\relative c'' { a4 a a a }
elaborating these examples, or by examining the
@rlearning{Vocal ensembles} templates in the Learning Manual.
+@snippets
+@lilypondfile[verbatim,lilyquote,texidoc,doctitle]
+{lyrics-old-spacing-settings.ly}
+
@seealso
Learning Manual:
@rlearning{Vocal ensembles}.
}
@end lilypond
-@cindex lyric skip
-@funindex \skip
-
When the words to a repeated volta section are different, the words
-to each repeat must be entered in separate @code{Lyrics} contexts.
-Earlier unrepeated sections must be skipped in the second and
-subsequent repeats. The easiest way to skip several notes is to
-use @code{\repeat unfold} around the @code{\skip} command.
-
-Note: do not use an underscore, @code{_}, to skip notes in this
-particular case. As this syntax indicates a melisma, it will cause
-the preceding syllable to be left-aligned.
-
-@warning{The @code{@bs{}skip} command must be followed by a number,
-but this number is ignored in lyrics which derive their durations
-from the notes in an associated melody through @code{\addlyrics} or
-@code{\lyricsto}. Each @code{@bs{}skip} skips a single note of any
-value, irrespective of the value of the following number.}
+to each repeat must be entered in separate @code{Lyrics} contexts,
+correctly nested in parallel sections:
@lilypond[verbatim,quote]
\score {
}
}
}
- \new Lyrics {
- \lyricsto "melody" {
- Not re -- peat -- ed.
- The first time words.
- }
- }
- \new Lyrics {
- \lyricsto "melody" {
- % skip 4 notes of any duration
- \repeat unfold 4 { \skip 1 }
- Sec -- ond time words.
- }
+ \new Lyrics \lyricsto "melody" {
+ Not re -- peat -- ed.
+ <<
+ { The first time words. }
+ \new Lyrics {
+ \set associatedVoice = "melody"
+ Sec -- ond time words.
+ }
+ >>
}
>>
}
@end lilypond
-@cindex lyrics, repeating with a temporary voice
+More verses may be added in a similar way:
-An alternative way, which avoids skips and having to count notes,
-is to use a temporary voice for the repeated section. This may be
-preferable if the earlier sections are still subject to change. A
-temporary voice can be inserted anywhere in the main music stream
-in parallel with it, as shown below, but it may be necessary to
-keep the main voice alive in complex scores when using this
-technique; see @ref{Keeping contexts alive}.
-
-@lilypond[verbatim,quote,ragged-right]
+@lilypond[verbatim,quote]
\score {
<<
\new Staff {
\new Voice = "singleVoice" {
- \relative c'' { a4 a a a }
- \new Voice = "repeatVoice" {
- \relative c'' \repeat volta 3 { b4 b b b }
- }
- \relative c'' { c4 c c c }
- }
- }
- \new Lyrics <<
- \lyricsto "singleVoice" {
- Not re -- peat -- ed.
- The end sec -- tion.
- }
- \lyricsto "repeatVoice" {
- The first time words.
- }
- >>
- \new Lyrics {
- \lyricsto "repeatVoice" {
- Sec -- ond time words.
+ \relative c'' {
+ a4 a a a
+ \repeat volta 3 { b4 b b b }
+ c4 c c c
+ }
}
}
- \new Lyrics {
- \lyricsto "repeatVoice" {
- The third time words.
- }
+ \new Lyrics \lyricsto "singleVoice" {
+ Not re -- peat -- ed.
+ <<
+ { The first time words. }
+ \new Lyrics {
+ \set associatedVoice = "singleVoice"
+ Sec -- ond time words.
+ }
+ \new Lyrics {
+ \set associatedVoice = "singleVoice"
+ The third time words.
+ }
+ >>
+ The end sec -- tion.
}
>>
}
@end lilypond
-@c TODO lowering a common line of lyrics
+
+@c TODO positioning a common line of lyrics
@subheading Repeats with alternative endings
}
@end lilypond
+@funindex \skip
+@cindex skipping notes in lyrics
+@cindex lyrics, skipping notes
+
But when the repeated section has different words, a repeat
construct cannot be used around the words and @code{\skip} commands
-have to be inserted manually as described in the previous section to
-skip over the notes in the alternative sections which do not apply.
+have to be inserted manually to skip over the notes in the
+alternative sections which do not apply.
+
+Note: do not use an underscore, @code{_}, to skip notes -- an
+underscore indicates a melisma, causing the preceding syllable
+to be left-aligned.
+
+@warning{The @code{@bs{}skip} command must be followed by a number,
+but this number is ignored in lyrics which derive their durations
+from the notes in an associated melody through @code{\addlyrics} or
+@code{\lyricsto}. Each @code{@bs{}skip} skips a single note of any
+value, irrespective of the value of the following number.}
@lilypond[verbatim,quote,ragged-right]
\score {
\header {
lsrtags = "keyboards"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Los símbolos específicos de acordeón discanto se escriben mediante
@code{\\markup}. Se puede trucar la colocación vertical de los
\header {
lsrtags = "chords, ancient-notation, contexts-and-engravers"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Al escribir un bajo cifrado, podemos situar las cifras encima o debajo
\header {
lsrtags = "pitches, staff-notation, vocal-music"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Añadir un ámbito por voz"
texidoces = "
Se puede añadir un ámbito por cada voz. En este caso, el ámbito se
\header {
lsrtags = "staff-notation, contexts-and-engravers, breaks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Al añadir un pentagrama nuevo en un salto de línea, por desgracia
se añade un espacio adicional al final de la línea antes del salto
\header {
lsrtags = "staff-notation, contexts-and-engravers"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede añadir (posiblemente de forma temporal) un pentagrama
nuevo una vez que la pieza ha comenzado.
\header {
lsrtags = "chords"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Para añadir indicaciones de línea divisoria dentro del contexto de
los nombres de acorde @code{ChordNames}, incluya el grabador
\header {
lsrtags = "rhythms, expressive-marks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La sintaxis de LilyPond puede implicar muchas colocaciones poco
comunes para los paréntesis, corchetes, etc, que a veces se tienen
\header {
lsrtags = "rhythms, percussion"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Mediante la utilización de las potentes herramientas preconfiguradas
como la función @code{\\drummode} y el contexto @code{DrumStaff}, la
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Para añadir digitaciones a las tablaturas, utilice una combinación de
@code{\\markup} y @code{\\finger}.
\header {
lsrtags = "staff-notation, vocal-music"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Este ejemplo muestra una forma de simplificar la adición de muchas
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La función @code{\\parenthesize} es un truco especial que encierra
objetos entre paréntesis. El grob asociado es @code{ParenthesesItem}.
\header {
lsrtags = "text, titles"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Con algo de código de Scheme, se puede añadir fácilmente la fecha
actual a una partitura.
\header {
lsrtags = "repeats"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
El grabador @code{Volta_engraver} reside de forma predeterminada
dentro del contexto de @code{Score}, y los corchetes de la repetición
\header {
lsrtags = "simultaneous-notes"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Voces adicionales para evitar colisiones"
texidoces = "
En ciertos casos de polifonía compleja, se necesitan voces adicionales
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede ajustar la separación entre las notas de adorno utilizando la
propiedad @code{spacing-increment} de @code{Score.GraceSpacing}.
\version "2.13.42"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Este fragmento de código muestra cómo situar la línea de base de la
letra más cerca del pentagrama.
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Puede ser necesario trucar la propiedad
@code{shortest-duration-space} para poder ajustar el tamaño de las
\header {
lsrtags = "text, paper-and-layout, titles"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La alineación horizontal de los nombres de instrumento se puede
trucar modificando la propiedad @code{Staff.InstrumentName
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Los números de compás se alinean de forma predeterminada por la
\header {
lsrtags = "text"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Si están especificadas, las marcas de texto se pueden alinear con
objetos de notación distintos a las líneas divisorias. Entre estos
\header {
lsrtags = "editorial-annotations, fretted-strings, spacing"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Las cifras de digitación orientadas verticalmente se colocan de forma
\header {
lsrtags = "pitches, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede variar la longitud de las plicas de las figuras unidas por
una barra mediante la sobreescritura de la propiedad
\header {
lsrtags = "pitches, vocal-music"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Ámbitos con varias voces"
texidoces = "
La adición del grabador @code{Ambitus_engraver} al contexto de
\header {
lsrtags = "editorial-annotations, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
De forma predeterminada se añaden corchetes de análisis sencillos
debajo del pentagrama. El ejemplo siguiente muestra una manera de
\header {
lsrtags = "ancient-notation"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Aquí se muestran muchos de (¿o quizá todos?) los símbolos que
están contemplados por la capacidad de LilyPond para la música
\header {
lsrtags = "vocal-music, ancient-notation, template"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Este ejemplo muestra cómo hacer una transcripción moderna de canto
gregoriano. El canto gregoriano no tiene compás ni plicas; utiliza
\header {
lsrtags = "ancient-notation, template"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Al transcribir música mensural, es útil un «incipit» al compienzo
de la pieza para indicar la tonalidad y el tempo
\header {
lsrtags = "ancient-notation"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Las indicaciones de compás también se pueden grabar en estilo antiguo.
\header {
lsrtags = "pitches, editorial-annotations"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Aplicar estilos de cabeza según la nota de la escala"
texidoces = "
La propiedad @code{shapeNoteStyles} se puede usar para definir varios
\header {
lsrtags = "world-music"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Para las improvisaciones o @emph{taqasim} que son libres durante unos
momentos, se puede omitir la indicación de compás y se puede usar
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede hacer que una ligadura de expresión sea asimétrica para
adaptarse mejor a un patrón asimétrico de notas.
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden subdividir las barras automáticamente. Estableciendo la
propiedad @code{subdivideBeams}, las barras se subdividen en
\header {
lsrtags = "rhythms, editorial-annotations, chords, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Las reglas de final de barra especificadas en el contexto
@code{Score} se aplican a todos los pentagramas, pero se pueden
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
No está especificada ninguna agrupación predeterminada automática
de las barras para el compás de 7/8, de forma que si se requieren
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Normalmente están prohibidos los saltos de línea si las barras
atraviesan las líneas divisorias. Se puede cambiar este
\header {
lsrtags = "editorial-annotations, text"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La instrucción @code{\\whiteout} intercala un rectángulo blanco
debajo de un elemento de marcado. Este rectángulo blanco no tapa
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Para hacer invisibles partes de un regulador de crescendo, se usa
el método de dibujar un rectángulo blanco encima de la parte
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
A veces se denota una «cesura» mediante una doble marca de respiración
parecida a las vías del tren, con un calderón encima. Este fragmento
\header {
lsrtags = "expressive-marks, text"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Este ejemplo proporciona una función para tipografiar un regulador con
texto por debajo, como @qq{molto} o @qq{poco}. El ejemplo ilustra
\header {
lsrtags = "expressive-marks, unfretted-strings"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Para hacer más pequeño el círculo de @code{\\flageolet} (armónico)
utilice la siguiente función de Scheme.
\header {
lsrtags = "simultaneous-notes, editorial-annotations, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden modificar notas individuales de un acorde con la instrucción
@code{\\tweak}, alterando la propiedad @code{font-size}.
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se insertan automáticamente barras en ángulo cuando se detecta un
intervalo muy grande entre las notas. Se puede hacer un ajuste
\header {
lsrtags = "chords"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede establecer el separador entre las distintas partes del
nombre de un acorde para que sea cualquier elemento de marcado.
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Cambiar la forma de los silencios multicompás"
texidoces = "
Si hay diez compases de silencio o menos, se imprime en el pentagrama
\header {
lsrtags = "fretted-strings"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
\header {
lsrtags = "contexts-and-engravers, midi"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Al producir una salida MIDI, el comportamiento predeterminado es
que cada pentagrama representa un canal MIDI, con todas las voces
\header {
lsrtags = "simultaneous-notes"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Al utilizar la posibilidad de combinación automática de partes, se
puede modificar el texto que se imprime para las secciones de solo
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede modificar el texto empleado para los crescendos y
decrescendos modificando las propiedades de contexto
%% Note: this file works from version 2.13.36
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Es posible ajustar la separación en las indicaciones de tesitura.
\header {
lsrtags = "expressive-marks, editorial-annotations"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede cambiar el aspecto de las ligaduras de expresión de
continuas a punteadas o intermitentes.
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
El glifo de la marca de respiración se puede ajustar
sobreescribiendo la propiedad de texto del objeto de presentación
\header {
lsrtags = "chords"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La nomenclatura inglesa (predeterminada) para los acordes del cifrado
americano se puede cambiar por la alemana (@code{\\germanChords}
%% Note: this file works from version 2.13.36
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Este código muestra cómo cambiar la cantidad de puntillos de una nota.
\header {
lsrtags = "chords"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Las alteraciones y los signos «más» pueden aparecer antes o
después de los números, según el valor de las propiedades
\version "2.13.36"
\header {
-%%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
\header {
lsrtags = "rhythms, tweaks-and-overrides, midi"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Para cambiar el tempo en la salida MIDI sin
imprimir nada, hacemos invisible la indicación metronómica:
\header {
lsrtags = "keyboards, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede usar @code{Staff.pedalSustainStrings} para fijar el texto de
las indicaciones de pisar pedal y levantar pedal. Observe que las
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La instrucción @code{\\time} establece las propiedades
@code{timeSignatureFraction}, @code{beatLength}, @code{beatGrouping} y
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Cambiar el número del grupo especial"
texidoces = "
\header {
lsrtags = "rhythms, contexts-and-engravers"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La propiedad @code{measureLength}, junto con
@code{measurePosition}, determina cuándo es necesario dibujar una
\header {
lsrtags = "rhythms, vocal-music, ancient-notation, contexts-and-engravers"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Este tipo de notación se utiliza para el canto de los Salmos, en
que las estrofas no siempre tienen la misma longitud.
\header {
lsrtags = "chords"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede usar la propiedad @code{chordNameExceptions} para
almacenar una lista de notaciones espaciales para acordes
\header {
lsrtags = "chords"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La presentación del acorde de séptima mayor se
puede ajustar mediante majorSevenSymbol.
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede hacer que los diagramas de posiciones se muestren sólo
cuando el acorde cambia o al comienzo de una nueva línea.
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Este código muestra cómo recortar (extraer) fragmentos a partir de una
partitura completa.
\header {
lsrtags = "simultaneous-notes, chords, keyboards"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Los «clusters» o racimos son un mecanismo para indicar la
interpretación de un ámbito de notas al mismo tiempo.
\header {
lsrtags = "expressive-marks, text"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Ciertas indicaciones dinámicas pueden llevar textos (como @qq{più
forte} o @qq{piano subito}). Se pueden producir usando un bloque
\header {
lsrtags = "simultaneous-notes, text"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La herramienta de combinación de partes (instrucción
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Indicaciones de compases compuestos"
texidoces = "
Las indicaciones de compás poco frecuentes como @qq{5/8} se pueden
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La agrupación de pulsos dentro de un compás está controlada por la
propiedad de contexto @code{beatStructure}. Hay establecidos valores
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede tipografiar un gissando contemporáneo sin nota final
utilizando una nota oculta y temporalización de cadenza.
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La visibilidad de los objetos de extensión que acaban en la primera
\header {
lsrtags = "editorial-annotations, chords, keyboards, fretted-strings"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede controlar con precisión la colocación de los números de
digitación. Para que se tenga en cuenta la orientación de las
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
El orden vertical que ocupan las inscripciones gráficas está
controlado con la propiedad @code{'script-priority}. Cuanto más
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
El comportamiento predeterminado de la visibilidad de los corchetes de
\header {
lsrtags = "expressive-marks, editorial-annotations, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La creación de un grupeto circular de anticipación entre dos notas,
donde la nota inferior del grupeto utiliza una alteración, requiere
\header {
lsrtags = "pitches"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
En una música que tenga muchas apariciones de la
misma secuencia de notas a distintas alturas, podría ser de
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede trazar un símbolo de arpegio entre notas de distintas
voces que están sobre el mismo pentagrama si el grabador
\header {
lsrtags = "staff-notation, editorial-annotations, contexts-and-engravers, paper-and-layout"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Para crear pentagramas en blanco, genere compases vacíos y después
elimine el grabador de números de compás @code{Bar_number_engraver}
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Dentro de un @code{PianoStaff}, es posible hacer que un arpegio
cruce entre los pentagramas ajustando la propiedad
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden crear arpegios que se cruzan entre pentagramas dentro de
contextos distintos a @code{GrandStaff}, @code{PianoStaff} y
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden crear indicaciones metronómicas nuevas en modo de
marcado, pero no cambian el tempo en la salida MIDI.
\header {
lsrtags = "expressive-marks, text"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Aunque la manera más fácil de añadir paréntesis a una indicación
de dinámica es utilizar un bloque @code{\\markup}, este método
\header {
lsrtags = "expressive-marks, text, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
A diferencia de las inscripciones de texto, las lestras de ensayo
no se pueden apilar en un punto concreto de la partitura: sólo se
\header {
lsrtags = "expressive-marks, keyboards, unfretted-strings"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
En determinadas situaciones es necesario crear ligaduras de
expresión entre notas que están en voces distintas.
\header {
lsrtags = "expressive-marks, text, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Las instrucciones @code{\\startTextSpan} y @code{\\stopTextSpan}
permiten la creación de elementos de extensión textuales tan
\header {
lsrtags = "repeats, keyboards"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
\header {
lsrtags = "ancient-notation, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden tipografiar «custos» en diferentes estilos.
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden establecer las propiedades de los diagramas de
posiciones de acordes por medio de @code{'fret-diagram-details}.
\header {
lsrtags = "fretted-strings, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden establecer las propiedades de los diagramas de
posiciones a través de @code{'fret-diagram-details}. Para los
\header {
lsrtags = "editorial-annotations"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La dirección predeterminada de las plicas sobre la tercera línea
del pentagrama está determinada por la propiedad
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Este ejemplo demuestra cómo se puede definir el grabador de ámbito en
\version "2.13.46"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden añadir diagramas de posiciones predefinidas para
\header {
lsrtags = "staff-notation, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Si hay un solo pentagrama en un de los tipos de sistema
@code{ChoirStaff} o @code{StaffGroup}, el comportamiento
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
He aquí una forma de imprimir un acorde en el que suena la misma nota
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Al trabajar con los callbacks de un grob, puede ser de mucha ayuda
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Alteraciones de estilo dodecafónico para todas las notas incluidas las naturales"
texidoces = "
En las obras de principios del s.XX, empezando por Schoenberg, Berg y
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Funciones postfijas para la creación de objetos de extensión de texto
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Los objetos de extensión \cresc, \dim y \decresc ahora se pueden
\header {
lsrtags = "editorial-annotations, text"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede insertar códico PostScript directamente dentro de un
bloque @code{\\markup}.
\header {
lsrtags = "contexts-and-engravers"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Del problema central de la notación, esto es, crear un determinado
símbolo, se encargan los «plugins» o complementos añadidos. Cada
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Grabado manual de las ligaduras"
texidoces = "
Se pueden grabar a mano las ligaduras modificando la propiedad
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Escribir varios grupos especiales usando una sola instrucción \\times"
texidoces = "
La propiedad @code{tupletSpannerDuration} establece cuánto debe durar
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede simular un @qq{hammer} o ligado ascendente con ligaduras de
\header {
lsrtags = "winds"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden conseguir símbolos especiales combinando glifos existentes,
lo que es de utilidad para la notación de instrumentos de viento.
\header {
lsrtags = "fretted-strings"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
En este ejemplo se combinan las digitaciones de la mano izquierda,
indicaciones del número de cuerda y digitaciones de la mano
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Son posibles tanto los corchetes rectos sobre notas sueltas como
extremos de barra sueltos en figuras unidas, con una combinación de
\header {
lsrtags = "simultaneous-notes, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Forzar el desplazamiento horizontal de las notas"
\header {
lsrtags = "vocal-music"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Si LilyPond no cree que haya sitio suficiente para un guión separador
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden crear tablas alternativas de diagramas de posiciones. Se
\header {
lsrtags = "pitches"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Este fragmento de código basado en Scheme genera
24 notas aleatorias (o tantas como se necesiten), basándose en la
\version "2.13.36"
\header {
-%%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
En muchos casos, las llaves que no están en la columna central se
\header {
lsrtags = "editorial-annotations"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede cambiar el aspecto de las líneas de rejilla
sobreescribiendo algunas de sus propiedades.
\header {
lsrtags = "editorial-annotations"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden trazar líneas verticales normales entre pentagramas para
mostrar la relación entre notas; sin embargo, en caso de música
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Los patrones de barrado se pueden alterar con la propiedad
@code{beatGrouping}:
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
\header {
lsrtags = "rhythms, fretted-strings"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Para la música de guitarra, es posible mostrar los ritmos de rasgueo,
además de las notas de la melodía, acordes y diagramas de posiciones.
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Los reguladores pueden imprimirse en uno cualquiera de los estilos de
@code{line-interface}: discontinuo, punteado, línea, trino o zig-zag.
%% Note: this file works from version 2.13.36
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Aquí se muestra la manera de ocultar las alteraciones de las notas
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Los cambios de dinámica con estilo de texto (como cresc. y dim.)
se imprimen con una línea intermitente que muestra su alcance.
\header {
lsrtags = "vocal-music, template"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Este fragmento de código muestra una forma de preparar un himno cuando
cada línea comienza con un compás parcial. También muestra cómo
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Los «incipit» se pueden escribir utilizando el grob del nombre del
instruemento, pero manteniendo independientes las definiciones del
\header {
lsrtags = "keyboards"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Un corchete de arpegio puede indicar que se tienen que tocar con la
misma mano notas que están en dos pentagramas distintos. Para hacerlo,
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Las marcas de cesura se pueden crear sobreescribiendo la propiedad
@code{'text} del objeto @code{BreathingSign}. También está disponible
\header {
lsrtags = "repeats"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
También se pueden imprimir símbolos de porcentaje sueltos.
\header {
lsrtags = "keyboards, percussion, fretted-strings, template"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Ésta es una plantilla bastante avanzada, para un conjunto de
jazz. Observe que la notación de todos los instrumentos está en
\header {
lsrtags = "pitches, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Cuando se produce un cambio de clave, el símbolo de clave se imprime a
un tamaño menor que la clave inicial. Esto se puede ajustar con
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La tablatura se puede formatear utilizando letras en lugar de números.
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden aplicar puntas de flecha a los elementos de extensión de
texto y de línea (como el Glissando).
\header {
lsrtags = "text, vocal-music"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La alineación horizontal de la letra se puede ajustar sobreescribiendo
la propiedad @code{self-alignment-X} del objeto @code{LyricText}.
--- /dev/null
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.47
+\version "2.13.47"
+
+\header {
+ lsrtags = "vocal-music"
+
+ doctitle = "Obtaining 2.12 lyrics spacing in newer versions"
+
+ texidoc = "
+The vertical spacing engine changed for version 2.14. This can
+cause lyrics to be spaced differently. It is possible to set
+properties for @code{Lyric} and @code{Staff} contexts to get the
+spacing engine to behave as it did in version 2.12.
+"
+} % begin verbatim
+
+
+global = {
+ \key d \major
+ \time 3/4
+}
+
+sopMusic = \relative c' {
+ % VERSE ONE
+ fis4 fis fis | \break
+ fis4. e8 e4
+}
+
+altoMusic = \relative c' {
+ % VERSE ONE
+ d4 d d |
+ d4. b8 b4 |
+}
+
+tenorMusic = \relative c' {
+ a4 a a |
+ b4. g8 g4 |
+}
+
+bassMusic = \relative c {
+ d4 d d |
+ g,4. g8 g4 |
+}
+
+words = \lyricmode {
+ Great is Thy faith- ful- ness,
+}
+
+\score {
+ \new ChoirStaff <<
+ \new Lyrics = sopranos
+ \new Staff = women <<
+ \new Voice = "sopranos" {
+ \voiceOne
+ \global \sopMusic
+ }
+ \new Voice = "altos" {
+ \voiceTwo
+ \global \altoMusic
+ }
+ >>
+ \new Lyrics = "altos"
+ \new Lyrics = "tenors"
+ \new Staff = men <<
+ \clef bass
+ \new Voice = "tenors" {
+ \voiceOne
+ \global \tenorMusic
+ }
+ \new Voice = "basses" {
+ \voiceTwo \global \bassMusic
+ }
+ >>
+ \new Lyrics = basses
+ \context Lyrics = sopranos \lyricsto sopranos \words
+ \context Lyrics = altos \lyricsto altos \words
+ \context Lyrics = tenors \lyricsto tenors \words
+ \context Lyrics = basses \lyricsto basses \words
+ >>
+ \layout {
+ \context {
+ \Lyrics
+ \override VerticalAxisGroup #'staff-affinity = ##f
+ \override VerticalAxisGroup #'staff-staff-spacing =
+ #'((basic-distance . 0)
+ (minimum-distance . 2)
+ (padding . 2))
+ }
+ \context {
+ \Staff
+ \override VerticalAxisGroup #'staff-staff-spacing =
+ #'((basic-distance . 0)
+ (minimum-distance . 2)
+ (padding . 2))
+ }
+ }
+}
+
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
El «Makam» es un tipo de melodía de Turquía que
utiliza alteraciones microtonales de 1/9 de tono. Consulte el
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Las ligaduras de expresión se pueden construir con patrones de
\header {
lsrtags = "staff-notation, editorial-annotations"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede engrosar una línea del pentagrama con fines pedagógicos
(p.ej. la tercera línea o la de la clave de Sol). Esto se puede
\header {
lsrtags = "repeats, staff-notation, editorial-annotations"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Este fragmento de código proporciona una solución alternativa a la
producción de contadores de compás utilizando repeticiones
\header {
lsrtags = "staff-notation, ancient-notation, contexts-and-engravers, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La disposición «mensurstriche» en que las líneas divisorias no
están dibujadas sobre los pentagramas, sino entre ellos, se puede
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Utilice un texto de marcado para sustituir el glifo de clave (TAB) con
una fuente tipográfica moderna.
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Las abreviaturas se encuentran definidas dentro del archivo
@file{ly/script-init.ly}, donde las variables @code{dashHat},
\header {
lsrtags = "rhythms, simultaneous-notes, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Cuando se puede una nota en la voz superior para evitar la colisión
con una nota de otra voz, el comportamiento predeterminado es
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede ajustar la posición vertical de una ligadura de
expresiónutilizando la propiedad @code{positions} del objeto
\header {
lsrtags = "rhythms, text"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Los elementos de marcado aplicados a un silencio multicompás se
centran encima o debajo de éste. Los elementos de marcado extensos
\header {
lsrtags = "staff-notation, contexts-and-engravers, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede utilizar la propiedad
@code{systemStartDelimiterHierarchy} para crear grupos de
--- /dev/null
+\version "2.13.47"
+
+\header {
+ lsrtags = "vocal-music"
+
+ doctitle = "Obtaining 2.12 lyrics spacing in newer versions"
+
+ texidoc = "
+The vertical spacing engine changed for version 2.14. This can
+cause lyrics to be spaced differently. It is possible to set
+properties for @code{Lyric} and @code{Staff} contexts to get the
+spacing engine to behave as it did in version 2.12.
+"
+}
+
+global = {
+ \key d \major
+ \time 3/4
+}
+
+sopMusic = \relative c' {
+ % VERSE ONE
+ fis4 fis fis | \break
+ fis4. e8 e4
+}
+
+altoMusic = \relative c' {
+ % VERSE ONE
+ d4 d d |
+ d4. b8 b4 |
+}
+
+tenorMusic = \relative c' {
+ a4 a a |
+ b4. g8 g4 |
+}
+
+bassMusic = \relative c {
+ d4 d d |
+ g,4. g8 g4 |
+}
+
+words = \lyricmode {
+ Great is Thy faith- ful- ness,
+}
+
+\score {
+ \new ChoirStaff <<
+ \new Lyrics = sopranos
+ \new Staff = women <<
+ \new Voice = "sopranos" {
+ \voiceOne
+ \global \sopMusic
+ }
+ \new Voice = "altos" {
+ \voiceTwo
+ \global \altoMusic
+ }
+ >>
+ \new Lyrics = "altos"
+ \new Lyrics = "tenors"
+ \new Staff = men <<
+ \clef bass
+ \new Voice = "tenors" {
+ \voiceOne
+ \global \tenorMusic
+ }
+ \new Voice = "basses" {
+ \voiceTwo \global \bassMusic
+ }
+ >>
+ \new Lyrics = basses
+ \context Lyrics = sopranos \lyricsto sopranos \words
+ \context Lyrics = altos \lyricsto altos \words
+ \context Lyrics = tenors \lyricsto tenors \words
+ \context Lyrics = basses \lyricsto basses \words
+ >>
+ \layout {
+ \context {
+ \Lyrics
+ \override VerticalAxisGroup #'staff-affinity = ##f
+ \override VerticalAxisGroup #'staff-staff-spacing =
+ #'((basic-distance . 0)
+ (minimum-distance . 2)
+ (padding . 2))
+ }
+ \context {
+ \Staff
+ \override VerticalAxisGroup #'staff-staff-spacing =
+ #'((basic-distance . 0)
+ (minimum-distance . 2)
+ (padding . 2))
+ }
+ }
+}
+
--- /dev/null
+\version "2.13.47"
+
+\header {
+ lsrtags = "vocal-music, keyboards, template"
+
+ texidoc = "
+This template adds an automatic piano reduction to the standard SATB
+vocal score demonstrated in @qq{Vocal ensemble template}. This
+demonstrates one of the strengths of LilyPond – you can use a music
+definition more than once. If any changes are made to the vocal notes
+(say, @code{tenorMusic}), then the changes will also apply to the piano
+reduction.
+"
+ doctitle = "Vocal ensemble template with automatic piano reduction"
+}
+
+\paper {
+ top-system-spacing #'basic-distance = #10
+ score-system-spacing #'basic-distance = #20
+ system-system-spacing #'basic-distance = #20
+ last-bottom-spacing #'basic-distance = #10
+}
+
+global = {
+ \key c \major
+ \time 4/4
+}
+
+sopMusic = \relative c'' {
+ c4 c c8[( b)] c4
+}
+sopWords = \lyricmode {
+ hi hi hi hi
+}
+
+altoMusic = \relative c' {
+ e4 f d e
+}
+altoWords =\lyricmode {
+ ha ha ha ha
+}
+
+tenorMusic = \relative c' {
+ g4 a f g
+}
+tenorWords = \lyricmode {
+ hu hu hu hu
+}
+
+bassMusic = \relative c {
+ c4 c g c
+}
+bassWords = \lyricmode {
+ ho ho ho ho
+}
+
+\score {
+ <<
+ \new ChoirStaff <<
+ \new Lyrics = "sopranos" \with {
+ % This is needed for lyrics above a staff
+ \override VerticalAxisGroup #'staff-affinity = #DOWN
+ }
+ \new Staff = "women" <<
+ \new Voice = "sopranos" { \voiceOne << \global \sopMusic >> }
+ \new Voice = "altos" { \voiceTwo << \global \altoMusic >> }
+ >>
+ \new Lyrics = "altos"
+ \new Lyrics = "tenors" \with {
+ % This is needed for lyrics above a staff
+ \override VerticalAxisGroup #'staff-affinity = #DOWN
+ }
+
+ \new Staff = "men" <<
+ \clef bass
+ \new Voice = "tenors" { \voiceOne << \global \tenorMusic >> }
+ \new Voice = "basses" { \voiceTwo << \global \bassMusic >> }
+ >>
+ \new Lyrics = "basses"
+ \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords
+ \context Lyrics = "altos" \lyricsto "altos" \altoWords
+ \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords
+ \context Lyrics = "basses" \lyricsto "basses" \bassWords
+ >>
+ \new PianoStaff <<
+ \new Staff <<
+ \set Staff.printPartCombineTexts = ##f
+ \partcombine
+ << \global \sopMusic >>
+ << \global \altoMusic >>
+ >>
+ \new Staff <<
+ \clef bass
+ \set Staff.printPartCombineTexts = ##f
+ \partcombine
+ << \global \tenorMusic >>
+ << \global \bassMusic >>
+ >>
+ >>
+ >>
+}
--- /dev/null
+\version "2.13.47"
+
+\header {
+ lsrtags = "vocal-music, template"
+
+ texidoc = "
+Here is a standard four-part SATB vocal score. With larger ensembles,
+it is often useful to include a section which is included in all parts.
+For example, the time signature and key signature are almost always the
+same for all parts. Like in the @qq{Hymn} template, the four voices are
+regrouped on only two staves.
+"
+ doctitle = "Vocal ensemble template"
+}
+
+\paper {
+ top-system-spacing #'basic-distance = #10
+ score-system-spacing #'basic-distance = #20
+ system-system-spacing #'basic-distance = #20
+ last-bottom-spacing #'basic-distance = #10
+}
+
+global = {
+ \key c \major
+ \time 4/4
+}
+
+sopMusic = \relative c'' {
+ c4 c c8[( b)] c4
+}
+sopWords = \lyricmode {
+ hi hi hi hi
+}
+
+altoMusic = \relative c' {
+ e4 f d e
+}
+altoWords = \lyricmode {
+ ha ha ha ha
+}
+
+tenorMusic = \relative c' {
+ g4 a f g
+}
+tenorWords = \lyricmode {
+ hu hu hu hu
+}
+
+bassMusic = \relative c {
+ c4 c g c
+}
+bassWords = \lyricmode {
+ ho ho ho ho
+}
+
+\score {
+ \new ChoirStaff <<
+ \new Lyrics = "sopranos" \with {
+ % this is needed for lyrics above a staff
+ \override VerticalAxisGroup #'staff-affinity = #DOWN
+ }
+ \new Staff = "women" <<
+ \new Voice = "sopranos" {
+ \voiceOne
+ << \global \sopMusic >>
+ }
+ \new Voice = "altos" {
+ \voiceTwo
+ << \global \altoMusic >>
+ }
+ >>
+ \new Lyrics = "altos"
+ \new Lyrics = "tenors" \with {
+ % this is needed for lyrics above a staff
+ \override VerticalAxisGroup #'staff-affinity = #DOWN
+ }
+ \new Staff = "men" <<
+ \clef bass
+ \new Voice = "tenors" {
+ \voiceOne
+ << \global \tenorMusic >>
+ }
+ \new Voice = "basses" {
+ \voiceTwo << \global \bassMusic >>
+ }
+ >>
+ \new Lyrics = "basses"
+ \context Lyrics = "sopranos" \lyricsto "sopranos" \sopWords
+ \context Lyrics = "altos" \lyricsto "altos" \altoWords
+ \context Lyrics = "tenors" \lyricsto "tenors" \tenorWords
+ \context Lyrics = "basses" \lyricsto "basses" \bassWords
+ >>
+}
+
--- /dev/null
+\version "2.13.47"
+
+#(set-global-staff-size 15)
+\paper {
+ ragged-right = ##t
+ line-width = 17\cm
+ indent = 0\cm
+}
+
+\header {
+ lsrtags = "headwords"
+ texidoc = ""
+ doctitle = "headword"
+}
+
+\layout {
+ \context {
+ \Score
+ \override PaperColumn #'keep-inside-line = ##t
+ \override NonMusicalPaperColumn #'keep-inside-line = ##t
+ }
+}
+
+% L. van Beethoven. Symphony No. 9 in D minor, op.125; Finale
+% mm. 216 -- 236
+% Text: F. von Schiller
+
+\score {
+ \new Staff \relative c' {
+ \set Score.currentBarNumber = 216
+ \bar "" % make first bar number be shown
+ \clef bass \key d \minor \time 3/4
+ % \tempo "Presto"
+ % \compressFullBarRests R2.*8
+ \tempo "Recitativo"
+ \autoBeamOff
+ r4^\markup { \small Baritono } r a
+ \appoggiatura a8 e'2. ~
+ e4 d8[ cis d e]
+ e4 g, r8 g
+ bes2 a8 e
+ g4 f r
+ R2.*2
+ gis2 gis4
+ r4 d'4. b8
+ b4 gis8([ a b cis]
+ e8[ d cis d)] b([ gis)]
+ e8 d d4 fis8([ e)]
+ d4 cis r
+ \key d \major
+ r4 r a'
+ d4.( e8[ fis e)]
+ e([ d)] d([ cis d a)]
+ g8([ fis)] fis([ e d c)]
+ c8([ b)] g'2~
+ \once \override Script #'outside-staff-priority = #1 % put fermata closer to staff
+ g4.\fermata ^\markup { \small \italic "ad libitum" } e8[ cis!] d
+ d8 a a4 r \bar "||"
+
+ % \time 4/4 \tempo "Allegro assai"
+ % R1
+ % e''4^\f d r2
+ % R1
+ % e4( ^\f d2) a8([ g)]
+ }
+ \addlyrics {
+ O Freun -- _ _ de, nicht die -- _ se Tö -- ne!
+ Son -- dern laßt uns an -- _ ge -- neh -- me -- re an -- stim -- men,
+ und freu -- _ _ _ _ _ _ _ den -- vol -- le -- re!
+ % Freu -- de, Freu -- de,__
+ }
+}
+
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
LilyPond también proporciona funciones de formato para imprimir
números de grupo especial diferentes a la propia fracción, así
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Armaduras de tonalidad no tradicionales"
texidoces = "
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Las cabezas de nota de notación fácil utilizan la propiedad
\header {
lsrtags = "pitches, staff-notation, vocal-music, template"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Esta plantilla muestra el uso de contextos @code{StaffGroup} y
@code{GrandStaff} anidados para sub-agrupar instrumentos del mismo
\header {
lsrtags = "pitches, text"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Internamente, @code{\\ottava} establece las propiedades
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
\header {
lsrtags = "repeats, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden mostrar los contadores de las repeticiones del tipo
porcentaje a intervalos regulares mediante el establecimiento de
\header {
lsrtags = "repeats"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Las repeticiones de compases completos de más de dos repeticiones
pueden llevar un contador si se activa la propiedad adecuada, como se
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Permitir saltos de línea dentro de grupos especiales con barra"
texidoces = "
Este ejemplo artificial muestra cómo se pueden permitir tanto los
\header {
lsrtags = "keyboards, template"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Presentamos a continuación una plantilla de piano sencilla con algunas
notas.
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Muchas partituras de piano tienen las indicaciones dinámicas centradas
entre los dos pentagramas. El contexto @code{Dynamics}, si se sitúa
\header {
lsrtags = "text, keyboards, template"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
En lugar de tener un pentagrama dedicado a la melodía y la letra, ésta
se puede centrar entre los pentagramas de un sistema de piano.
\header {
lsrtags = "vocal-music, keyboards, template"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
He aquí el típico formato dde una canción: un pentagrama con la
melodía y la letra, y el acompañamiento de piano por debajo.
\header {
lsrtags = "fretted-strings"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Es posible ejercer un mayor control sobre la colocación de las
digitaciones de la mano derecha estableciendo el valor de una
\header {
lsrtags = "fretted-strings"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La polifonía se crea de la misma forma en un @code{TabStaff} que
en una pauta normal.
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Si necesitamos alargar o acortar un símbolo de arpegio, podemos
modificar independientemente los extremos superior e inferior.
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Cuando se colocan figuras sobre líneas adicionales, sus barras se
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Al establecer la propiedad @code{'strict-grace-spacing} hacemos que
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Posicionar los silencios multicompás"
texidoces = "
A diferencia de los silencios normales, no existe una instrucción
\header {
lsrtags = "expressive-marks, editorial-annotations, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Los elementos de marcado de texto deben tener la propiedad
\header {
lsrtags = "pitches"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Evitar que se añadan becuadros adicionales automáticamente"
texidoces = "
\header {
lsrtags = "pitches"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Evitar que se impriman becuadros cuando cambia la armadura"
texidoces = "
\header {
lsrtags = "repeats, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede imprimir una línea divisoria de la forma @code{|:} al
principio de la pieza, sobreescribiendo la propiedad correspondiente:
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden imprimir los números de compás a intervalos regulares
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Los números de compás también se pueden imprimir dentro de rectángulos o de circunferencias.
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden imprimir reguladores con un círculo en la punta (notación
«al niente») estableciendo la propiedad @code{circled-tip} del objeto
\header {
lsrtags = "text"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
\header {
lsrtags = "text"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Aunque normalmente las marcas de texto sólo se imprimen sobre el
pentagrama superior, también se pueden imprimir en otro pentagrama
\header {
lsrtags = "rhythms, expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
De forma predeterminada, las indicaciones metronómicas y las
letras de ensayo se imprimen encima del pentagrama. Para
\header {
lsrtags = "tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede usar el contexto @code{NoteNames} para imprimir el valor
textual de las notas. La propiedad @code{printOctaveNames} activa o
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
De forma predeterminada se suprime el número del primer compás de una
\header {
lsrtags = "pitches, staff-notation"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Los pasajes citados tienen en cuenta la transposición de la fuente
tanto como la del destino. En este ejemplo, todos los
\header {
lsrtags = "staff-notation"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La propiedad @code{quotedEventTypes} determina los tipos de eventos
\header {
lsrtags = "winds"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
El ejemplo siguiente muestra cómo se pueden realizar diagramas de
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Los valores predeterminados para las notas de adorno están
\header {
lsrtags = "rhythms, contexts-and-engravers"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden eliminar completamente los números de compás quitando el
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
De forma predeterminada, las líneas divisorias en los grupos
StaffGroup, PianoStaff o GrandStaff se conectan entre los pentagramas.
\header {
lsrtags = "staff-notation, tweaks-and-overrides, breaks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
El primer pentagrama vacío también se puede suprimir de la
partitura estableciendo la propiedad @code{remove-first} de
\header {
lsrtags = "rhythms, ancient-notation, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Estilos de silencios"
texidoces = "
Los silencios se pueden imprimir en distintos estilos.
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Para tipografiar las barras agrupadas en la forma @code{3-4-3-2} sólo
es necesario modificar la estructura de pulsos:
\header {
lsrtags = "expressive-marks, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Si la nota que da fin a un regulador cae sobre la primera parte de
un compás, el regulador se detiene en la línea divisoria
\header {
lsrtags = "staff-notation, tweaks-and-overrides, paper-and-layout"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden insertar separadores sistema entre los sistemas de una
página. Se puede usar cualquier elemento de marcado, pero
%% Note: this file works from version 2.13.36
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Si los reguladores son demasiado cortos, se pueden alargar
modificando la propiedad @code{minimum-length} del objeto
\header {
lsrtags = "repeats"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
De forma predeterminada, los corchetes de primera y segunda vez se
trazan encima de los finales alternativos completos, pero es posible
\header {
lsrtags = "chords"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden imprimir los acordes exclusivamente al comienzo de las
líneas y cuando cambia el acorde.
\header {
lsrtags = "chords"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Al juntar nombres de acorde en cifrado americano, melodía y letra,
obtenemos una hoja guía de acordes o «lead sheet»:
\header {
lsrtags = "vocal-music, chords, template"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Esta plantilla facilita la preparación de una canción con melodía,
letra y acordes.
\header {
lsrtags = "vocal-music, chords, template"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Presentamos a continuación un ejemplo de plantilla para una hoja
guía de acordes con melodía, letra, acordes y diagramas de
\header {
lsrtags = "chords, template"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
¿Quiere preparar una hoja guía de acordes (o «lead sheet») con
melodía y acordes? ¡No busque más!
\header {
lsrtags = "vocal-music, template"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Esta pequeña plantilla muestra una melodía sencilla con letra. Córtela
y péguela, escriba las notas y luego la letra. Este ejemplo desactiva
\header {
lsrtags = "template"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Esta plantilla simple prepara un pentagrama con notas, adecuado para
un instrumento solista o un fragmento melódico. Córtelo y péguelo en
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Marca de pizzicato de chasquido (`pizzicato de Bartók')"
texidoces = "
El pizzicato de chasquido (también llamado @q{Pizzicato de Bartók}) es un
\header {
lsrtags = "text"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Los textos independientes se pueden disponer en varias columnas
utilizando instrucciones @code{\\markup}:
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La dirección de las plicas se contola de la misma forma en la
tablatura que en la notación tradicional. Las barras se pueden
\header {
lsrtags = "unfretted-strings, template"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Esta plantilla muestra un cuarteto de cuerda normal. También utiliza
una sección @code{\\global} para el compás y la armadura
\header {
lsrtags = "unfretted-strings, template"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
El fragmento de código @qq{Plantilla de cuarteto de cuerda} produce un
resultado satisfactorio para el cuarteto, pero ¿y si tenemos que
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
A veces, la indicación de compás no debe imprimir la fracción completa
\header {
lsrtags = "ancient-notation, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
A modo de alternativa para obtener auténticos «incipit»
independientes de la partitura principal, se incluyen como
\header {
lsrtags = "pitches"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Transportar música con el menor número de alteraciones"
texidoces = "
Este ejemplo utiliza código de Scheme para forzar las
\header {
lsrtags = "pitches, staff-notation, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Trucaje de las propiedades de clave"
texidoces = "
La instrucción @code{\\clef \"treble_8\"} equivale a un ajuste de
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
La disposición de las expresiones de adorno se puede cambiar a lo
\header {
lsrtags = "staff-notation, contexts-and-engravers"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se puede usar el delimitador de comienzo de un sistema
@code{SystemStartSquare} estableciéndolo explícitamente dentro de
\header {
lsrtags = "rhythms, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Se pueden imprimir estilos alternativos del corchete o gancho de las
\header {
lsrtags = "expressive-marks, vocal-music"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
El corchete de arpegios @code{arpeggioBracket} se puede usar para
indicar la división de voces cuando no hay plicas que puedan ofrecer
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Algunos compositores escriben dos ligaduras cuando quieren acordes
legato. Esto se puede conseguir estableciendo @code{doubleSlurs}.
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Es posible aplicar la barrita que cruza la barra de las
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
\header {
lsrtags = "rhythms"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
doctitlees = "Uso de ligaduras en los arpegios"
texidoces = "
En ocasiones se usan ligaduras de unión para escribir los arpegios.
\header {
lsrtags = "tweaks-and-overrides, spacing"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Mediante el establecimiento de la propiedad @code{'Y-extent} a un valor
adecuado, todos los objetos @code{DynamicLineSpanner} (reguladores e
\header {
lsrtags = "expressive-marks"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Las expresiones dinámicas que se comienzan, terminan o se producen
en la misma nota se alinean verticalmente. Para asegurar que las
\header {
lsrtags = "vocal-music, tweaks-and-overrides, spacing"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Este fragmento de código muestra el uso de las propiedades de
contexto @code{alignBelowContext} y @code{alignAboveContext} para
\header {
lsrtags = "chords, tweaks-and-overrides"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Allí donde se utilicen líneas extensoras para el bajo cifrado mediante
el establecimiento de @code{useBassFigureExtenders} al valor
-%% Do not edit this file; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% This file is in the public domain.
-\version "2.12.2"
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.47
+\version "2.13.47"
\header {
- lsrtags = "vocal-music, keyboards, template"
-
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Esta plantilla añade una reducción de piano automática a la partitura
"
doctitlefr = "Ensemble vocal avec réduction pour piano"
+ lsrtags = "vocal-music, keyboards, template"
+
texidoc = "
This template adds an automatic piano reduction to the standard SATB
vocal score demonstrated in @qq{Vocal ensemble template}. This
definition more than once. If any changes are made to the vocal notes
(say, @code{tenorMusic}), then the changes will also apply to the piano
reduction.
-
"
doctitle = "Vocal ensemble template with automatic piano reduction"
} % begin verbatim
+
+\paper {
+ top-system-spacing #'basic-distance = #10
+ score-system-spacing #'basic-distance = #20
+ system-system-spacing #'basic-distance = #20
+ last-bottom-spacing #'basic-distance = #10
+}
+
global = {
\key c \major
\time 4/4
\score {
<<
\new ChoirStaff <<
- \new Lyrics = "sopranos"
+ \new Lyrics = "sopranos" \with {
+ % This is needed for lyrics above a staff
+ \override VerticalAxisGroup #'staff-affinity = #DOWN
+ }
\new Staff = "women" <<
\new Voice = "sopranos" { \voiceOne << \global \sopMusic >> }
\new Voice = "altos" { \voiceTwo << \global \altoMusic >> }
>>
\new Lyrics = "altos"
- \new Lyrics = "tenors"
+ \new Lyrics = "tenors" \with {
+ % This is needed for lyrics above a staff
+ \override VerticalAxisGroup #'staff-affinity = #DOWN
+ }
+
\new Staff = "men" <<
\clef bass
\new Voice = "tenors" { \voiceOne << \global \tenorMusic >> }
>>
>>
}
-
\header {
lsrtags = "text, vocal-music, contexts-and-engravers, template"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Esta plantilla es, básicamente, la misma que la sencilla plantilla
@qq{Conjunto vocal}, excepto que aquí todas las líneas de letra se
\version "2.13.36"
\header {
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Esta plantilla crea una partitura que comienza con una estrofa para
-%% Do not edit this file; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
-%% This file is in the public domain.
-\version "2.12.2"
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.47
+\version "2.13.47"
\header {
- lsrtags = "vocal-music, template"
-
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
He aquí una partitura vocal estándar para cuatro voces SATB. Con
grupos mayores, suele ser útil incluir una sección que aparezca en
"
doctitlefr = "Ensemble vocal (simple)"
+ lsrtags = "vocal-music, template"
+
texidoc = "
Here is a standard four-part SATB vocal score. With larger ensembles,
it is often useful to include a section which is included in all parts.
For example, the time signature and key signature are almost always the
same for all parts. Like in the @qq{Hymn} template, the four voices are
regrouped on only two staves.
-
"
doctitle = "Vocal ensemble template"
} % begin verbatim
+
+\paper {
+ top-system-spacing #'basic-distance = #10
+ score-system-spacing #'basic-distance = #20
+ system-system-spacing #'basic-distance = #20
+ last-bottom-spacing #'basic-distance = #10
+}
+
global = {
\key c \major
\time 4/4
\score {
\new ChoirStaff <<
- \new Lyrics = "sopranos"
+ \new Lyrics = "sopranos" \with {
+ % this is needed for lyrics above a staff
+ \override VerticalAxisGroup #'staff-affinity = #DOWN
+ }
\new Staff = "women" <<
\new Voice = "sopranos" {
\voiceOne
}
>>
\new Lyrics = "altos"
- \new Lyrics = "tenors"
+ \new Lyrics = "tenors" \with {
+ % this is needed for lyrics above a staff
+ \override VerticalAxisGroup #'staff-affinity = #DOWN
+ }
\new Staff = "men" <<
\clef bass
\new Voice = "tenors" {
--- /dev/null
+% Do not edit this file; it is automatically
+% generated from Documentation/snippets/new
+% This file is in the public domain.
+%% Note: this file works from version 2.13.47
+\version "2.13.47"
+
+#(set-global-staff-size 15)
+\paper {
+ ragged-right = ##t
+ line-width = 17\cm
+ indent = 0\cm
+}
+
+\header {
+ lsrtags = "headwords"
+ texidoc = ""
+ doctitle = "headword"
+} % begin verbatim
+
+
+\layout {
+ \context {
+ \Score
+ \override PaperColumn #'keep-inside-line = ##t
+ \override NonMusicalPaperColumn #'keep-inside-line = ##t
+ }
+}
+
+% L. van Beethoven. Symphony No. 9 in D minor, op.125; Finale
+% mm. 216 -- 236
+% Text: F. von Schiller
+
+\score {
+ \new Staff \relative c' {
+ \set Score.currentBarNumber = 216
+ \bar "" % make first bar number be shown
+ \clef bass \key d \minor \time 3/4
+ % \tempo "Presto"
+ % \compressFullBarRests R2.*8
+ \tempo "Recitativo"
+ \autoBeamOff
+ r4^\markup { \small Baritono } r a
+ \appoggiatura a8 e'2. ~
+ e4 d8[ cis d e]
+ e4 g, r8 g
+ bes2 a8 e
+ g4 f r
+ R2.*2
+ gis2 gis4
+ r4 d'4. b8
+ b4 gis8([ a b cis]
+ e8[ d cis d)] b([ gis)]
+ e8 d d4 fis8([ e)]
+ d4 cis r
+ \key d \major
+ r4 r a'
+ d4.( e8[ fis e)]
+ e([ d)] d([ cis d a)]
+ g8([ fis)] fis([ e d c)]
+ c8([ b)] g'2~
+ \once \override Script #'outside-staff-priority = #1 % put fermata closer to staff
+ g4.\fermata ^\markup { \small \italic "ad libitum" } e8[ cis!] d
+ d8 a a4 r \bar "||"
+
+ % \time 4/4 \tempo "Allegro assai"
+ % R1
+ % e''4^\f d r2
+ % R1
+ % e4( ^\f d2) a8([ g)]
+ }
+ \addlyrics {
+ O Freun -- _ _ de, nicht die -- _ se Tö -- ne!
+ Son -- dern laßt uns an -- _ ge -- neh -- me -- re an -- stim -- men,
+ und freu -- _ _ _ _ _ _ _ den -- vol -- le -- re!
+ % Freu -- de, Freu -- de,__
+ }
+}
+
how-to-put-ties-between-syllables-in-lyrics.ly
hymn-template.ly
lyrics-alignment.ly
+lyrics-old-spacing-settings.ly
marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly
orchestra,-choir-and-piano-template.ly
piano-template-with-melody-and-lyrics.ly
\header {
lsrtags = "repeats, staff-notation, chords"
-%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
Mediante la adición del grabador @code{Volta_engraver} al
pentagrama pertinente, se pueden poner los corchetes de primera y
\version "2.13.36"
\header {
-%%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
\version "2.13.36"
\header {
-%%% Translation of GIT committish: a874fda3641c9e02f61be5c41b215b8304b8ed00
+%%% Translation of GIT committish: fa19277d20f8ab0397c560eb0e7b814bd804ecec
texidoces = "
El fragmento de música que aparece a continuación presenta todos los
diagramas de viento madera que se encuentran definidos en LilyPond por
@c used for news about the upcoming release; see CG 10.2
+@newsItem
+@subsubheading LilyPond 2.13.47 released! @emph{Jan 28, 2011}
+
+We are happy to announce the release of LilyPond 2.13.47. This
+release contains the usual number of bugfixes. However, a number
+of critical issues still remain, so this release is intended for
+developers only.
+
+@newsEnd
+
+
@newsItem
@subsubheading Release candidate 1 withdrawn @emph{Jan 13, 2011}
PACKAGE_NAME=LilyPond
MAJOR_VERSION=2
MINOR_VERSION=13
-PATCH_LEVEL=47
+PATCH_LEVEL=48
MY_PATCH_LEVEL=
VERSION_STABLE=2.12.3
-VERSION_DEVEL=2.13.46
+VERSION_DEVEL=2.13.47
#include <typeinfo>
using namespace std;
-#define classname(class_ptr) demangle_classname (typeid (* (class_ptr)))
-
-char const *
-demangle_classname (type_info const &);
/*
+++ /dev/null
-#include <cctype>
-using namespace std;
-
-#include "virtual-methods.hh"
-
-char const *
-demangle_classname (type_info const &t)
-{
- char const *s = t.name ();
- while (isdigit (*s))
- s++;
- return s;
-}
@unnumbered Introduction
This document presents proofs for
-LilyPond @lilypondversion). When the
+LilyPond @lilypondversion. When the
text corresponds with the shown notation, we consider LilyPond Officially
BugFree (tm). This document is intended for finding bugs and for
documenting bugfixes.
-In the web version of this document, you can click on the file name
+In the web version of this document, you can click on the file name
or figure for each example to see the corresponding input file.
TODO: order of tests (file names!), test only one feature per test.
-\version "2.12.0"
+\version "2.13.47"
\header {
texidoc = "Ambitus indicate pitch ranges for voices.
Accidentals only show up if they're not part of key
signature. @code{AmbitusNoteHead} grobs also have ledger lines.
+The noteheads are printed in overstrike, so there's only one
+visible; the accidentals are prevented from colliding.
"
}
\key d \major
cis as'
}
+ \new Staff \relative c' {
+ \time 2/4
+ c4 cis
+ }
>>
-\version "2.12.0"
+\version "2.13.46"
forcedLastBreak = { \break }
%% We want this to perfectly match the Bärenreiter spacing.
-%% If we're not using 6 systems, there's definately a problem.
+%% If we're not using 6 systems, there's definitely a problem.
#(define (assert-system-count smob n)
(let ((systems (length (ly:spanner-broken-into
(ly:grob-original
;;(warn
(string-append "Got " (number->string systems)
" systems (expecting " (number->string n))))))
-
+
#(define (assert-system-count-override count)
(ly:export #{ \override NoteHead #'after-line-breaking
= #(lambda (smob) (assert-system-count smob $count))
#}))
-
+
\header {
title = "Solo Cello Suite II"
piece ="Sarabande"
sarabandeA = \context Voice \relative c {
\override Staff.NoteCollision #'merge-differently-dotted = ##t
-
+
<< { d8. e16 e4.\trill d16 e } \\
{ d4 a2 } >>
- <d, a' f'>4. e'8[ d c] |
+ <d, a' f'>4. e'8[ d c] |
bes[ g'] f[
e16(f] g[ a bes d,)] |
cis4.\trill b8[ a g] |
- %% check spacing without accs:
+ %% check spacing without accs:
%% c4.\trill bes8[ a g] |
-
+
<< { d'8. e16 e4.\trill d16 e |
f4. d8[ e f] }
\\
%% 11
e'8[ f] c,[ g'] f'[ e] |
f4 f,2 |
- << { a'4 a4.\trill bes8
+ << { a'4 a4.\trill bes8
c bes16 a } \\
{ f8[ es] es4. r8 d4 } >>
bes[ g']
a,[ fis']
es'[ d] |
-
+
%%16
< bes d, g, >4.\trill a8[ g f!] |
e bes a f' g a |
d, as g es' f g |
cis,[ bes'] a[ g16 f] e!8[ f16 d] |
cis8 e16 a a,8. g'16 f8(e) |
-
+
%%21
<< { d e16(f) f4. e16(d) |
e8 f16(g) g4. a16(bes) |
\Score
\override SpacingSpanner #'spacing-increment = #0.96
}
-
+
indent = 5.6 \mm
line-width = 146.8 \mm
}
ragged-bottom = ##t
indent = 7. \mm
line-width =183.5 \mm
- between-system-space = 25\mm
- between-system-padding = 0\mm
+ obsolete-between-system-space = 25\mm
+ system-system-spacing #'basic-distance = #(/ obsolete-between-system-space staff-space)
+ system-system-spacing #'padding = #0
+ score-system-spacing #'basic-distance = #(/ obsolete-between-system-space staff-space)
+ score-system-spacing #'padding = #0
system-count = 6
%% annotatespacing = ##t
\score{
\sarabandeCelloStaff
\layout { }
-
+
\midi {
\context {
\Score
\header{
- opus= ""
+ opus= ""
piece ="Sarabande" }
}
}
--- /dev/null
+\version "2.13.47"
+
+\header {
+
+ texidoc = "
+GrandStaff contexts accept chord names. The chord name in this
+example should be printed above the top staff.
+"
+}
+
+\score {
+ \new GrandStaff
+ <<
+ \chords {
+ f1
+ }
+ \new Staff {
+ \relative c'' {
+ a4 a a a
+ }
+ }
+ \new Staff {
+ \clef "bass"
+ \relative c {
+ a4 a a a
+ }
+ }
+ >>
+}
--- /dev/null
+\version "2.13.47"
+
+\header {
+ texidoc = "Create compound time signatures. The argument is a Scheme list
+of lists. Each list describes one fraction, with the last entry being the
+denominator, while the first entries describe the summands in the
+enumerator. If the time signature consists of just one fraction,
+the list can be given directly, i.e. not as a list containing a single list.
+For example, a time signature of (3+1)/8 + 2/4 would be created as
+@code{\\compoundMeter #'((3 1 8) (2 4))}, and a time signature of (3+2)/8
+as @code{\\compoundMeter #'((3 2 8))} or shorter
+@code{\\compoundMeter #'(3 2 8)}.
+"
+}
+
+
+
+\relative c' {
+ \compoundMeter #'(1 2 3 4 8)
+ \repeat unfold 10 c8 \repeat unfold 20 c16 \break
+
+ \time 3/4
+ \repeat unfold 6 c8 \repeat unfold 12 c16 \break
+
+ \compoundMeter #'((1 2 3 4 8) (2 4))
+ \repeat unfold 14 c8 \repeat unfold 28 c16 \break
+
+ \compoundMeter #'((1 2 3 4 8) (2 4) (2 3 8))
+ \repeat unfold 19 c8 \repeat unfold 38 c16 \break
+
+ \compoundMeter #'(1 2 3 4 8)
+ \repeat unfold 10 c8 \repeat unfold 20 c16 \break
+
+ \compoundMeter #'((1 8) (3 8))
+ \repeat unfold 4 c8 \repeat unfold 8 c16 \break
+
+ \compoundMeter #'((3 8) (1 8))
+ \repeat unfold 4 c8 \repeat unfold 8 c16 \break
+
+ \time 4/4
+ \repeat unfold 8 c8 \repeat unfold 16 c16 \break
+
+ \bar"|."
+}
--- /dev/null
+\version "2.13.47"
+\header {
+ texidoc="
+Instrument names can also be attached to staff groups.
+"
+}
+
+\paper {
+ left-margin = 3\cm
+}
+\layout {
+ ragged-right = ##t
+}
+
+
+\new StaffGroup \with { instrumentName = #"StaffGroup" } <<
+ \new PianoStaff \with { instrumentName = #"PianoStaff" } <<
+ \new Staff \with { instrumentName = #"Right" } { c''4 }
+ \new Staff \with { instrumentName = #"Left" } { \clef bass c4 }
+ >>
+
+ \new ChoirStaff \with { instrumentName = #"ChoirStaff" } <<
+ \new Staff { c''4 }
+ \new Staff { c''4 }
+ \new Staff { c''4 }
+ >>
+ \new GrandStaff \with { instrumentName = #"GrandStaff" } <<
+ \new Staff \with { instrumentName = #"I" } { c''4 }
+ \new Staff \with { instrumentName = #"II" } { \clef bass c4 }
+ >>
+ % Nested groups should not inherit the instrument name from the parent group
+ \new StaffGroup \with { instrumentName = #"nested group" } <<
+ \new Staff { c''4 }
+ \new StaffGroup <<
+ \new Staff { c''4 }
+ \new Staff { c''4 }
+ >>
+ >>
+>>
--- /dev/null
+\version "2.13.47"
+
+\header {
+ title = "Aligned-above lyrics should stay close to their staff"
+ texidoc = "Lyrics aligned above a context should stay close to that
+context when stretching. The Bass I lyric line stays with the
+Bass staff.
+"
+}
+
+\paper { ragged-last-bottom = ##f }
+
+tune = \relative c { \repeat unfold 2 { c4( e) g2 | \break c1 }
+\bar "|." }
+
+\score {
+
+ \context ChoirStaff <<
+
+ \new Staff = tenors <<
+ \clef "treble_8"
+ \new Voice = tenori { \voiceOne \tune }
+ \new Voice = tenorii { \voiceTwo \tune }
+ >>
+ \new Staff = basses <<
+ \clef "bass"
+ \new Voice = bassi { \voiceOne \tune }
+ \new Voice = bassii { \voiceTwo \tune }
+ >>
+
+ \new Lyrics \with {alignAboveContext=tenors} \lyricsto tenori {
+ Te -- nor one! A -- _ bove!
+ }
+ \new Lyrics \with {alignBelowContext=tenors} \lyricsto tenorii {
+ Te -- nor two! Be -- _ low!
+ }
+ \new Lyrics \with {alignAboveContext=basses} \lyricsto bassi {
+ Bas -- ses one! A -- _ bove!
+ }
+ \new Lyrics \with {alignBelowContext=basses} \lyricsto bassii {
+ Bas -- ses two! Be -- _ low!
+ }
+ >>
+ \layout {}
+ }
--- /dev/null
+\version "2.13.47"
+
+\header {
+ texidoc = "Text that can spread over pages is entered with the
+@code{\\markuplines} command. It can be assigned to a variable and inserted
+at top-level with or without preceding it by @code{\\markuplines}."
+}
+
+#(set-default-paper-size "a6")
+
+mytext = \markuplines {
+ \justified-lines {
+ Lorem ipsum dolor sit amet, consectetur adipisici elit, sed
+ eiusmod tempor incidunt ut labore et dolore magna aliqua. ...
+ }
+}
+
+\markuplines \mytext
+\mytext
style = "classical"
maintainer = "hanwen@xs4all.nl"
maintainerEmail = "hanwen@xs4all.nl"
- maintainerWeb = "http://www.xs4all.nl/~hanwen/"
+ maintainerWeb = "http://www.xs4all.nl/~hanwen/"
lastupdated = "2002/May/21"
source = "Edition Breitkopf 2563"
footer = "Mutopia-2002/05/21-25"
texidoc="
This is the Mozart 3 for horn. It's from an Edition Breitkopf EB
2563, edited by Henri Kling. Henri Kling (1842-1918) was a horn
-virtuoso that taught in Geneva.
+virtuoso that taught in Geneva.
"
}
-\version "2.12.0"
+\version "2.13.46"
\include "mozart-hrn3-defs.ily"
\include "mozart-hrn3-allegro.ily"
\include "mozart-hrn3-rondo.ily"
\paper {
- between-system-space = 20 \mm
+ obsolete-between-system-space = 20 \mm
+ system-system-spacing #'basic-distance = #(/ obsolete-between-system-space staff-space)
+ score-system-spacing #'basic-distance = #(/ obsolete-between-system-space staff-space)
}
\score {
{ \transpose c' bes \allegro }
\layout { }
- \header { piece = "Allegro" opus = "" }
-
+ \header { piece = "Allegro" opus = "" }
+
\midi {
\context {
\Score
\score {
{ \transpose c' bes \romanze }
- \header { piece = "Romanze" opus = "" }
-
+ \header { piece = "Romanze" opus = "" }
+
\midi {
\context {
\Score
{
{ \transpose c' bes \rondo }
\header { piece = "Rondo" opus = "" }
-
+
\midi {
\context {
\Score
}
-\version "2.12.0"
+\version "2.13.46"
#(set-global-staff-size 11)
"Stretchable space runs between refpoints"
}
}
-
+
\break
-
+
\overrideProperty
#"Score.NonMusicalPaperColumn"
#'line-break-system-details
c\break
\overrideProperty
#"Score.NonMusicalPaperColumn" #'line-break-system-details
- #'((bottom-space . 25.0))
+ #'((bottom-space . 25.0))
c_"25 staff space to the bottom of the page. (property bottom-space)"\break
\paper {
ragged-last-bottom = ##f
annotate-spacing = ##t
- between-system-space = 1.0
+ obsolete-between-system-space = 1.0
+ system-system-spacing #'basic-distance = #(/ obsolete-between-system-space staff-space)
+ score-system-spacing #'basic-distance = #(/ obsolete-between-system-space staff-space)
#(set! text-font-defaults
(acons
'font-size 6
text-font-defaults)
-
+
)
}
}
first system can be forced to be uniform."
}
-\version "2.12.0"
+\version "2.13.46"
#(set-default-paper-size "a6")
}
\paper {
- page-top-space = 3 \cm
+ obsolete-page-top-space = 3 \cm
+ top-system-spacing #'basic-distance = #(/ obsolete-page-top-space staff-space)
}
}
--- /dev/null
+\version "2.13.47"
+
+\header {
+
+ texidoc = "
+The space between scores containing Staffs and TabStaffs should
+be consistent. In this example, all of the spacings should be
+equivalent.
+"
+}
+
+\score {
+ { c'4 d' e' f' g'1 }
+ \header {
+ piece = "Title 1"
+ }
+}
+\score {
+ \new TabStaff {
+ c'4 d' e' f' g'1
+ }
+ \header {
+ piece = "Title 2"
+ }
+}
+\score {
+ { c'4 d' e' f' g'1 }
+ \header {
+ piece = "Title 3"
+ }
+}
? robust_scm2rational (scm_cdr (handle), Rational (0))
: Rational (0);
- if (sig_alter == p.get_alteration ())
+ const Pitch other = pitch_interval_[-d];
+
+ if (sig_alter == p.get_alteration ()
+ && !((p.steps () == other.steps ())
+ && (p.get_alteration () != other.get_alteration ())))
{
accidentals_[d]->suicide ();
heads_[d]->set_object ("accidental-grob", SCM_EOL);
if (dynamics_.size () <= 1)
{
- programming_error ("(de)crescendo on items with specified volume.");
+ programming_error ("Impossible or ambiguous (de)crescendo in MIDI.");
return ;
}
-
+
Real delta_v = grow_dir_ * 0.1;
-
+
Real start_v = dynamics_[0]->volume_;
if (dynamics_.back ()->volume_ < 0)
dynamics_.back ()->volume_ = max (min (start_v + grow_dir_ * 0.25, 1.0), 0.1);
Moment start = dynamics_[0]->get_column ()->when ();
Real total_t = moment_to_real (dynamics_.back ()->get_column ()->when () - start);
-
+
for (vsize i = 1; i < dynamics_.size (); i ++)
{
Moment dt_moment = dynamics_[i]->get_column ()->when ()
- start;
Real dt = moment_to_real (dt_moment);
-
+
Real v = start_v + delta_v * (dt / total_t);
- dynamics_[i]->volume_ = v;
+ dynamics_[i]->volume_ = v;
}
}
#include <cstdio>
#include <ctype.h>
#include <cstring> /* memset */
+#include <glib.h>
using namespace std;
#include "dimensions.hh"
return scm_take_locale_stringn (result, len);
}
+
+int
+ly_run_command (char *argv[], char **standard_output, char **standard_error)
+{
+ GError *error = 0;
+ int exit_status = 0;
+ int flags = G_SPAWN_SEARCH_PATH;
+ if (!standard_output)
+ flags |= G_SPAWN_STDOUT_TO_DEV_NULL;
+ if (!standard_error)
+ flags |= G_SPAWN_STDERR_TO_DEV_NULL;
+ if (!g_spawn_sync (0, argv, 0, GSpawnFlags (flags),
+ 0, 0,
+ standard_output, standard_error,
+ &exit_status, &error))
+ {
+ fprintf (stderr, "failed (%d): %s: %s\n", exit_status, argv[0], error->message);
+ g_error_free (error);
+ if (!exit_status)
+ exit_status = -1;
+ }
+
+ return exit_status;
+}
+
+LY_DEFINE (ly_spawn, "ly:spawn",
+ 1, 0, 1, (SCM command, SCM rest),
+ "Simple interface to g_spawn_sync"
+ " @var{str}."
+ " The error is formatted with @code{format} and @var{rest}.")
+
+{
+ LY_ASSERT_TYPE (scm_is_string, command, 1);
+
+ int argc = scm_is_pair (rest) ? scm_ilength (rest) : 0;
+ char **argv = new char*[argc + 2];
+
+ int n = 0;
+ argv[n++] = ly_scm2str0 (command);
+ for (SCM s = rest; scm_is_pair (s); s = scm_cdr (s))
+ argv[n++] = ly_scm2str0 (scm_car (s));
+ argv[n] = 0;
+
+ char *standard_output = 0;
+ char *standard_error = 0;
+ int exit_status = be_verbose_global
+ ? ly_run_command (argv, &standard_output, &standard_error)
+ : ly_run_command (argv, 0, 0);
+
+ if (be_verbose_global)
+ {
+ fprintf (stderr, "\n%s", standard_output);
+ fprintf (stderr, "%s", standard_error);
+ }
+
+ for (int i = 0; i < n; i++)
+ free (argv[i]);
+ delete[] argv;
+
+ return scm_from_int (exit_status);
+}
Drul_array<Real> ly_scm2realdrul (SCM);
Slice int_list_to_slice (SCM l);
SCM ly_interval2scm (Drul_array<Real>);
-char *ly_scm2newstr (SCM str, size_t *lenp);
+char *ly_scm2str0 (SCM str);
Real robust_scm2double (SCM, double);
int robust_scm2int (SCM, int);
#define MLP_BREVIS 0x04 // mensural brevis head
#define MLP_LONGA 0x08 // mensural brevis head with right cauda
#define MLP_MAXIMA 0x10 // mensural maxima head without stem
-#define MLP_FLEXA 0x20 // mensural flexa-like shape
+#define MLP_FLEXA_BEGIN 0x20 // start of obliqua
+#define MLP_FLEXA_END 0x40 // end of obliqua
#define MLP_STEM (MLP_UP | MLP_DOWN)
#define MLP_SINGLE_HEAD (MLP_BREVIS | MLP_LONGA | MLP_MAXIMA)
+#define MLP_FLEXA (MLP_FLEXA_BEGIN | MLP_FLEXA_END)
#define MLP_ANY (MLP_FLEXA | MLP_SINGLE_HEAD)
struct Mensural_ligature
Real average_force () const;
vsize page_count () const;
- vsize system_count () const;
void print () const;
Page_spacing_result ();
};
#include "international.hh"
-#include "ligature-engraver.hh"
+#include "engraver.hh"
#include "note-column.hh"
#include "tuplet-bracket.hh"
#include "spanner.hh"
#include "stream-event.hh"
-#include "spanner.hh"
#include "item.hh"
#include "translator.icc"
str.length ());
}
-
char *
-ly_scm2newstr (SCM str, size_t *lenp)
+ly_scm2str0 (SCM str)
{
- char* p = scm_to_locale_stringn(str, lenp);
- return p;
+ return scm_to_locale_string (str);
}
/*
}
int pitch = unsmob_pitch (nr->get_property ("pitch"))->steps ();
- int delta_pitch = 0;
+ int prim = 0;
if (at_beginning)
{
}
else
{
- delta_pitch = pitch - prev_pitch;
- if (delta_pitch == 0)
+ if (pitch == prev_pitch)
{
nr->origin ()->warning
(_ ("prime interval within ligature -> skipping"));
at_beginning = true;
- primitive->set_property ("primitive",
- scm_from_int (MLP_NONE));
+ prim = MLP_NONE;
continue;
}
}
{
nr->origin ()->warning
(_ ("mensural ligature: duration none of Mx, L, B, S -> skipping"));
- primitive->set_property ("primitive",
- scm_from_int (MLP_NONE));
+ prim = MLP_NONE;
at_beginning = true;
continue;
}
- // apply_transition replacement begins
bool general_case = true;
+ bool make_flexa = false;
+ bool allow_flexa = true;
// first check special cases
// 1. beginning
// a. semibreves
if (duration_log == 0)
{
- primitive->set_property ("primitive",
- scm_from_int (MLP_UP | MLP_BREVIS));
- prev_semibrevis = prev_brevis_shape = true;
+ prim = MLP_UP | MLP_BREVIS;
general_case = false;
}
// b. descendens longa or brevis
&& duration_log > -3)
{
int left_stem = duration_log == -1 ? MLP_DOWN : 0;
-
- primitive->set_property ("primitive",
- scm_from_int (left_stem | MLP_BREVIS));
- prev_brevis_shape = true;
- prev_semibrevis = general_case = false;
+ prim = left_stem | MLP_BREVIS;
+ general_case = false;
}
}
// 2. initial semibrevis must be followed by another one
prev_semibrevis = false;
if (duration_log == 0)
{
- primitive->set_property ("primitive", scm_from_int (MLP_BREVIS));
+ prim = MLP_BREVIS;
general_case = false;
}
else
{
nr->origin ()->warning
(_ ("semibrevis must be followed by another one -> skipping"));
- primitive->set_property ("primitive",
- scm_from_int (MLP_NONE));
+ prim = MLP_NONE;
at_beginning = true;
continue;
}
nr->origin ()->warning
(_ ("semibreves can only appear at the beginning of a ligature,\n"
"and there may be only zero or two of them"));
- primitive->set_property ("primitive",
- scm_from_int (MLP_NONE));
+ prim = MLP_NONE;
at_beginning = true;
continue;
}
// 4. end, descendens
- else if (i == s - 1 && delta_pitch < 0)
+ else if (i == s - 1 && pitch < prev_pitch)
{
// brevis; previous note must be turned into flexa
if (duration_log == -1)
{
if (prev_brevis_shape)
{
- prev_primitive->set_property
- ("primitive",
- scm_from_int
- (MLP_FLEXA
- | (scm_to_int (prev_primitive->get_property ("primitive"))
- & MLP_DOWN)));
- primitive->set_property ("primitive", scm_from_int (MLP_NONE));
- break; // no more notes, no join
+ make_flexa = true;
+ general_case = false;
}
else
{
"when the last note is a descending brevis,\n"
"the penultimate note must be another one,\n"
"or the ligatura must be LB or SSB"));
- primitive->set_property ("primitive", scm_from_int (MLP_NONE));
+ prim = MLP_NONE;
break;
}
}
// longa
else if (duration_log == -2)
{
- primitive->set_property ("primitive", scm_from_int (MLP_BREVIS));
- general_case = false;
+ prim = MLP_BREVIS;
+ general_case = allow_flexa = false;
}
- // else maxima; fall through regular case below
+ // else maxima; fall through to regular case below
}
+ if (allow_flexa
+ && to_boolean (primitive->get_property ("ligature-flexa")))
+ {
+ /*
+ flexa requested, check whether allowed:
+ - there should be a previous note
+ - both of the notes must be of brevis shape
+ (i.e. can't be maxima or flexa;
+ longa is forbidden as well - it's nonexistent anyway)
+ - no compulsory flexa for the next note,
+ i.e. it's not an ultimate descending breve
+ */
+ make_flexa = !at_beginning && prev_brevis_shape && duration_log > -2;
+ if (make_flexa && i == s - 2)
+ {
+ /*
+ check last condition: look ahead to next note
+ */
+ Grob_info next_info = primitives[i + 1];
+ Item *next_primitive = dynamic_cast<Item *> (next_info.grob ());
+ if (Rhythmic_head::duration_log (next_primitive) == -1)
+ {
+ /*
+ breve: check whether descending
+ */
+ int const next_pitch = unsmob_pitch
+ (next_info.event_cause ()->get_property ("pitch"))->steps ();
+ if (next_pitch < pitch)
+ /*
+ sorry, forbidden
+ */
+ make_flexa = false;
+ }
+ }
+ }
+
if (general_case)
{
- static int const shape[3] = {MLP_MAXIMA, MLP_LONGA, MLP_BREVIS};
+ static int const shape[3] = {MLP_MAXIMA, MLP_LONGA, MLP_BREVIS};
- primitive->set_property ("primitive",
- scm_from_int (shape[duration_log + 3]));
- prev_brevis_shape = duration_log == -1;
+ prim = shape[duration_log + 3];
}
+ if (make_flexa)
+ {
+ /*
+ turn the note with the previous one into a flexa
+ */
+ prev_primitive->set_property
+ ("primitive",
+ scm_from_int
+ (MLP_FLEXA_BEGIN
+ | (scm_to_int (prev_primitive->get_property ("primitive"))
+ & MLP_STEM)));
+ prev_primitive->set_property
+ ("flexa-interval", scm_from_int (pitch - prev_pitch));
+ prim = MLP_FLEXA_END;
+ primitive->set_property
+ ("flexa-interval", scm_from_int (pitch - prev_pitch));
+ }
+
// join_primitives replacement
- if (!at_beginning)
- {
- /*
- if the previous note is longa-shaped and this note is lower,
- then the joining line may hide the stem, so it is made longer
- to serve as stem as well
- */
- if (delta_pitch < 0
- && (scm_to_int (prev_primitive->get_property ("primitive"))
- & MLP_LONGA))
- {
- delta_pitch -= 6;
- // instead of number 6
- // the legth of the longa stem should be queried something like
- // Font_interface::get_default_font (ligature)->find_by_name
- // ("noteheads.sM2mensural").extent (Y_AXIS).length ()
- }
- prev_primitive->set_property ("join-right-amount",
- scm_from_int (delta_pitch));
- // perhaps set add-join as well
- }
+ if (!(at_beginning || make_flexa))
+ prev_primitive->set_property ("add-join", ly_bool2scm (true));
+
at_beginning = false;
prev_primitive = primitive;
prev_pitch = pitch;
- // apply_transition replacement ends
+ primitive->set_property ("primitive", scm_from_int (prim));
+ prev_brevis_shape = (prim & MLP_BREVIS) != 0;
+ prev_semibrevis = (prim & MLP_UP) != 0;
}
}
Real head_width
= Font_interface::get_default_font (ligature)->
find_by_name ("noteheads.sM1mensural").extent (X_AXIS).length ();
- Real flexa_width
- = robust_scm2double (ligature->get_property ("flexa-width"), 2);
Real maxima_head_width
= Font_interface::get_default_font (ligature)->
- find_by_name ("noteheads.sM1neomensural").extent (X_AXIS).length ();
-
- flexa_width *= Staff_symbol_referencer::staff_space (ligature);
-
- Real half_flexa_width = 0.5 * (flexa_width + thickness);
+ find_by_name ("noteheads.sM3ligmensural").extent (X_AXIS).length ();
+ Item *prev_primitive = NULL;
for (vsize i = 0; i < primitives.size (); i++)
{
Item *primitive = dynamic_cast<Item *> (primitives[i].grob ());
primitive->set_property ("thickness",
scm_from_double (thickness));
- switch (output & MLP_ANY)
- {
- case MLP_NONE:
- primitive->set_property ("head-width",
- scm_from_double (half_flexa_width));
- break;
- case MLP_BREVIS:
- case MLP_LONGA:
- primitive->set_property ("head-width",
- scm_from_double (head_width));
- break;
- case MLP_MAXIMA:
- primitive->set_property ("head-width",
- scm_from_double (maxima_head_width));
- break;
- case MLP_FLEXA:
- primitive->set_property ("head-width",
- scm_from_double (half_flexa_width));
- primitive->set_property ("flexa-width",
- scm_from_double (flexa_width));
- break;
- default:
- programming_error (_ ("unexpected case fall-through"));
- break;
- }
+ switch (output & MLP_ANY) {
+ case MLP_BREVIS:
+ case MLP_LONGA:
+ primitive->set_property ("head-width", scm_from_double (head_width));
+ break;
+ case MLP_MAXIMA:
+ primitive->set_property ("head-width",
+ scm_from_double (maxima_head_width));
+ break;
+ case MLP_FLEXA_BEGIN:
+ /*
+ the next note (should be MLP_FLEXA_END) will handle this one
+ */
+ break;
+ case MLP_FLEXA_END:
+ {
+ SCM flexa_scm = primitive->get_property ("flexa-width");
+ Real const flexa_width = robust_scm2double (flexa_scm, 2.0);
+ SCM head_width = scm_from_double (0.5 * (flexa_width + thickness));
+ primitive->set_property ("head-width", head_width);
+ prev_primitive->set_property ("head-width", head_width);
+ prev_primitive->set_property ("flexa-width", flexa_scm);
+ }
+ break;
+ default:
+ programming_error (_ ("unexpected case fall-through"));
+ break;
+ }
+
+ prev_primitive = primitive;
}
}
{
Item *first = 0;
Real distance = 0.0;
- Real dot_shift = 0.0;
+ Real staff_space = 0.0;
+ Real thickness = 0.0;
+
for (vsize i = 0; i < primitives.size (); i++)
{
Item *current = dynamic_cast<Item *> (primitives[i].grob ());
if (i == 0)
{
first = current;
- dot_shift = 1.5 * Staff_symbol_referencer::staff_space (first);
+ staff_space = Staff_symbol_referencer::staff_space (first);
+ thickness = scm_to_double (current->get_property ("thickness"));
}
move_related_items_to_column (current, first->get_column (),
distance);
- distance
- += scm_to_double (current->get_property ("head-width"))
- - scm_to_double (current->get_property ("thickness"));
+ Real head_width = scm_to_double (current->get_property ("head-width"));
+ distance += head_width - thickness;
if (Rhythmic_head::dot_count (current) > 0)
- // Move dots above/behind the ligature.
+ /*
+ Move dots above/behind the ligature.
+ dots should also avoid staff lines.
+ */
{
+ Grob *dot_gr = Rhythmic_head::get_dots (current);
+
+ bool const on_line = Staff_symbol_referencer::on_line
+ (current,
+ robust_scm2int (current->get_property ("staff-position"), 0));
+ Real vert_shift = on_line ? staff_space * 0.5 : 0.0;
+ bool const flexa_begin =
+ scm_to_int (current->get_property ("primitive"))
+ & MLP_FLEXA_BEGIN;
+
if (i + 1 < primitives.size ())
- // dot in the midst => move above head
+ /*
+ dot in the midst => avoid next note;
+ what to avoid and where depends on
+ being on a line or between lines
+ */
{
- // FIXME: Amount of vertical dot-shift should depend on
- // pitch.
- //
- // FIXME: dot placement is horizontally slightly off.
- Rhythmic_head::get_dots (current)->translate_axis (dot_shift, Y_AXIS);
- }
- else
- // trailing dot => move behind head
- {
- double head_width =
- scm_to_double (current->get_property ("head-width"));
- Rhythmic_head::get_dots (current)->
- translate_axis (head_width, X_AXIS);
+ int const delta =
+ scm_to_int (current->get_property ("delta-position"));
+ if (flexa_begin)
+ vert_shift += delta < 0
+ ? staff_space : (on_line ? -2.0 : -1.0) * staff_space;
+ else if (on_line)
+ {
+ if (0 < delta && delta < 3)
+ vert_shift -= staff_space;
+ }
+ else if (delta == 1 || delta == -1)
+ vert_shift -= delta * staff_space;
}
+
+ dot_gr->translate_axis (vert_shift, Y_AXIS);
+
+ /*
+ move all dots behind head
+ */
+ dot_gr->translate_axis
+ ((flexa_begin ? staff_space * 0.6 : head_width) - 2.0*thickness, X_AXIS);
}
}
}
#include "warn.hh"
/*
+ draws one half a flexa, i.e. a portion corresponding to a single note.
+ this way coloration of the two notes building up the flexa can be
+ handled independently.
+
* TODO: divide this function into mensural and neo-mensural style.
*
* TODO: move this function to class Lookup?
*/
Stencil
brew_flexa (Grob *me,
- Real interval,
bool solid,
Real width,
- Real vertical_line_thickness)
+ Real thickness,
+ bool begin)
{
Real staff_space = Staff_symbol_referencer::staff_space (me);
+
+ /*
+ The thickness of the horizontal lines of the flexa shape
+ should be equal to that of the horizontal lines of the
+ neomensural brevis note head (see mf/parmesan-heads.mf).
+ */
+ Real const horizontal_line_thickness = staff_space * 0.35;
+
+ // URGH! vertical_line_thickness is adjustable (via thickness
+ // property), while horizontal_line_thickness is constant.
+ // Maybe both should be adjustable independently?
+
+ Real height = staff_space - horizontal_line_thickness;
+ Stencil stencil;
+ Real const interval =
+ robust_scm2double (me->get_property ("flexa-interval"), 0.0);
Real slope = (interval / 2.0 * staff_space) / width;
// Compensate optical illusion regarding vertical position of left
Real slope_correction = 0.2 * staff_space * sign (slope);
Real corrected_slope = slope + slope_correction / width;
- Stencil stencil;
if (solid) // colorated flexae
{
- Stencil solid_head
- = Lookup::beam (corrected_slope, width, staff_space, 0.0);
- stencil.add_stencil (solid_head);
+ stencil = Lookup::beam (corrected_slope, width * 0.5, staff_space, 0.0);
}
else // outline
{
- /*
- The thickness of the horizontal lines of the flexa shape
- should be equal to that of the horizontal lines of the
- neomensural brevis note head (see mf/parmesan-heads.mf).
- */
- Real const horizontal_line_thickness = staff_space * 0.35;
-
- // URGH! vertical_line_thickness is adjustable (via thickness
- // property), while horizontal_line_thickness is constant.
- // Maybe both should be adjustable independently?
-
- Real height = staff_space - horizontal_line_thickness;
-
- Stencil left_edge
- = Lookup::beam (corrected_slope, vertical_line_thickness, height, 0.0);
- stencil.add_stencil (left_edge);
-
- Stencil right_edge
- = Lookup::beam (corrected_slope, vertical_line_thickness, height, 0.0);
- right_edge.translate_axis (width - vertical_line_thickness, X_AXIS);
- right_edge.translate_axis ((width - vertical_line_thickness) *
- corrected_slope, Y_AXIS);
- stencil.add_stencil (right_edge);
-
- Stencil bottom_edge
- = Lookup::beam (corrected_slope, width,
- horizontal_line_thickness, 0.0);
- bottom_edge.translate_axis (-0.5 * height, Y_AXIS);
+ stencil = Lookup::beam (corrected_slope, thickness, height, 0.0);
+ if (!begin)
+ {
+ stencil.translate_axis (width*0.5 - thickness, X_AXIS);
+ stencil.translate_axis (corrected_slope * (width*0.5 - thickness),
+ Y_AXIS);
+ }
+
+ Stencil bottom_edge =
+ Lookup::beam (corrected_slope, width * 0.5, horizontal_line_thickness,
+ 0.0);
+ bottom_edge.translate_axis (-0.5*height, Y_AXIS);
stencil.add_stencil (bottom_edge);
- Stencil top_edge
- = Lookup::beam (corrected_slope, width,
- horizontal_line_thickness, 0.0);
- top_edge.translate_axis (+0.5 * height, Y_AXIS);
+ Stencil top_edge =
+ Lookup::beam (corrected_slope, width * 0.5, horizontal_line_thickness,
+ 0.0);
+ top_edge.translate_axis (+0.5*height, Y_AXIS);
stencil.add_stencil (top_edge);
}
- stencil.translate_axis (ypos_correction, Y_AXIS);
+
+ if (begin)
+ stencil.translate_axis (ypos_correction, Y_AXIS);
+ else
+ {
+ stencil.translate_axis (0.5 * thickness, X_AXIS);
+
+ stencil.translate_axis (interval / -4.0 * staff_space, Y_AXIS);
+ }
+
return stencil;
}
int primitive = scm_to_int (primitive_scm);
Stencil out;
- int delta_pitch = 0;
Real thickness = 0.0;
Real width = 0.0;
+ Real flexa_width = 0.0;
Real staff_space = Staff_symbol_referencer::staff_space (me);
- if (primitive & MLP_ANY)
- thickness = robust_scm2double (me->get_property ("thickness"), .14);
- if (primitive & MLP_FLEXA)
+ bool const color =
+ me->get_property ("style") == ly_symbol2scm ("blackpetrucci");
+ bool const semi =
+ me->get_property ("style") == ly_symbol2scm ("semipetrucci");
+
+ if (primitive & MLP_ANY)
{
- delta_pitch = robust_scm2int (me->get_property ("delta-position"),
- 0);
- width
- = robust_scm2double (me->get_property ("flexa-width"), 2.0 * staff_space);
+ thickness = robust_scm2double (me->get_property ("thickness"), .14);
+ width = robust_scm2double (me->get_property ("head-width"), staff_space);
}
- if (primitive & MLP_SINGLE_HEAD)
- width = robust_scm2double (me->get_property ("head-width"), staff_space);
+ if (primitive & MLP_FLEXA)
+ flexa_width = robust_scm2double (me->get_property ("flexa-width"), 2.0)
+ * staff_space;
+
+ int const note_shape = primitive & MLP_ANY;
- switch (primitive & MLP_ANY)
+ switch (note_shape)
{
case MLP_NONE:
return Lookup::blank (Box (Interval (0, 0), Interval (0, 0)));
case MLP_LONGA: // mensural brevis head with right cauda
out = Font_interface::get_default_font (me)->find_by_name
- ("noteheads.sM2mensural");
+ (color ? "noteheads.sM2blackmensural" :
+ semi ? "noteheads.sM2semimensural" : "noteheads.sM2mensural");
break;
case MLP_BREVIS: // mensural brevis head
out = Font_interface::get_default_font (me)->find_by_name
- ("noteheads.sM1mensural");
+ (color ? "noteheads.sM1blackmensural" :
+ semi ? "noteheads.sM1semimensural" : "noteheads.sM1mensural");
break;
case MLP_MAXIMA: // should be mensural maxima head without stem
out = Font_interface::get_default_font (me)->find_by_name
- ("noteheads.sM1neomensural");
+ (color ? "noteheads.sM3blackligmensural" :
+ semi ? "noteheads.sM3semiligmensural" : "noteheads.sM3ligmensural");
break;
- case MLP_FLEXA:
- out = brew_flexa (me, delta_pitch, false, width, thickness);
+ case MLP_FLEXA_BEGIN:
+ case MLP_FLEXA_END:
+ out = brew_flexa (me, color, flexa_width, thickness,
+ note_shape == MLP_FLEXA_BEGIN);
break;
default:
programming_error (_ ("Mensural_ligature:"
out.add_stencil (join);
}
- SCM join_right_scm = me->get_property ("join-right-amount");
-
- if (scm_is_number (join_right_scm))
+ if (to_boolean (me->get_property ("add-join")))
{
- int join_right = scm_to_int (join_right_scm);
+ int join_right = scm_to_int (me->get_property ("delta-position"));
if (join_right)
{
Real y_top = join_right * 0.5 * staff_space;
{
y_bottom = y_top;
y_top = 0.0;
+
+ /*
+ if the previous note is longa-shaped,
+ the joining line may hide the stem, so made it longer
+ to serve as stem as well
+ */
+ if (primitive & MLP_LONGA)
+ /*
+ instead of 3.0 the length of a longa stem should be used
+ Font_interface::get_default_font (???)->find_by_name
+ ("noteheads.s-2mensural").extent (Y_AXIS).length () * 0.5
+ */
+ y_bottom -= 3.0 * staff_space;
}
Interval x_extent (width - thickness, width);
/* properties */
"delta-position "
- "flexa-width "
+ "ligature-flexa "
"head-width "
- "join-right-amount "
+ "add-join "
+ "flexa-interval "
"primitive "
"thickness "
);
-
return buffer;
}
else
- programming_error (_f ("Free type error: %s",
+ programming_error (_f ("FreeType error: %s",
freetype_error_string (error_code).c_str ()
));
Line_division ideal_line_division = current_configuration (0);
Line_division best_division = ideal_line_division;
vsize min_sys_count = 1;
+
+ // Note that system_count () only counts non-title systems.
vsize ideal_sys_count = system_count ();
if (!scm_is_integer (forced_page_count))
best = space_systems_on_best_pages (0, first_page_num);
page_count = best.systems_per_page_.size ();
- ideal_sys_count = best.system_count ();
min_sys_count = ideal_sys_count - best.systems_per_page_.back ();
if (page_count > 1 && best.systems_per_page_[page_count - 2] > 1)
|| ideal_sys_count < min_system_count (0, end))
{
warning (_ ("could not satisfy systems-per-page and page-count at the same time, ignoring systems-per-page"));
- ideal_sys_count = best.system_count ();
+ ideal_sys_count = system_count ();
min_sys_count = page_count;
}
else
system_count_status_ = SYSTEM_COUNT_OK;
}
-vsize
-Page_spacing_result::system_count () const
-{
- vsize total = 0;
- for (vsize i = 0; i < systems_per_page_.size(); i++)
- total += systems_per_page_[i];
-
- return total;
-}
-
vsize
Page_spacing_result::page_count () const
{
%token <scm> MARKUP_FUNCTION
%token <scm> MARKUP_LIST_FUNCTION
%token <scm> MARKUP_IDENTIFIER
+%token <scm> MARKUPLINES_IDENTIFIER
%token <scm> MUSIC_FUNCTION
%token <scm> MUSIC_IDENTIFIER
%token <scm> NOTENAME_PITCH
| full_markup {
$$ = $1;
}
+ | full_markup_list {
+ $$ = $1;
+ }
| DIGIT {
$$ = scm_from_int ($1);
}
;
full_markup_list:
- MARKUPLINES
+ MARKUPLINES_IDENTIFIER {
+ $$ = $1;
+ }
+ | MARKUPLINES
{ PARSER->lexer_->push_markup_state (); }
markup_list {
$$ = $3;
;
markup_list:
- markup_composed_list {
+ MARKUPLINES_IDENTIFIER {
+ $$ = $1;
+ }
+ | markup_composed_list {
$$ = $1;
}
| markup_braced_list {
if (is_lyric_state ())
return LYRIC_MARKUP_IDENTIFIER;
return MARKUP_IDENTIFIER;
+ } else if (Text_interface::is_markup_list (sid)) {
+ *destination = sid;
+ return MARKUPLINES_IDENTIFIER;
}
return -1;
\consists "Font_size_engraver"
\consists "Instrument_name_engraver"
+ %% explicitly set instrument, so it is not inherited from the parent
+ instrumentName = #'()
+ shortInstrumentName = #'()
+
predefinedDiagramTable = #default-fret-table
}
%% explicitly set instrument, so we don't get
%% weird effects when doing instrument names for
%% piano staves
-
instrumentName = #'()
shortInstrumentName = #'()
\consists "Vertical_align_engraver"
topLevelAlignment = ##f
+ \consists "Instrument_name_engraver"
\consists "System_start_delimiter_engraver"
systemStartDelimiter = #'SystemStartBracket
+ %% explicitly set instrument, so it is not inherited from the parent
+ instrumentName = #'()
+ shortInstrumentName = #'()
vocalName = #'()
shortVocalName = #'()
\consists "Axis_group_engraver"
\consists "Ledger_line_engraver"
+ %% explicitly set instrument, so it is not inherited from the parent
+ instrumentName = #'()
+ shortInstrumentName = #'()
+
\accepts "Voice"
\accepts "CueVoice"
\defaultchild "Voice"
side, grouping the staves together. The bar lines of the
contained staves are connected vertically."
+ \consists "Instrument_name_engraver"
\consists "Span_bar_engraver"
\consists "Span_arpeggio_engraver"
\consists "System_start_delimiter_engraver"
systemStartDelimiter = #'SystemStartBrace
topLevelAlignment = ##f
+ %% explicitly set instrument, so it is not inherited from the parent
+ instrumentName = #'()
+ shortInstrumentName = #'()
\defaultchild "Staff"
\accepts "Staff"
\accepts "FiguredBass"
\accepts "Dynamics"
+ \accepts "ChordNames"
}
\context{
\name "PianoStaff"
\alias "GrandStaff"
- \description "Just like @code{GrandStaff} but with support for
-instrument names at the start of each system."
+ \description "Just like @code{GrandStaff}, but the staves are only removed
+together, never separately."
- \consists "Instrument_name_engraver"
\consists "Vertical_align_engraver"
\consists "Keep_alive_together_engraver"
topLevelAlignment = ##f
\consists "Vertical_align_engraver"
topLevelAlignment = ##f
+ \consists "Instrument_name_engraver"
\consists "Span_bar_engraver"
\consists "Span_arpeggio_engraver"
\consists "Output_property_engraver"
systemStartDelimiter = #'SystemStartBracket
+ %% explicitly set instrument, so it is not inherited from the parent
+ instrumentName = #'()
+ shortInstrumentName = #'()
\consists "System_start_delimiter_engraver"
\consists "Instrument_name_engraver"
\consists "Font_size_engraver"
\consists "Hara_kiri_engraver"
+ %% explicitly set instrument, so it is not inherited from the parent
+ instrumentName = #'()
+ shortInstrumentName = #'()
\override VerticalAxisGroup #'remove-first = ##t
\override VerticalAxisGroup #'remove-empty = ##t
#(define-music-function (parser location proc) (procedure?)
(_i "Modify context properties with Scheme procedure @var{proc}.")
(make-music 'ApplyContext
- 'origin location
'procedure proc))
applyMusic =
#(define-music-function (parser location ctx proc) (symbol? procedure?)
(_i "Apply function @code{proc} to every layout object in context @code{ctx}")
(make-music 'ApplyOutputEvent
- 'origin location
'procedure proc
'context-type ctx))
#(define-music-function (parser location n) (integer?)
(_i "Print a warning if the current bar number is not @var{n}.")
(make-music 'ApplyContext
- 'origin location
'procedure
(lambda (c)
(let ((cbn (ly:context-property c 'currentBarNumber)))
(_i "Set the current clef to @var{type}.")
(make-clef-set type))
+
+compoundMeter =
+#(define-music-function (parser location args) (pair?)
+ (_i "Create compound time signatures. The argument is a Scheme list of
+lists. Each list describes one fraction, with the last entry being the
+denominator, while the first entries describe the summands in the
+enumerator. If the time signature consists of just one fraction,
+the list can be given directly, i.e. not as a list containing a single list.
+For example, a time signature of (3+1)/8 + 2/4 would be created as
+@code{\\compoundMeter #'((3 1 8) (2 4))}, and a time signature of (3+2)/8
+as @code{\\compoundMeter #'((3 2 8))} or shorter
+@code{\\compoundMeter #'(3 2 8)}.")
+ (let* ((mlen (calculate-compound-measure-length args))
+ (beat (calculate-compound-base-beat args))
+ (beatGrouping (calculate-compound-beat-grouping args))
+ (timesig (cons (ly:moment-main-numerator mlen)
+ (ly:moment-main-denominator mlen))))
+ #{
+ \once \override Staff.TimeSignature #'stencil = #(lambda (grob)
+ (grob-interpret-markup grob (format-compound-time $args)))
+ \set Timing.timeSignatureFraction = $timesig
+ \set Timing.baseMoment = $beat
+ \set Timing.beatStructure = $beatGrouping
+ \set Timing.beamExceptions = #'()
+ \set Timing.measureLength = $mlen
+ #} ))
+
+
cueClef =
#(define-music-function (parser location type) (string?)
(_i "Set the current cue clef to @var{type}.")
#(define-music-function (parser location pitch-note) (ly:music?)
(_i "Octave check.")
(make-music 'RelativeOctaveCheck
- 'origin location
'pitch (pitch-of-note pitch-note)))
ottava =
(set! context-name (string->symbol (list-ref name-components 0)))))
(make-music 'ApplyOutputEvent
- 'origin location
'context-type context-name
'procedure
(lambda (grob orig-context context)
usually contains spacers or multi-measure rests.")
(make-music 'QuoteMusic
'element main-music
- 'quoted-music-name what
- 'origin location))
+ 'quoted-music-name what))
removeWithTag =
#(define-music-function (parser location tag music) (symbol? ly:music?)
'quoted-context-id "cue"
'quoted-music-name what
'quoted-voice-direction dir
- 'quoted-transposition (pitch-of-note pitch-note)
- 'origin location))
+ 'quoted-transposition (pitch-of-note pitch-note)))
transposition =
#(define-music-function (parser location pitch-note) (ly:music?)
### only update this when the language compiles correctly!
# LANGUAGES = (site, de, es, fr, hu, it, ja, nl)
-WEB_LANGS = es fr it nl de hu
+WEB_LANGS = es fr it nl de hu ja
TEXI2HTML=ONLY_WEB=1 TOP_SRC_DIR=$(top-src-dir) DEPTH=$(depth) PERL_UNICODE=SD $(TEXI2HTML_PROGRAM)
dalpha = direction * alpha;
if staffline_adjustment = between_staff_lines:
- stem_ht# = 1.00 staff_space#;
+ stem_ht# = 2.00 staff_space#;
elseif staffline_adjustment = on_staff_line:
- stem_ht# = 1.50 staff_space#;
+ stem_ht# = 2.50 staff_space#;
else: % staffline_adjustment = anywhere
- stem_ht# = 1.25 staff_space#;
+ stem_ht# = 2.25 staff_space#;
fi;
define_pixels (ht, wd, stem_ht);
%
%
-def draw_neomensural_brevis (expr brevwid) =
+def draw_neomensural_brevis (expr brevwid, open, full) =
save beamheight, head_width;
save holeheight, stem_width;
save serif_size, serif_protrude;
penpos4 (beamheight, 90);
penpos5 (stem_width, 180);
- save pat_in, pat_out;
- path pat_in, pat_out;
+ save pat_out;
+ path pat_out;
pat_out := z4l
-- z3l{left}
-- cycle;
fill pat_out;
- pat_in := z4r
- -- z3r{left}
- .. z2r{up}
- -- z1r;
- pat_in := pat_in
- -- reverse pat_in yscaled -1;
- pat_in := pat_in
- -- reverse pat_in shifted (-x4r, 0)
- xscaled -1
- shifted (x4l, 0)
- -- cycle;
- unfill pat_in;
+ if open:
+ save pat_in;
+ path pat_in;
+
+ pat_in := z4r
+ -- z3r{left}
+ .. z2r{up}
+ -- z1r;
+ pat_in := pat_in
+ -- reverse pat_in yscaled -1;
+ if full:
+ pat_in := pat_in
+ -- reverse pat_in shifted (-x4r, 0)
+ xscaled -1
+ shifted (x4l, 0);
+ fi;
+ pat_in := pat_in
+ -- cycle;
+ unfill pat_in;
+ fi;
penlabels (1, 2, 3, 4, 5);
enddef;
%%% This head does not seem to be used anywhere. Junk me? -- jr
def draw_neomensural_left_stemmed_head (expr wid) =
- draw_neomensural_brevis (wid);
+ draw_neomensural_brevis (wid, true, true);
x6 = x7 = stem_width / 2;
y6 = y5;
% the left, some say right. Right wins democratically.
%
def draw_neomensural_longa (expr wid) =
- draw_neomensural_brevis (wid);
+ draw_neomensural_brevis (wid, true, true);
save theta;
fet_beginchar ("Neo-mensural brevis notehead", "sM1neomensural");
- draw_neomensural_brevis (2 staff_space#);
+ draw_neomensural_brevis (2 staff_space#, true, true);
fet_endchar;
fet_endchar;
-def draw_mensural_brevis (expr wid) =
+def draw_mensural_brevis (expr wid, open, full) =
% TODO. For the moment, fall back to draw_neomensural_brevis.
- draw_neomensural_brevis (wid);
+ draw_neomensural_brevis (wid, open, full);
enddef;
%%% This head does not seem to be used anywhere. Junk me? -- jr
-def draw_mensural_left_stemmed_head (expr wid) =
- draw_mensural_brevis (wid);
+def draw_mensural_left_stemmed_head (expr wid, open, full) =
+ draw_mensural_brevis (wid, open, full);
x6 = x7 = stem_width / 2;
y6 = y5;
enddef;
-def draw_mensural_longa (expr wid) =
- draw_mensural_brevis (wid);
+def draw_mensural_longa (expr wid, open, full) =
+ draw_mensural_brevis (wid, open, full);
x6 = x7 = head_width - stem_width / 2;
y6 = y5;
%%% This head does not seem to be used anywhere. Junk me? -- jr
fet_beginchar ("Mensural left stemmed notehead", "slmensural");
- draw_mensural_left_stemmed_head (staff_space#);
+ draw_mensural_left_stemmed_head (staff_space#, true, true);
fet_endchar;
fet_beginchar ("Mensural maxima notehead", "sM3mensural");
- draw_mensural_longa (2.0 staff_space#);
+ draw_mensural_longa (2.0 staff_space#, true, true);
+fet_endchar;
+
+
+fet_beginchar ("Mensural maxima notehead in ligaturae", "sM3ligmensural");
+ draw_mensural_brevis (2.0 staff_space#, true, true);
fet_endchar;
fet_beginchar ("Mensural longa notehead", "sM2mensural");
- draw_mensural_longa (staff_space#);
+ draw_mensural_longa (staff_space#, true, true);
fet_endchar;
fet_beginchar ("Mensural brevis notehead", "sM1mensural");
- draw_mensural_brevis (staff_space#);
+ draw_mensural_brevis (staff_space#, true, true);
+fet_endchar;
+
+
+fet_beginchar ("Black mensural maxima notehead", "sM3blackmensural");
+ draw_mensural_longa (2.0 staff_space#, false, false);
+fet_endchar;
+
+
+fet_beginchar ("Black mensural maxima notehead in ligaturae", "sM3blackligmensural");
+ draw_mensural_brevis (2.0 staff_space#, false, false);
+fet_endchar;
+
+
+fet_beginchar ("Black mensural longa notehead", "sM2blackmensural");
+ draw_mensural_longa (staff_space#, false, false);
+fet_endchar;
+
+
+fet_beginchar ("Black mensural brevis notehead", "sM1blackmensural");
+ draw_mensural_brevis (staff_space#, false, false);
+fet_endchar;
+
+
+fet_beginchar ("Semi-colored mensural maxima notehead", "sM3semimensural");
+ draw_mensural_longa (2.0 staff_space#, true, false);
+fet_endchar;
+
+
+fet_beginchar ("Semi-colored mensural maxima notehead in ligaturae", "sM3semiligmensural");
+ draw_mensural_brevis (2.0 staff_space#, true, false);
+fet_endchar;
+
+
+fet_beginchar ("Semi-colored mensural longa notehead", "sM2semimensural");
+ draw_mensural_longa (staff_space#, true, false);
+fet_endchar;
+
+
+fet_beginchar ("Semi-colored mensural brevis notehead", "sM1semimensural");
+ draw_mensural_brevis (staff_space#, true, false);
fet_endchar;
fet_endchar;
+fet_beginchar ("Black mensural semibrevis head", "s0blackmensural");
+ draw_diamond_head (staff_space#, 0.15, 0.30, 30, false);
+fet_endchar;
+
+
fet_beginchar ("Petrucci semibrevis head", "s0petrucci");
% draw_diamond_head (1.8 staff_space#, 0.15, 0.40, 30, true);
draw_neomensural_open_head (staff_space#, 1.8 staff_space#);
fet_endchar;
+fet_beginchar ("Petrucci colored semibrevis head", "s0blackpetrucci");
+% draw_diamond_head (1.8 staff_space#, 0.15, 0.40, 30, true);
+ draw_neomensural_black_head (staff_space#, 1.8 staff_space#);
+fet_endchar;
+
+
+fet_beginchar ("Petrucci colored minima head", "s1blackpetrucci");
+% draw_diamond_head (1.8 staff_space#, 0.15, 0.40, 30, true);
+ draw_neomensural_black_head (staff_space#, 1.8 staff_space#);
+fet_endchar;
+
+
+fet_beginchar ("Petrucci colored semiminima head", "s2blackpetrucci");
+% draw_diamond_head (1.8 staff_space#, 0.15, 0.40, 30, true);
+ draw_neomensural_black_head (staff_space#, 1.8 staff_space#);
+fet_endchar;
+
+
%%%%%%%%
%
%
#if 0
int x = 0;
int *track = &x;
-#define debug_print(f, args...) fprintf (stderr, "%s:%d: track: %p :" f, __FUNCTION__, __LINE__, *track, ##args)
+#define urg_debug_print(f, args...) fprintf (stderr, "%s:%d: track: %p: " f, __FUNCTION__, __LINE__, *track, ##args)
+#define debug_print(f, args...) fprintf (stderr, f, ##args)
#else
#define debug_print(f, args...)
#endif
sum = (sum << 8) + (unsigned char) (*str)[i];
*str += length;
- debug_print ("%d:\n", sum);
+ debug_print ("%ld:\n", sum);
return sum;
}
if (!(x & 0x80))
break;
}
- debug_print ("%d:\n", sum);
+ debug_print ("%ld:\n", sum);
return sum;
}
}
static PyObject *
-midi_parse_track (unsigned char **track, unsigned char *track_end)
+midi_parse_track (unsigned char **track, unsigned char *track_end, int clocks_max)
{
unsigned int time = 0;
unsigned long track_len, track_size;
track_len = get_number (track, *track + 4, 4);
- debug_print ("track_len: %u\n", track_len);
- debug_print ("track_size: %u\n", track_size);
+ debug_print ("track_len: %lu\n", track_len);
+ debug_print ("track_size: %lu\n", track_size);
debug_print ("track begin: %p\n", track);
debug_print ("track end: %p\n", track + track_len);
time += dt;
if (dt)
pytime = PyInt_FromLong (time);
-
+ if (clocks_max && time > clocks_max)
+ break;
pyev = read_event (track, track_end, pytime,
&running_status);
if (pyev)
{
unsigned char *track, *track_end;
unsigned long track_size;
+ int clocks_max;
debug_print ("%s", "\n");
- if (!PyArg_ParseTuple (args, "s#", &track, &track_size))
+ if (!PyArg_ParseTuple (args, "s#|i", &track, &track_size, &clocks_max))
return 0;
+ debug_print ("clocks_max: %d\n", clocks_max);
if (track_size < 0)
return midi_error (__FUNCTION__, ": negative track size: ", compat_itoa (track_size));
track_end = track + track_size;
- return midi_parse_track (&track, track_end);
+ return midi_parse_track (&track, track_end, clocks_max);
}
static PyObject *
-midi_parse (unsigned char **midi,unsigned char *midi_end)
+midi_parse (unsigned char **midi,unsigned char *midi_end, int clocks_max)
{
PyObject *pymidi = 0;
unsigned long header_len;
format = get_number (midi, *midi + 2, 2);
tracks = get_number (midi, *midi + 2, 2);
- if (tracks > 32)
+ if (tracks > 256)
return midi_error (__FUNCTION__, ": too many tracks: ", compat_itoa (tracks));
division = get_number (midi, *midi + 2, 2) * 4;
/* Tracks */
for (i = 0; i < tracks; i++)
- PyList_Append (pymidi, midi_parse_track (midi, midi_end));
+ PyList_Append (pymidi, midi_parse_track (midi, midi_end, clocks_max));
pymidi = Py_BuildValue ("(OO)", Py_BuildValue ("(ii)", format, division),
pymidi);
{
unsigned char *midi, *midi_end;
unsigned long midi_size;
+ int clocks_max;
debug_print ("%s", "\n");
- if (!PyArg_ParseTuple (args, "s#", &midi, &midi_size))
+ if (!PyArg_ParseTuple (args, "s#|i", &midi, &midi_size, &clocks_max))
return 0;
+ debug_print ("clocks_max: %d\n", clocks_max);
if (memcmp (midi, "MThd", 4))
{
midi_end = midi + midi_size;
- return midi_parse (&midi, midi_end);
+ return midi_parse (&midi, midi_end, clocks_max);
}
-
static PyMethodDef MidiMethods[] =
{
- {"parse", pymidi_parse, 1},
- {"parse_track", pymidi_parse_track, 1},
+ {"parse", pymidi_parse, METH_VARARGS},
+ {"parse_track", pymidi_parse_track, METH_VARARGS},
{0, 0} /* Sentinel */
};
(scm paper-system)
(ice-9 optargs))
-(define-public (ly:system command . rest)
- (let* ((status 0)
- (dev-null "/dev/null")
- (silenced (if (or (ly:get-option 'verbose)
- (not (access? dev-null W_OK)))
- command
- (format #f "~a > ~a 2>&1 " command dev-null))))
- (if (ly:get-option 'verbose)
- (begin
- (ly:message (_ "Invoking `~a'...") command))
- (ly:progress "\n"))
-
- (set! status
- (if (pair? rest)
- (system-with-env silenced (car rest))
- (system silenced)))
-
+(define-public (ly:system command)
+ (if (ly:get-option 'verbose)
+ (begin
+ (ly:message (_ "Invoking `~a'...") (string-join command)))
+ (ly:progress "\n"))
+ (let ((status (apply ly:spawn command)))
(if (> status 0)
(begin
(ly:message (_ "`~a' failed (~a)") command status)
;; hmmm. what's the best failure option?
(throw 'ly-file-failed)))))
-(define-public (system-with-env cmd env)
-
- "Execute CMD in fork, with ENV (a list of strings) as the environment"
- (let*
- ;; laziness: should use execle?
-
- ((pid (primitive-fork)))
- (if (= 0 pid)
- ;; child
- (begin
- (environ env)
- (system cmd))
-
- ;; parent
- (cdr (waitpid pid)))))
-
(define-public (sanitize-command-option str)
- "Kill dubious shell quoting"
+ "Kill dubious shell quoting."
(string-append
"\""
(dir-basename name ".ps" ".eps")
".pdf"))
(is-eps (string-match "\\.eps$" name))
- (paper-size-string (if is-eps
- "-dEPSCrop"
- (ly:format "-dDEVICEWIDTHPOINTS=~$\
- -dDEVICEHEIGHTPOINTS=~$"
- paper-width paper-height)))
-
- (cmd (ly:format
- "~a\
- ~a\
- ~a\
- ~a\
- -dCompatibilityLevel=1.4\
- -dNOPAUSE\
- -dBATCH\
- -r1200\
- -sDEVICE=pdfwrite\
- -sOutputFile=~S\
- -c .setpdfwrite\
- -f ~S\
-"
- (search-gs)
- (if (ly:get-option 'verbose) "" "-q")
- (if (or (ly:get-option 'gs-load-fonts)
- (ly:get-option 'gs-load-lily-fonts))
- "-dNOSAFER"
- "-dSAFER")
- paper-size-string
- pdf-name
- name)))
- ;; The wrapper on windows cannot handle `=' signs,
- ;; gs has a workaround with #.
- (if (eq? PLATFORM 'windows)
- (begin
- (set! cmd (string-regexp-substitute "=" "#" cmd))
- (set! cmd (string-regexp-substitute "-dSAFER " "" cmd))))
+ (*unspecified* (if #f #f))
+ (cmd
+ (remove (lambda (x) (eq? x *unspecified*))
+ (list
+ (search-gs)
+ (if (ly:get-option 'verbose) *unspecified* "-q")
+ (if (or (ly:get-option 'gs-load-fonts)
+ (ly:get-option 'gs-load-lily-fonts)
+ (eq? PLATFORM 'windows))
+ "-dNOSAFER"
+ "-dSAFER")
+
+ (if is-eps
+ "-dEPSCrop"
+ (ly:format "-dDEVICEWIDTHPOINTS=~$" paper-width))
+ (if is-eps
+ *unspecified*
+ (ly:format "-dDEVICEHEIGHTPOINTS=~$" paper-height))
+ "-dCompatibilityLevel=1.4"
+ "-dNOPAUSE"
+ "-dBATCH"
+ "-r1200"
+ "-sDEVICE=pdfwrite"
+ (string-append "-sOutputFile=" pdf-name)
+ "-c.setpdfwrite"
+ (string-append "-f" name)))))
(ly:message (_ "Converting to `~a'...") pdf-name)
(ly:progress "\n")
(filter (lambda (x) (not (pred? x))) lst))
(define-public (font-name-split font-name)
- "Return (FONT-NAME . DESIGN-SIZE) from FONT-NAME string or #f."
+ "Return @code{(FONT-NAME . DESIGN-SIZE)} from @var{font-name} string
+or @code{#f}."
(let ((match (regexp-exec (make-regexp "(.*)-([0-9]*)") font-name)))
(if (regexp-match? match)
(cons (match:substring match 1) (match:substring match 2))
;; Example of a pango-physical-font
;; ("Emmentaler-11" "/home/janneke/vc/lilypond/out/share/lilypond/current/fonts/otf/emmentaler-11.otf" 0)
(define-public (pango-pf-font-name pango-pf)
- "Return the font-name of the pango physical font PANGO-PF."
+ "Return the font-name of the pango physical font @var{pango-pf}."
(list-ref pango-pf 0))
(define-public (pango-pf-file-name pango-pf)
- "Return the file-name of the pango physical font PANGO-PF."
+ "Return the file-name of the pango physical font @var{pango-pf}."
(list-ref pango-pf 1))
(define-public (pango-pf-fontindex pango-pf)
- "Return the fontindex of the pango physical font PANGO-PF."
+ "Return the fontindex of the pango physical font @var{pango-pf}."
(list-ref pango-pf 2))
(define (pango-font-name pango-font)
"")))
(define-public (define-fonts paper define-font define-pango-pf)
- "Return a string of all fonts used in PAPER, invoking the functions
-DEFINE-FONT DEFINE-PANGO-PF for producing the actual font definition."
+ "Return a string of all fonts used in @var{paper}, invoking the functions
+@var{define-font} and @var{define-pango-pf} for producing the actual font
+definition."
(let* ((font-list (ly:paper-fonts paper))
(pango-fonts (filter ly:pango-font? font-list))
;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
(define-public (construct-chord-elements root duration modifications)
- " Build a chord on root using modifiers in MODIFICATIONS. NoteEvents
-have duration DURATION.
+ "Build a chord on root using modifiers in @var{modifications}.
+@code{NoteEvents} have duration @var{duration}.
-Notes: natural 11 is left from chord if not explicitly specified.
+Notes: Natural 11 is left from chord if not explicitly specified.
-Entry point for the parser.
-"
+Entry point for the parser."
(let* ((flat-mods (flatten-list modifications))
(base-chord (stack-thirds (ly:make-pitch 0 4 0) the-canonical-chord))
(complete-chord '())
(start-additions #t))
(define (interpret-inversion chord mods)
- "Read /FOO part. Side effect: INVERSION is set."
+ "Read /FOO part. Side effect: INVERSION is set."
(if (and (> (length mods) 1) (eq? (car mods) 'chord-slash))
(begin
(set! inversion (cadr mods))
(interpret-bass chord mods))
(define (interpret-bass chord mods)
- "Read /+FOO part. Side effect: BASS is set."
+ "Read /+FOO part. Side effect: BASS is set."
(if (and (> (length mods) 1) (eq? (car mods) 'chord-bass))
(begin
(set! bass (cadr mods))
(interpret-inversion chord mods)))
(define (interpret-additions chord mods)
- "Interpret additions. TODO: should restrict modifier use?"
+ "Interpret additions. TODO: should restrict modifier use?"
(cond ((null? mods) chord)
((ly:pitch? (car mods))
(if (= (pitch-step (car mods)) 11)
'(1 3 5 7 9 11 13)))
(define (stack-thirds upper-step base)
- "Stack thirds listed in BASE until we reach UPPER-STEP. Add
+ "Stack thirds listed in BASE until we reach UPPER-STEP. Add
UPPER-STEP separately."
(cond ((null? base) '())
((> (ly:pitch-steps upper-step) (ly:pitch-steps (car base)))
(define-public (ugh-compat-double-plus-new-chord->markup
style pitches bass inversion context options)
- "Entry point for New_chord_name_engraver.
+ "Entry point for @code{New_chord_name_engraver}.
FIXME: func, options/context have changed
- See
-double-plus-new-chord-name.scm for the signature of STYLE. PITCHES,
-BASS and INVERSION are lily pitches. OPTIONS is an alist-alist (see
-input/test/dpncnt.ly).
- "
+
+See @file{double-plus-new-chord-name.scm} for the signature of @var{style}.
+@var{pitches}, @var{bass}, and @var{inversion} are lily pitches.
+@var{options} is an alist-alist (see @file{input/test/dpncnt.ly})."
(define (step-nr pitch)
(let* ((pitch-nr (+ (* 7 (ly:pitch-octave pitch))
;; todo: naming is confusing: steps (0 based) vs. steps (1 based).
(define (pitch-step p)
- "Musicological notation for an interval. Eg. C to D is 2."
+ "Musicological notation for an interval. Eg. C to D is 2."
(+ 1 (ly:pitch-steps p)))
(define (get-step x ps)
bass-pitch
lowercase-root?)
- "Format for the given (lists of) pitches. This is actually more
+ "Format for the given (lists of) pitches. This is actually more
work than classifying the pitches."
(define (filter-main-name p)
))))
(define-public (note-name->markup pitch lowercase?)
- "Return pitch markup for PITCH."
+ "Return pitch markup for @var{pitch}."
(make-line-markup
(list
(make-simple-markup
(list-ref '("eses" "es" "" "is" "isis") (+ 2 (cdr n-a)))))))))
(define-public ((chord-name->italian-markup re-with-eacute) pitch lowercase?)
- "Return pitch markup for PITCH, using italian/french note names.
- If re-with-eacute is set to #t, french 'ré' is returned for D instead of 're'
-"
+ "Return pitch markup for @var{pitch}, using italian/french note names.
+If @var{re-with-eacute} is set to @code{#t}, french `ré' is returned for
+pitch@tie{}D instead of `re'."
+
(let* ((name (ly:pitch-notename pitch))
(alt (ly:pitch-alteration pitch)))
(make-line-markup
;; but let's leave that for future extensions.
;;
(define-public (system-clipped-x-extent system-grob clip-region)
- "Return the X-extent of the SYSTEM-GROB when clipped with
-CLIP-REGION. Return #f if not appropriate."
+ "Return the X-extent of @var{system-grob} when clipped with
+@var{clip-region}. Return @code{#f} if not appropriate."
(let*
((region-start (car clip-region))
@item symbol
The symbol is the name of the context in which the following rules are to be
-applied. For example, if @var{context} is @rinternals{Score} then all
+applied. For example, if @var{context} is @rinternals{Score} then all
staves share accidentals, and if @var{context} is @rinternals{Staff} then
all voices in the same staff share accidentals, but staves do not.
@end table
-The procedure returns a pair of booleans. The first states whether an extra
-natural should be added. The second states whether an accidental should be
-printed. @code{(#t . #f)} does not make sense.
+The procedure returns a pair of booleans. The first states whether an extra
+natural should be added. The second states whether an accidental should be
+printed. @code{(#t . #f)} does not make sense.
@end table")
(autoBeamCheck ,procedure? "A procedure taking three
symbol)
;; put this in an alist?
-(define-public
- all-user-grob-properties
-
+(define-public all-user-grob-properties
(map
(lambda (x)
(apply define-grob-property x))
(flexa-height ,ly:dimension? "The height of a flexa shape in a ligature
grob (in @code{staff-space} units).")
+ (flexa-interval ,integer? "The interval spanned by the two notes of a
+flexa shape (1 is a second, 7 is an octave).")
(flexa-width ,ly:dimension? "The width of a flexa shape in a
ligature grob in (in @code{staff-space} units).")
+ (ligature-flexa ,boolean? "request joining note to the previous one
+in a flexa.")
(inclinatum ,boolean? "Is this neume an inclinatum?")
- (join-right-amount ,number? "A length used for calculating the
-Y-extent of mensural ligatures.")
(linea ,boolean? "Attach vertical lines to this neume?")
(MensuralLigature
. (
- (flexa-width . 2.0)
(stencil . ,ly:mensural-ligature::print)
(thickness . 1.4)
(meta . ((class . Spanner)
(NoteHead
. (
+ (flexa-width . 2.0)
(duration-log . ,note-head::calc-duration-log)
(extra-spacing-height . ,ly:note-head::include-ledger-line-height)
(glyph-name . ,note-head::calc-glyph-name)
+ (ligature-flexa . #f)
(stem-attachment . ,ly:note-head::calc-stem-attachment)
(stencil . ,ly:note-head::print)
(X-offset . ,ly:note-head::stem-x-shift)
;;;
(define-public (markup->lily-string markup-expr)
- "Return a string describing, in LilyPond syntax, the given markup expression."
+ "Return a string describing, in LilyPond syntax, the given markup
+expression."
(define (proc->command proc)
(let ((cmd-markup (symbol->string (procedure-name proc))))
(substring cmd-markup 0 (- (string-length cmd-markup)
;;; \clef
(define clef-name-alist #f)
(define-public (memoize-clef-names clefs)
- "Initialize `clef-name-alist', if not already set."
+ "Initialize @code{clef-name-alist}, if not already set."
(if (not clef-name-alist)
(set! clef-name-alist
(map (lambda (name+vals)
clefs))))
(define-extra-display-method ContextSpeccedMusic (expr parser)
- "If `expr' is a clef change, return \"\\clef ...\"
-Otherwise, return #f."
+ "If @var{expr} is a clef change, return \"\\clef ...\".
+Otherwise, return @code{#f}."
(with-music-match (expr (music 'ContextSpeccedMusic
context-type 'Staff
element (music 'SequentialMusic
(ly:message (_ "Using `~a' note names...") str))
(set! pitchnames alist)
(ly:parser-set-note-names parser alist))
- (ly:warning (_ "Could not find language `~a'. Ignoring.") str))))
+ (ly:warning (_ "Could not find language `~a'. Ignoring.") str))))
(define-public (ly:all-stencil-commands)
"Return the list of stencil commands that can be
-defined in the output modules (output-*.scm)"
+defined in the output modules (@file{output-*.scm})."
'(beam
bezier-sandwich
blank
(define-public (ly:all-output-backend-commands)
"Return the list of extra output backend commands that
-are used internally in lily/stencil-interpret.cc."
+are used internally in @file{lily/stencil-interpret.cc}."
'(color
combine-stencil
delay-stencil-evaluation
;; Utility functions
(define-public (symbol-concatenate . names)
- "Like string-concatenate, but for symbols"
+ "Like @code{string-concatenate}, but for symbols."
(string->symbol (apply string-append (map symbol->string names))))
(define-public (function-chain arg function-list)
- "Applies a list of functions in function list to arg.
- Each element of function list is structured (cons function '(arg2 arg3 ...))
- If function takes arguments besides arg, they are provided in function list.
- For example:
- @code{guile> (function-chain 1 `((,+ 1) (,- 2) (,+ 3) (,/)))}
- @code{1/3}"
+ "Applies a list of functions in @var{function-list} to @var{arg}.
+Each element of @var{function-list} is structured @code{(cons function
+'(arg2 arg3 ...))}. If function takes arguments besides @var{arg}, they
+are provided in @var{function-list}.
+
+Example: Executing @samp{(function-chain 1 `((,+ 1) (,- 2) (,+ 3) (,/)))}
+returns @samp{1/3}."
(if (null? function-list)
arg
(function-chain
(define-macro (define-display-method music-type vars . body)
"Define a display method for a music type and store it in the
`display-methods' property of the music type entry found in the
-`music-name-to-property-table' hash table. Print methods previously
+`music-name-to-property-table' hash table. Print methods previously
defined for that music type are lost.
Syntax: (define-display-method MusicType (expression parser)
...body...))"
method))
(define-macro (define-extra-display-method music-type vars . body)
- "Add a display method for a music type. A primary display method
+ "Add a display method for a music type. A primary display method
is supposed to have been previously defined with `define-display-method'.
-This new method should return a string or #f. If #f is returned, the next
+This new method should return a string or #f. If #f is returned, the next
display method will be called."
`(let* ((type-props (hashq-ref music-name-to-property-table
',music-type '()))
(ly:music-property expr 'tags))))
(define-public (music->lily-string expr parser)
- "Print expr, a music expression, in LilyPond syntax"
+ "Print @var{expr}, a music expression, in LilyPond syntax."
(if (ly:music? expr)
(let* ((music-type (ly:music-property expr 'name))
(procs (assoc-ref (hashq-ref music-name-to-property-table
elements-list))))
(define-macro (with-music-match music-expr+pattern . body)
- "If `music-expr' matches `pattern', call `body'. `pattern' should look like:
+ "If `music-expr' matches `pattern', call `body'. `pattern' should look like:
'(music <MusicType>
property value
property ?var1
keyword), then all music expression found in its properties (such as 'element
or 'elements).
When ?var is found instead of a property value, ?var is bound that property value,
-as read inside `music-expr'. ?var may also be used to refere to a whole music
-expression inside an elements list for instance. These bindings are accessible
+as read inside `music-expr'. ?var may also be used to refere to a whole music
+expression inside an elements list for instance. These bindings are accessible
inside body."
(let ((music-expr (first music-expr+pattern))
(pattern (second music-expr+pattern))
instrument, invoke @code{(print-keys-verbose 'instrument)}.
Lastly, substituting an empty list for the pressed-key alist will result in
-a diagram with all of the keys drawn but none filled. ie...
+a diagram with all of the keys drawn but none filled, for example:
@example
\\markup \\woodwind-diagram #'oboe #'()
name)
(define (ref-ify x)
- "Return @ref{X}. If mapping ref-ify to a list that needs to be sorted,
+ "Return @ref{X}. If mapping ref-ify to a list that needs to be sorted,
sort the list first."
(string-append "@ref{" x "}"))
(define-public (decode-byte-string str)
"Return vector of glyphname symbols that correspond to string,
-assuming that STR is byte-coded using ENCODING-NAME."
+assuming that @var{str} is byte-coded using latin-1 encoding."
(let* ((len (string-length str))
(output-vector (make-vector len '.notdef)))
(define-public (no-flag stem-grob)
- "No flag: Simply return empty stencil"
+ "No flag: Simply return empty stencil."
empty-stencil)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-(define-public (add-stroke-straight stencil stem-grob dir log stroke-style offset length thickness stroke-thickness)
+(define-public (add-stroke-straight stencil stem-grob dir log stroke-style
+ offset length thickness stroke-thickness)
"Add the stroke for acciaccatura to the given flag stencil.
- The stroke starts for up-flags at upper-end-of-flag+(0,length/2) and
- ends at (0, vertical-center-of-flag-end) - (flag-x-width/2, flag-x-width + flag-thickness).
- Here length is the whole length, while flag-x-width is just the
- x-extent and thus depends on the angle! Other combinations don't look as
- good... For down-stems the y-coordinates are simply mirrored."
+The stroke starts for up-flags at `upper-end-of-flag + (0,length/2)'
+and ends at `(0, vertical-center-of-flag-end) -
+(flag-x-width/2, flag-x-width + flag-thickness)'. Here `length' is the
+whole length, while `flag-x-width' is just the x-extent and thus depends on
+the angle! Other combinations don't look as good.
+
+For down-stems the y-coordinates are simply mirrored."
(let* ((start (offset-add offset (cons 0 (* (/ length 2) dir))))
(end (offset-add (cons 0 (cdr offset))
(cons (- (/ (car offset) 2)) (* (- (+ thickness (car offset))) dir))))
flag-stencil))
(define-public (straight-flag flag-thickness flag-spacing
- upflag-angle upflag-length
- downflag-angle downflag-length)
- "Create a stencil for a straight flag.
- flag-thickness, -spacing are given in staff spaces,
- *flag-angle is given in degree, *flag-length is given in staff spaces.
- All lengths will be scaled according to the font size of the note."
+ upflag-angle upflag-length
+ downflag-angle downflag-length)
+ "Create a stencil for a straight flag. @var{flag-thickness} and
+@var{flag-spacing} are given in staff spaces, @var{upflag-angle} and
+@var{downflag-angle} are given in degrees, and @var{upflag-length} and
+@var{downflag-length} are given in staff spaces.
+
+All lengths are scaled according to the font size of the note."
+
(lambda (stem-grob)
(let* ((log (ly:grob-property stem-grob 'duration-log))
(dir (ly:grob-property stem-grob 'direction))
(define-public (modern-straight-flag stem-grob)
"Modern straight flag style (for composers like Stockhausen, Boulez, etc.).
- The angles are 18 and 22 degrees and thus smaller than for the ancient style
- of Bach etc."
+The angles are 18 and 22 degrees and thus smaller than for the ancient style
+of Bach, etc."
((straight-flag 0.55 1 -18 1.1 22 1.2) stem-grob))
(define-public (old-straight-flag stem-grob)
- "Old straight flag style (for composers like Bach). The angles of the flags
- are both 45 degrees."
+ "Old straight flag style (for composers like Bach). The angles of the
+flags are both 45 degrees."
((straight-flag 0.55 1 -45 1.2 45 1.4) stem-grob))
(define-public (add-stroke-glyph stencil stem-grob dir stroke-style flag-style)
"Load and add a stroke (represented by a glyph in the font) to the given
- flag stencil"
+flag stencil."
(if (not (string? stroke-style))
stencil
; Otherwise: look up the stroke glyph and combine it with the flag
(define-public (retrieve-glyph-flag flag-style dir dir-modifier stem-grob)
- "Load the correct flag glyph from the font"
+ "Load the correct flag glyph from the font."
(let* ((log (ly:grob-property stem-grob 'duration-log))
(font (ly:grob-default-font stem-grob))
(font-char (string-append "flags." flag-style dir dir-modifier (number->string log)))
(define-public (create-glyph-flag flag-style dir-modifier stem-grob)
- "Create a flag stencil by looking up the glyph from the font"
+ "Create a flag stencil by looking up the glyph from the font."
(let* ((dir (if (eqv? (ly:grob-property stem-grob 'direction) UP) "u" "d"))
(flag (retrieve-glyph-flag flag-style dir dir-modifier stem-grob))
(stroke-style (ly:grob-property stem-grob 'stroke-style)))
(define-public (mensural-flag stem-grob)
"Mensural flags: Create the flag stencil by loading the glyph from the font.
- Flags are always aligned with staff lines, so we need to check the end point
- of the stem: For stems ending on staff lines, use different flags than for
- notes between staff lines. The idea is that flags are always vertically
- aligned with the staff lines, regardless of whether the note head is on a
- staff line or between two staff lines. In other words, the inner end of
- a flag always touches a staff line."
+Flags are always aligned with staff lines, so we need to check the end point
+of the stem: For stems ending on staff lines, use different flags than for
+notes between staff lines. The idea is that flags are always vertically
+aligned with the staff lines, regardless of whether the note head is on a
+staff line or between two staff lines. In other words, the inner end of
+a flag always touches a staff line."
(let* ((adjust #t)
(stem-end (inexact->exact (round (ly:grob-property stem-grob 'stem-end-position))))
(define-public ((glyph-flag flag-style) stem-grob)
- "Simulates the default way of generating flags: look up glyphs
- flags.style[ud][1234] from the feta font and use it for the flag stencil."
+ "Simulatesthe default way of generating flags: Look up glyphs
+@code{flags.style[ud][1234]} from the feta font and use it for the flag
+stencil."
(create-glyph-flag flag-style "" stem-grob))
(define-public (normal-flag stem-grob)
- "Create a default flag"
+ "Create a default flag."
(create-glyph-flag "" "" stem-grob))
(define-public (default-flag stem-grob)
- "Create a flag stencil for the stem. Its style will be derived from the
- @code{'flag-style} Stem property. By default, @code{lilypond} uses a
- C++ Function (which is slightly faster) to do exactly the same as this
- function. However, if one wants to modify the default flags, this function
- can be used to obtain the default flag stencil, which can then be modified
- at will. The correct way to do this is:
+ "Create a flag stencil for the stem. Its style will be derived from the
+@code{'flag-style} Stem property. By default, @code{lilypond} uses a
+C++ Function (which is slightly faster) to do exactly the same as this
+function. However, if one wants to modify the default flags, this function
+can be used to obtain the default flag stencil, which can then be modified
+at will. The correct way to do this is:
+
@example
\\override Stem #'flag = #default-flag
\\override Stem #'flag-style = #'mensural
"Set up music fonts.
Arguments:
- NODE the font tree to modify.
- NAME is the basename for the music font. NAME-DESIGNSIZE.otf should be the music font,
- NAME-brace.otf should have piano braces.
- DESIGN-SIZE-ALIST is a list of (ROUNDED . DESIGN-SIZE). ROUNDED is
- a suffix for font filenames, while DESIGN-SIZE should be the actual
- design size. The latter is used for text fonts loaded through
- pango/fontconfig
- FACTOR is a size factor relative to the default size that is being used.
- This is used to select the proper design size for the text fonts.
-"
+@itemize
+@item
+@var{node} is the font tree to modify.
+
+@item
+@var{name} is the basename for the music font.
+@file{@var{name}-<designsize>.otf} should be the music font,
+@file{@var{name}-brace.otf} should have piano braces.
+
+@item
+@var{family} is the family name of the music font.
+
+@item
+@var{design-size-alist} is a list of @code{(rounded . designsize)}.
+@code{rounded} is a suffix for font filenames, while @code{designsize}
+should be the actual design size. The latter is used for text fonts
+loaded through pango/fontconfig.
+
+@item
+@var{factor} is a size factor relative to the default size that is being
+used. This is used to select the proper design size for the text fonts.
+@end itemize"
(for-each
(lambda (x)
(add-font node
(let* ((dir-name (tmpnam))
(files '())
(status 0)
- (embed #f))
+ (embed #f)
+ (cwd (getcwd)))
(mkdir dir-name #o700)
- (set! status (ly:system
- (format "cd ~a && fondu -force '~a'" dir-name filename)))
+ (chdir dir-name)
+ (set! status (ly:system (list "fondu" "-force" file-name)))
+ (chdir cwd)
(set! files (dir-listing dir-name))
(for-each
(lambda (f)
(define-public (dump-stencil-as-EPS-with-bbox paper dump-me filename
load-fonts
bbox)
- "Create an EPS file from stencil DUMP-ME to FILENAME. BBOX has
-format (left-x, lower-y, right x, up-y). If LOAD-FONTS set, include
-fonts inline."
+ "Create an EPS file from stencil @var{dump-me} to @var{filename}.
+@var{bbox} has format @code{(left-x, lower-y, right-x, upper-y)}. If
+@var{load-fonts} set, include fonts inline."
(define (to-rounded-bp-box box)
"Convert box to 1/72 inch with rounding to enlarge the box."
(let* ((scale (ly:output-def-lookup paper 'output-scale))
(define (merge-details key alist-list . default)
"Return @code{alist-list} entries for @code{key}, in one combined alist.
-There can be two @code{alist-list} entries for a given key. The first
+There can be two @code{alist-list} entries for a given key. The first
comes from the override-markup function, the second comes
from property settings during a regular override.
This is necessary because some details can be set in one
"Draw the string lines for a fret diagram with
@var{string-count} strings and frets as indicated in @var{fret-range}.
Line thickness is given by @var{th}, fret & string spacing by
-@var{size}. Orientation is determined by @var{orientation}. "
+@var{size}. Orientation is determined by @var{orientation}."
(define (helper x)
(if (null? (cdr x))
"Draw the fret lines for a fret diagram with
@var{string-count} strings and frets as indicated in @var{fret-range}.
Line thickness is given by @var{th}, fret & string spacing by
-@var{size}. Orientation is given by @var{orientation}."
+@var{size}. Orientation is given by @var{orientation}."
(define (helper x)
(if (null? (cdr x))
(fret-stencil (car x))
@end table
The function also checks if the string has the typical form of three
-pedals, then the divider and then the remaining four pedals. If not it
-prints out a warning. However, in any case, it will also print each symbol
-in the order as given. This means you can place the divider (even multiple
+pedals, then the divider and then the remaining four pedals. If not it
+prints out a warning. However, in any case, it will also print each symbol
+in the order as given. This means you can place the divider (even multiple
dividers) anywhere you want, but you'll have to live with the warnings.
The appearance of the diagram can be tweaked inter alia using the size property
of the TextScript grob (@code{\\override Voice.TextScript #'size = #0.3}) for
the overall, the thickness property
(@code{\\override Voice.TextScript #'thickness = #3}) for the line thickness of
-the horizontal line and the divider. The remaining configuration (box sizes,
+the horizontal line and the divider. The remaining configuration (box sizes,
offsets and spaces) is done by the harp-pedal-details list of properties
(@code{\\override Voice.TextScript #'harp-pedal-details #'box-width = #1}).
It contains the following settings: @code{box-offset} (vertical shift of the
(if (null? (cdr info))
(ly:warning "Harp pedal diagram does not contain a divider (usually after third pedal).")
(if (not (equal? (cdr info) '(3)))
- (ly:warning "Harp pedal diagram contains dividers at positions ~a. Normally, there is only one divider after the third pedal." (cdr info))))))
+ (ly:warning "Harp pedal diagram contains dividers at positions ~a. Normally, there is only one divider after the third pedal." (cdr info))))))
;; parser <-> output hooks.
(define-public (collect-bookpart-for-book parser book-part)
- "Toplevel book-part handler"
+ "Toplevel book-part handler."
(define (add-bookpart book-part)
(ly:parser-define!
parser 'toplevel-bookparts
(score-handler (scorify-music music parser)))))
(define-public (collect-music-for-book parser music)
- "Top-level music handler"
+ "Top-level music handler."
(collect-music-aux (lambda (score)
(collect-scores-for-book parser score))
parser
music))
(define-public (collect-book-music-for-book parser book music)
- "Book music handler"
+ "Book music handler."
(collect-music-aux (lambda (score)
(ly:book-add-score! book score))
parser
music))
(define-public (scorify-music music parser)
- "Preprocess MUSIC."
+ "Preprocess @var{music}."
(for-each (lambda (func)
(set! music (func music parser)))
(map-alist-vals func (cdr list)))))
(define (map-alist-keys func list)
- "map FUNC over the keys of an alist LIST, leaving the vals. "
+ "map FUNC over the keys of an alist LIST, leaving the vals."
(if (null? list)
'()
(cons (cons (func (caar list)) (cdar list))
(map-alist-keys func (cdr list)))))
(define-public (first-member members lst)
- "Return first successful MEMBER of member from MEMBERS in LST."
+ "Return first successful member (of member) from @var{members} in
+@var{lst}."
(if (null? members)
#f
(let ((m (member (car members) lst)))
(if m m (first-member (cdr members) lst)))))
(define-public (first-assoc keys lst)
- "Return first successful ASSOC of key from KEYS in LST."
+ "Return first successful assoc of key from @var{keys} in @var{lst}."
(if (null? keys)
#f
(let ((k (assoc (car keys) lst)))
(assoc-crawler key '() alist))
(define-public (map-selected-alist-keys function keys alist)
- "Returns alist with function applied to all of the values in list keys.
- For example:
- @code{guile> (map-selected-alist-keys - '(a b) '((a . 1) (b . -2) (c . 3) (d . 4)))}
- @code{((a . -1) (b . 2) (c . 3) (d . 4))}"
+ "Return @var{alist} with @var{function} applied to all of the values
+in list @var{keys}.
+
+For example:
+@example
+@code{guile> (map-selected-alist-keys - '(a b) '((a . 1) (b . -2) (c . 3) (d . 4)))}
+@code{((a . -1) (b . 2) (c . 3) (d . 4)}
+@end example"
(define (map-selected-alist-keys-helper function key alist)
(map
(lambda (pair)
(helper lst 0))
(define-public (count-list lst)
- "Given lst (E1 E2 .. ) return ((E1 . 1) (E2 . 2) ... ) "
+ "Given @var{lst} as @code{(E1 E2 .. )}, return
+@code{((E1 . 1) (E2 . 2) ... )}."
(define (helper l acc count)
(if (pair? l)
(reverse (helper lst '() 1)))
(define-public (list-join lst intermediate)
- "put INTERMEDIATE between all elts of LST."
+ "Put @var{intermediate} between all elts of @var{lst}."
(fold-right
(lambda (elem prev)
(lset-difference eq? a b))
(define-public (uniq-list lst)
- "Uniq LST, assuming that it is sorted. Uses equal? for comparisons."
+ "Uniq @var{lst}, assuming that it is sorted. Uses @code{equal?}
+for comparisons."
(reverse!
(fold (lambda (x acc)
(define (split-at-predicate pred lst)
"Split LST into two lists at the first element that returns #f for
- (PRED previous_element element). Return the two parts as a pair.
+ (PRED previous_element element). Return the two parts as a pair.
Example: (split-at-predicate < '(1 2 3 2 1)) ==> ((1 2 3) . (2 1))"
(if (null? lst)
(list lst)
(list lst)))))
(define-public (split-list-by-separator lst pred)
- "Split LST at each element that satisfies PRED, and return the parts
- (with the separators removed) as a list of lists. Example:
- (split-list-by-separator '(a 0 b c 1 d) number?) ==> ((a) (b c) (d))"
+ "Split @var{lst} at each element that satisfies @var{pred}, and return
+the parts (with the separators removed) as a list of lists. For example,
+executing @samp{(split-list-by-separator '(a 0 b c 1 d) number?)} returns
+@samp{((a) (b c) (d))}."
(let loop ((result '()) (lst lst))
(if (and lst (not (null? lst)))
(loop
(cons (- expr) expr))
(define-public (interval-length x)
- "Length of the number-pair X, when an interval"
+ "Length of the number-pair @var{x}, if an interval."
(max 0 (- (cdr x) (car x))))
(define-public (ordered-cons a b)
((if (= dir RIGHT) cdr car) interval))
(define-public (interval-index interval dir)
- "Interpolate INTERVAL between between left (DIR=-1) and right (DIR=+1)"
+ "Interpolate @var{interval} between between left (@var{dir}=-1) and
+right (@var{dir}=+1)."
(* (+ (interval-start interval) (interval-end interval)
(* dir (- (interval-end interval) (interval-start interval))))
0.5))
(define-public (interval-center x)
- "Center the number-pair X, when an interval"
+ "Center the number-pair @var{x}, if an interval."
(if (interval-empty? x)
0.0
(/ (+ (car x) (cdr x)) 2)))
(define-public THREE-PI-OVER-TWO (* 3 PI-OVER-TWO))
(define-public (cyclic-base-value value cycle)
- "Takes a value and modulo-maps it between 0 and base."
+ "Take @var{value} and modulo-maps it between 0 and base @var{cycle}."
(if (< value 0)
(cyclic-base-value (+ value cycle) cycle)
(if (>= value cycle)
value)))
(define-public (angle-0-2pi angle)
- "Takes an angle in radians and maps it between 0 and 2pi."
+ "Take @var{angle} (in radians) and maps it between 0 and 2pi."
(cyclic-base-value angle TWO-PI))
(define-public (angle-0-360 angle)
- "Takes an angle in radians and maps it between 0 and 2pi."
+ "Take @var{angle} (in degrees) and maps it between 0 and 360 degrees."
(cyclic-base-value angle 360.0))
(define-public PI-OVER-180 (/ PI 180))
(define-public (degrees->radians angle-degrees)
- "Convert the given angle from degrees to radians"
+ "Convert the given angle from degrees to radians."
(* angle-degrees PI-OVER-180))
(define-public (ellipse-radius x-radius y-radius angle)
(* (sin angle) (sin angle)))))))
(define-public (polar->rectangular radius angle-in-degrees)
- "Convert polar coordinate @code{radius} and @code{angle-in-degrees}
- to (x-length . y-length)"
+ "Return polar coordinates (@var{radius}, @var{angle-in-degrees})
+as rectangular coordinates @ode{(x-length . y-length)}."
+
(let ((complex (make-polar
radius
(degrees->radians angle-in-degrees))))
(ly:number->string (cdr c))))
(define-public (dir-basename file . rest)
- "Strip suffixes in REST, but leave directory component for FILE."
+ "Strip suffixes in @var{rest}, but leave directory component for
+@var{file}."
(define (inverse-basename x y) (basename y x))
(simple-format #f "~a/~a" (dirname file)
(fold inverse-basename file rest)))
(define-public (write-me message x)
- "Return X. Display MESSAGE and write X. Handy for debugging,
-possibly turned off."
+ "Return @var{x}. Display @var{message} and write @var{x}.
+Handy for debugging, possibly turned off."
(display message) (write x) (newline) x)
;; x)
(cons (f (car x)) (f (cdr x))))
(define-public (list-insert-separator lst between)
- "Create new list, inserting BETWEEN between elements of LIST"
+ "Create new list, inserting @var{between} between elements of @var{lst}."
(define (conc x y )
(if (eq? y #f)
(list x)
(define-public (binary-search start end getter target-val)
(_i "Find the index between @var{start} and @var{end} (an integer)
-which will produce the closest match to @var{target-val} when
+which produces the closest match to @var{target-val} if
applied to function @var{getter}.")
(if (<= end start)
start
(string<? (symbol->string (car lst)) (symbol->string (car r))))
(define-public (eval-carefully symbol module . default)
- "Check if all symbols in expr SYMBOL are reachable
- in module MODULE. In that case evaluate, otherwise
- print a warning and set an optional DEFAULT."
+ "Check whether all symbols in expr @var{symbol} are reachable
+in module @var{module}. In that case evaluate, otherwise
+print a warning and set an optional @var{default}."
(let* ((unavailable? (lambda (sym)
(not (module-defined? module sym))))
(sym-unavailable (if (pair? symbol)
(define (ly:alist<? a b)
"Return #t if the first key of alist A is less than the first key of
- alist B, using case-sensitive LilyPond sort order. Keys are assumed to
+ alist B, using case-sensitive LilyPond sort order. Keys are assumed to
be symbols."
(ly:string<? (symbol->string (car a))
(symbol->string (car b))))
(define (ly:alist-ci<? a b)
"Return #t if the first key of alist A is less than the first key of
- alist B, using case-insensitive LilyPond sort order. Keys are assumed
+ alist B, using case-insensitive LilyPond sort order. Keys are assumed
to be symbols."
(ly:string-ci<? (symbol->string (car a))
(symbol->string (car b))))
format)
(define-public (ergonomic-simple-format dest . rest)
- "Like ice-9 format, but without the memory consumption."
+ "Like ice-9's @code{format}, but without the memory consumption."
(if (string? dest)
(apply simple-format (cons #f (cons dest rest)))
(apply simple-format (cons dest rest))))
,(symbol->string make-markup-name) sig args)))))))
(define-public (make-markup markup-function make-name signature args)
- " Construct a markup object from MARKUP-FUNCTION and ARGS. Typecheck
-against SIGNATURE, reporting MAKE-NAME as the user-invoked function.
-"
+ "Construct a markup object from @var{markup-function} and @var{args}.
+Typecheck against @var{signature}, reporting @var{make-name} as the
+user-invoked function."
(let* ((arglen (length args))
(siglen (length signature))
(error-msg (if (and (> siglen 0) (> arglen 0))
;;;
(define-public (markup-command-signature-ref markup-command)
- "Return markup-command's signature (the 'markup-signature object property)"
+ "Return @var{markup-command}'s signature (the @code{'markup-signature}
+object property)."
(object-property markup-command 'markup-signature))
(define-public (markup-command-signature-set! markup-command signature)
- "Set markup-command's signature (as object property)"
+ "Set @var{markup-command}'s signature (as object property)."
(set-object-property! markup-command 'markup-signature signature)
signature)
;;;;;;;;;;;;;;;;;;;;;;
;;; used in parser.yy to map a list of markup commands on markup arguments
(define-public (map-markup-command-list commands markups)
- "`markups' being a list of markups, eg (markup1 markup2 markup3),
-and `commands' a list of commands with their scheme arguments, in reverse order,
-eg: ((italic) (raise 4) (bold)), maps the commands on each markup argument, eg:
- ((bold (raise 4 (italic markup1)))
- (bold (raise 4 (italic markup2)))
- (bold (raise 4 (italic markup3))))
-"
+ "@var{markups} being a list of markups, for example
+@code{(markup1 markup2 markup3)}, and @var{commands} a list of commands with
+their scheme arguments, in reverse order, for example
+@code{((italic) (raise 4) (bold))}, map the commands on each markup argument,
+for example
+@example
+((bold (raise 4 (italic markup1)))
+ (bold (raise 4 (italic markup2)))
+ (bold (raise 4 (italic markup3))))
+@end example"
(map-in-order (lambda (arg)
(let ((result arg))
(for-each (lambda (cmd)
(object-property x 'markup-list-command)))
(define-public (markup-command-list? x)
- "Determine if `x' is a markup command list, ie. a list composed of
-a markup list function and its arguments."
+ "Determine whether @var{x} is a markup command list, i.e. a list
+composed of a markup list function and its arguments."
(and (pair? x) (markup-list-function? (car x))))
(define-public (markup-list? arg)
- "Return a true value if `x' is a list of markups or markup command lists."
+ "Return @code{#t} if @var{x} is a list of markups or markup command lists."
(define (markup-list-inner? lst)
(or (null? lst)
(and (or (markup? (car lst)) (markup-command-list? (car lst)))
instrument-names-alist))
(define-public (percussion? instrument)
- "returns whether the instrument should use midi channel 9"
+ "Return @code{#t} if the instrument should use MIDI channel 9."
(let* ((inst (symbol->string instrument))
(entry (assoc-get inst instrument-names-alist)))
(and entry (>= entry 32768))))
(define-public (midi-program instrument)
- "returns the program of the instrument"
+ "Return the program of the instrument."
(let* ((inst (symbol->string instrument))
(entry (assoc-get inst instrument-names-alist)))
(define-public dynamic-default-volume 0.71)
(define-public (alterations-in-key pitch-list)
- "Count number of sharps minus number of flats"
+ "Count number of sharps minus number of flats."
(* (apply + (map cdr pitch-list)) 2))
(define-public (music-map function music)
"Apply @var{function} to @var{music} and all of the music it contains.
-First it recurses over the children, then the function is applied to MUSIC.
-"
+First it recurses over the children, then the function is applied to
+@var{music}."
(let ((es (ly:music-property music 'elements))
(e (ly:music-property music 'element)))
(set! (ly:music-property music 'elements)
(function music)))
(define-public (music-filter pred? music)
- "Filter out music expressions that do not satisfy PRED."
+ "Filter out music expressions that do not satisfy @var{pred?}."
(define (inner-music-filter pred? music)
"Recursive function."
(make-music 'Music))) ;must return music.
(define-public (display-music music)
- "Display music, not done with music-map for clarity of presentation."
+ "Display music, not done with @code{music-map} for clarity of
+presentation."
(display music)
(display ": { ")
`(markup ,@(inner-markup->make-markup markup-expression))))
(define-public (music->make-music obj)
- "Generate a expression that, once evaluated, may return an object equivalent to `obj',
-that is, for a music expression, a (make-music ...) form."
+ "Generate an expression that, once evaluated, may return an object
+equivalent to @var{obj}, that is, for a music expression, a
+@code{(make-music ...)} form."
(cond (;; markup expression
(markup? obj)
(markup-expression->make-markup obj))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-public (shift-one-duration-log music shift dot)
- " add SHIFT to duration-log of 'duration in music and optionally
- a dot to any note encountered. This scales the music up by a factor
- 2^shift * (2 - (1/2)^dot)"
+ "Add @var{shift} to @code{duration-log} of @code{'duration} in
+@var{music} and optionally @var{dot} to any note encountered. This
+scales the music up by a factor `2^@var{shift} * (2 - (1/2)^@var{dot})'."
(let ((d (ly:music-property music 'duration)))
(if (ly:duration? d)
(let* ((cp (ly:duration-factor d))
music))
(define-public (make-repeat name times main alts)
- "create a repeat music expression, with all properties initialized properly"
+ "Create a repeat music expression, with all properties initialized
+properly."
(define (first-note-duration music)
"Finds the duration of the first NoteEvent by searching depth-first
through MUSIC."
;; clusters.
(define-public (note-to-cluster music)
- "Replace NoteEvents by ClusterNoteEvents."
+ "Replace @code{NoteEvents} by @code{ClusterNoteEvents}."
(if (eq? (ly:music-property music 'name) 'NoteEvent)
(make-music 'ClusterNoteEvent
'pitch (ly:music-property music 'pitch)
;; repeats.
(define-public (unfold-repeats music)
- "This function replaces all repeats with unfolded repeats."
+ "Replace all repeats with unfolded repeats."
(let ((es (ly:music-property music 'elements))
(e (ly:music-property music 'element)))
;; property setting music objs.
(define-public (make-grob-property-set grob gprop val)
- "Make a Music expression that sets GPROP to VAL in GROB. Does a pop first,
-i.e. this is not an override"
+ "Make a @code{Music} expression that sets @var{gprop} to @var{val} in
+@var{grob}. Does a pop first, i.e., this is not an override."
(make-music 'OverrideProperty
'symbol grob
'grob-property gprop
'pop-first #t))
(define-public (make-grob-property-override grob gprop val)
- "Make a Music expression that overrides GPROP to VAL in GROB."
+ "Make a @code{Music} expression that overrides @var{gprop} to @var{val}
+in @var{grob}."
(make-music 'OverrideProperty
'symbol grob
'grob-property gprop
'grob-value val))
(define-public (make-grob-property-revert grob gprop)
- "Revert the grob property GPROP for GROB."
+ "Revert the grob property @var{gprop} for @var{grob}."
(make-music 'RevertProperty
'symbol grob
'grob-property gprop))
(define-safe-public (context-spec-music m context #:optional id)
- "Add \\context CONTEXT = ID to M. "
+ "Add \\context CONTEXT = ID to M."
(let ((cm (make-music 'ContextSpeccedMusic
'element m
'context-type context)))
cm))
(define-public (descend-to-context m context)
- "Like context-spec-music, but only descending. "
+ "Like @code{context-spec-music}, but only descending."
(let ((cm (context-spec-music m context)))
(ly:music-set-property! cm 'descend-only #t)
cm))
;;; Need to keep this definition for \time calls from parser
(define-public (make-time-signature-set num den)
- "Set properties for time signature NUM/DEN."
+ "Set properties for time signature @var{num}/@var{den}."
(make-music 'TimeSignatureMusic
'numerator num
'denominator den
;;; Used for calls that include beat-grouping setting
(define-public (set-time-signature num den . rest)
- "Set properties for time signature @var{num/den}.
-If @var{rest} is present, it is used to set
-@code{beatStructure}."
+ "Set properties for time signature @var{num}/@var{den}.
+If @var{rest} is present, it is used to set @code{beatStructure}."
(ly:export
(make-music 'TimeSignatureMusic
'numerator num
(revert-head-style heads)))))
(define-public (set-mus-properties! m alist)
- "Set all of ALIST as properties of M."
+ "Set all of @var{alist} as properties of @var{m}."
(if (pair? alist)
(begin
(set! (ly:music-property m (caar alist)) (cdar alist))
(set-mus-properties! m (cdr alist)))))
(define-public (music-separator? m)
- "Is M a separator?"
+ "Is @var{m} a separator?"
(let ((ts (ly:music-property m 'types)))
(memq 'separator ts)))
(define (voicify-list lst number)
"Make a list of Musics.
- voicify-list :: [ [Music ] ] -> number -> [Music]
- LST is a list music-lists.
+voicify-list :: [ [Music ] ] -> number -> [Music]
+LST is a list music-lists.
- NUMBER is 0-base, i.e. Voice=1 (upstems) has number 0.
+NUMBER is 0-base, i.e., Voice=1 (upstems) has number 0.
"
(if (null? lst)
'()
ch))
(define-public (voicify-music m)
- "Recursively split chords that are separated with \\ "
+ "Recursively split chords that are separated with @code{\\\\}."
(if (not (ly:music? m))
(ly:error (_ "music expected: ~S") m))
(let ((es (ly:music-property m 'elements))
(define-public ((set-output-property grob-name symbol val) grob grob-c context)
- "Usage:
-
-\\applyoutput #(set-output-property 'Clef 'extra-offset '(0 . 1))
-
-"
+ "Usage example:
+@code{\\applyoutput #(set-output-property 'Clef 'extra-offset '(0 . 1))}"
(let ((meta (ly:grob-property grob 'meta)))
(if (equal? (assoc-get 'name meta) grob-name)
(set! (ly:grob-property grob symbol) val))))
;;
(define-public (smart-bar-check n)
- "Make a bar check that checks for a specific bar number.
-"
+ "Make a bar check that checks for a specific bar number."
(let ((m (make-music 'ApplyContext)))
(define (checker tr)
(let* ((bn (ly:context-property tr 'currentBarNumber)))
(define-public (skip->rest mus)
-
- "Replace MUS by RestEvent of the same duration if it is a
-SkipEvent. Useful for extracting parts from crowded scores"
+ "Replace @var{mus} by @code{RestEvent} of the same duration if it is a
+@code{SkipEvent}. Useful for extracting parts from crowded scores."
(if (memq (ly:music-property mus 'name) '(SkipEvent SkipMusic))
(make-music 'RestEvent 'duration (ly:music-property mus 'duration))
nv))
(define (vector-map f v)
- "Map F over V. This function returns nothing."
+ "Map F over V. This function returns nothing."
(do ((n (vector-length v))
(i 0 (+ i 1)))
((>= i n))
(f (vector-ref v i))))
(define (vector-reverse-map f v)
- "Map F over V, N to 0 order. This function returns nothing."
+ "Map F over V, N to 0 order. This function returns nothing."
(do ((i (- (vector-length v) 1) (- i 1)))
((< i 0))
(f (vector-ref v i))))
(define-public (add-grace-property context-name grob sym val)
- "Set SYM=VAL for GROB in CONTEXT-NAME. "
+ "Set @var{sym}=@var{val} for @var{grob} in @var{context-name}."
(define (set-prop context)
(let* ((where (ly:context-property-where-defined context 'graceSettings))
(current (ly:context-property where 'graceSettings))
(ly:export (context-spec-music (make-apply-context set-prop) 'Voice)))
(define-public (remove-grace-property context-name grob sym)
- "Remove all SYM for GROB in CONTEXT-NAME. "
+ "Remove all @var{sym} for @var{grob} in @var{context-name}."
(define (sym-grob-context? property sym grob context-name)
(and (eq? (car property) context-name)
(eq? (cadr property) grob)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-public (cue-substitute quote-music)
- "Must happen after quote-substitute."
+ "Must happen after @code{quote-substitute}."
(if (vector? (ly:music-property quote-music 'quoted-events))
(let* ((dir (ly:music-property quote-music 'quoted-voice-direction))
music)
(define-public (make-duration-of-length moment)
- "Make duration of the given MOMENT length."
+ "Make duration of the given @code{moment} length."
(ly:make-duration 0 0
(ly:moment-main-numerator moment)
(ly:moment-main-denominator moment)))
(define (check-pitch-against-signature context pitch barnum laziness octaveness)
"Checks the need for an accidental and a @q{restore} accidental against
-@code{localKeySignature}. The @var{laziness} is the number of measures
+@code{localKeySignature}. The @var{laziness} is the number of measures
for which reminder accidentals are used (i.e., if @var{laziness} is zero,
only cancel accidentals in the same measure; if @var{laziness} is three,
we cancel accidentals up to three measures after they first appear.
(cons need-restore need-accidental)))
(define-public ((make-accidental-rule octaveness laziness) context pitch barnum measurepos)
- "Creates an accidental rule that makes its decision based on the octave of the note
- and a laziness value.
- octaveness is either 'same-octave or 'any-octave and defines whether the rule should
- respond to accidental changes in other octaves than the current. 'same-octave is the
- normal way to typeset accidentals - an accidental is made if the alteration is different
- from the last active pitch in the same octave. 'any-octave looks at the last active pitch
- in any octave.
- laziness states over how many bars an accidental should be remembered.
- 0 is default - accidental lasts over 0 bar lines, that is, to the end of current measure.
- A positive integer means that the accidental lasts over that many bar lines.
- -1 is 'forget immediately', that is, only look at key signature.
- #t is forever."
+ "Create an accidental rule that makes its decision based on the octave of
+the note and a laziness value.
+
+@var{octaveness} is either @code{'same-octave} or @code{'any-octave} and
+defines whether the rule should respond to accidental changes in other
+octaves than the current. @code{'same-octave} is the normal way to typeset
+accidentals -- an accidental is made if the alteration is different from the
+last active pitch in the same octave. @code{'any-octave} looks at the last
+active pitch in any octave.
+
+@var{laziness} states over how many bars an accidental should be remembered.
+@code{0}@tie{}is the default -- accidental lasts over 0@tie{}bar lines, that
+is, to the end of current measure. A positive integer means that the
+accidental lasts over that many bar lines. @code{-1} is `forget
+immediately', that is, only look at key signature. @code{#t} is `forever'."
+
(check-pitch-against-signature context pitch barnum laziness octaveness))
(define (key-entry-notename entry)
- "Return the pitch of an entry in localKeySignature. The entry is either of the form
+ "Return the pitch of an entry in localKeySignature. The entry is either of the form
'(notename . alter) or '((octave . notename) . (alter barnum . measurepos))."
(if (number? (car entry))
(car entry)
(cadr entry)))
(define-public (find-pitch-entry keysig pitch accept-global accept-local)
- "Return the first entry in keysig that matches the pitch.
- accept-global states whether key signature entries should be included.
- accept-local states whether local accidentals should be included.
- if no matching entry is found, #f is returned."
+ "Return the first entry in @var{keysig} that matches @var{pitch}.
+@var{accept-global} states whether key signature entries should be included.
+@var{accept-local} states whether local accidentals should be included.
+If no matching entry is found, @var{#f} is returned."
(if (pair? keysig)
(let* ((entry (car keysig))
(entryoct (key-entry-octave entry))
#f))
(define-public (neo-modern-accidental-rule context pitch barnum measurepos)
- "an accidental rule that typesets an accidental if it differs from the key signature
- AND does not directly follow a note on the same staff-line.
- This rule should not be used alone because it does neither look at bar lines
- nor different accidentals at the same notename"
+ "An accidental rule that typesets an accidental if it differs from the
+key signature @emph{and} does not directly follow a note on the same
+staff line. This rule should not be used alone because it does neither
+look at bar lines nor different accidentals at the same note name."
(let* ((keysig (ly:context-property context 'localKeySignature))
(entry (find-pitch-entry keysig pitch #t #t)))
(if (equal? #f entry)
(and (equal? entrybn barnum) (equal? entrymp measurepos)))))))))
(define-public (teaching-accidental-rule context pitch barnum measurepos)
- "an accidental rule that typesets a cautionary accidental
- if it is included in the key signature AND does not directly follow
- a note on the same staff-line."
+ "An accidental rule that typesets a cautionary accidental if it is
+included in the key signature @emph{and} does not directly follow a note
+on the same staff line."
(let* ((keysig (ly:context-property context 'localKeySignature))
(entry (find-pitch-entry keysig pitch #t #t)))
(if (equal? #f entry)
context))
(define-public (set-accidental-style style . rest)
- "Set accidental style to STYLE. Optionally takes a context argument,
-e.g. 'Staff or 'Voice. The context defaults to Staff, except for piano styles, which
-use GrandStaff as a context. "
+ "Set accidental style to @var{style}. Optionally take a context
+argument, e.g. @code{'Staff} or @code{'Voice}. The context defaults
+to @code{Staff}, except for piano styles, which use @code{GrandStaff}
+as a context."
(let ((context (if (pair? rest)
(car rest) 'Staff))
(pcontext (if (pair? rest)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-public (skip-of-length mus)
- "Create a skip of exactly the same length as MUS."
+ "Create a skip of exactly the same length as @var{mus}."
(let* ((skip
(make-music
'SkipEvent
(make-event-chord (list (ly:music-compress skip (ly:music-length mus))))))
(define-public (mmrest-of-length mus)
- "Create a mmrest of exactly the same length as MUS."
+ "Create a multi-measure rest of exactly the same length as @var{mus}."
(let* ((skip
(make-multi-measure-rest
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-public (extract-named-music music music-name)
-"Return a flat list of all music named @code{music-name}
-from @code{music}."
+ "Return a flat list of all music named @var{music-name} from @var{music}."
(let ((extracted-list
(if (ly:music? music)
(if (eq? (ly:music-property music 'name) music-name)
(flatten-list extracted-list)))
(define-public (event-chord-notes event-chord)
-"Return a list of all notes from @{event-chord}."
+ "Return a list of all notes from @var{event-chord}."
(filter
(lambda (m) (eq? 'NoteEvent (ly:music-property m 'name)))
(ly:music-property event-chord 'elements)))
(define-public (event-chord-pitches event-chord)
-"Return a list of all pitches from @{event-chord}."
+ "Return a list of all pitches from @var{event-chord}."
(map (lambda (x) (ly:music-property x 'pitch))
(event-chord-notes event-chord)))
(pair? (ly:grob-basic-properties grob)))
(define-public (make-stencil-boxer thickness padding callback)
-
"Return function that adds a box around the grob passed as argument."
(lambda (grob)
(box-stencil (callback grob) thickness padding)))
(define-public (make-stencil-circler thickness padding callback)
"Return function that adds a circle around the grob passed as argument."
-
- (lambda (grob) (circle-stencil (callback grob) thickness padding)))
+ (lambda (grob)
+ (circle-stencil (callback grob) thickness padding)))
(define-public (print-circled-text-callback grob)
(grob-interpret-markup grob (make-circle-markup
(if (< log 0)
(string-append (number->string log) "mensural")
(string-append (number->string log) (symbol->string style))))
+ ((blackpetrucci)
+ (if (< log 0)
+ (string-append (number->string log) "blackmensural")
+ (string-append (number->string log) (symbol->string style))))
+ ((semipetrucci)
+ (if (< log 0)
+ (string-append (number->string log) "semimensural")
+ (string-append (number->string log) "petrucci")))
((neomensural)
(string-append (number->string log) (symbol->string style)))
(else
(define (str4 num)
(if (or (nan? num) (inf? num))
(begin
- (ly:warning (_ "Found infinity or nan in output. Substituting 0.0"))
+ (ly:warning (_ "Found infinity or nan in output. Substituting 0.0"))
(if (ly:get-option 'strict-infinity-checking)
(exit 1))
"0.0")
(format "<~S~a>\n" entity (attributes attributes-alist)))
(define-public (eoc entity . attributes-alist)
- " oc = open/close"
+ "oc = open/close"
(format "<~S~a/>\n" entity (attributes attributes-alist)))
(define-public (ec entity)
))
(define-public (layout-set-absolute-staff-size sz)
- "Function to be called inside a \\layout{} block to set the staff
-size. SZ is in points"
+ "Set the absolute staff size inside of a @code{\\layout@{@}} block.
+@var{sz} is in points."
(layout-set-absolute-staff-size-in-module (current-module) sz))
(define-public (layout-set-staff-size sz)
- "Function to be called inside a \\layout{} block to set the staff
-size. SZ is in points"
+ "Set the staff size inside of a @code{\\layout@{@}} block.
+@var{sz} is in points."
(layout-set-absolute-staff-size (* (eval 'pt (current-module)) sz)))
("petrucci-c5" . ("clefs.petrucci.c5" 4 0))
("petrucci-f3" . ("clefs.petrucci.f" 0 0))
("petrucci-f4" . ("clefs.petrucci.f" 2 0))
+ ("petrucci-f5" . ("clefs.petrucci.f" 4 0))
("petrucci-f" . ("clefs.petrucci.f" 2 0))
("petrucci-g" . ("clefs.petrucci.g" -2 0))))
("clefs.petrucci.g" . -4)))
(define-public (make-clef-set clef-name)
- "Generate the clef setting commands for a clef with name CLEF-NAME."
+ "Generate the clef setting commands for a clef with name @var{clef-name}."
(define (make-prop-set props)
(let ((m (make-music 'PropertySet)))
(map (lambda (x) (set! (ly:music-property m (car x)) (cdr x))) props)
(make-music 'Music)))))
(define-public (make-cue-clef-set clef-name)
- "Generate the clef setting commands for a cue clef with name CLEF-NAME."
+ "Generate the clef setting commands for a cue clef with name
+@var{clef-name}."
(define (make-prop-set props)
(let ((m (make-music 'PropertySet)))
(map (lambda (x) (set! (ly:music-property m (car x)) (cdr x))) props)
;; a function to add new clefs at runtime
(define-public (add-new-clef clef-name clef-glyph clef-position octavation c0-position)
- "Append the entries for a clef symbol to supported clefs and c0-pitch-alist"
+ "Append the entries for a clef symbol to supported clefs and
+@code{c0-pitch-alist}."
(set! supported-clefs
(acons clef-name (list clef-glyph clef-position octavation) supported-clefs))
(set! c0-pitch-alist
(string->list (number->string var-idx)))))))))
(define-public (parse-string-result str parser)
- "Parse `str', which is supposed to contain a music expression."
+ "Parse @var{str}, which is supposed to contain a music expression."
(ly:parser-parse-string
parser
(ly:parser-lookup parser 'parseStringResult))
(define-public (read-lily-expression chr port)
- "Read a #{ lily music expression #} from port and return
-the scheme music expression. The $ character may be used to introduce
-scheme forms, typically symbols. $$ may be used to simply write a `$'
-character."
+ "Read a lilypond music expression enclosed within @code{#@}} and @code{#@}}
+from @var{port} and return the corresponding Scheme music expression.
+The @samp{$} character may be used to introduce Scheme forms, typically
+symbols. @code{$$} may be used to simply write a @samp{$} character itself."
(let ((bindings '()))
(define (create-binding! val)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define-public (recording-group-emulate music odef)
- "Interprets music according to odef, but stores all events in a chronological
-list, similar to the Recording_group_engraver in 2.8 and earlier"
+ "Interpret @var{music} according to @var{odef}, but store all events
+in a chronological list, similar to the @code{Recording_group_engraver} in
+LilyPond version 2.8 and earlier."
(let*
((context-list '())
(now-mom (ly:make-moment 0 0))
m))
(define-public (determine-split-list evl1 evl2)
- "EVL1 and EVL2 should be ascending"
+ "@var{evl1} and @var{evl2} should be ascending."
(let* ((pc-debug #f)
(chord-threshold 8)
(voice-state-vec1 (make-voice-states evl1))
(previous-voice-state vs)))
(define (try-solo type start-idx current-idx)
- "Find a maximum stretch that can be marked as solo. Only set
+ "Find a maximum stretch that can be marked as solo. Only set
the mark when there are no spanners active.
return next idx to analyse.
start-idx))
(define (analyse-moment result-idx)
- "Analyse 'apart starting at RESULT-IDX. Return next index. "
+ "Analyse 'apart starting at RESULT-IDX. Return next index."
(let* ((now-state (vector-ref result result-idx))
(vs1 (current-voice-state now-state 1))
(vs2 (current-voice-state now-state 2))
(define-public (parse-terse-string terse-definition)
-"Parse a fret-diagram-terse definition string @code{terse-definition} and
-return a marking list, which can be used with a fretboard grob."
+ "Parse a @code{fret-diagram-terse} definition string @var{terse-definition}
+and return a marking list, which can be used with a fretboard grob."
(cdr (fret-parse-terse-definition-string (list '()) terse-definition)))
(define-public (get-chord-shape shape-code tuning base-chord-shapes)
-"Return the chord shape associated with @code{shape-code} and
-@code{tuning} in the hash-table @code{base-chord-shapes}."
+ "Return the chord shape associated with @var{shape-code} and
+@var{tuning} in the hash-table @var{base-chord-shapes}."
(let ((hash-handle (hash-get-handle base-chord-shapes
(cons shape-code tuning))))
(if hash-handle
'())))
(define-public (offset-fret fret-offset diagram-definition)
-"Add @code{fret-offset} to each fret indication in @code{diagram-definition}
-and return the resulting verbose fret-diagram-definition."
+ "Add @var{fret-offset} to each fret indication in
+@var{diagram-definition} and return the resulting verbose
+@code{fret-diagram-definition}."
(let ((verbose-definition
(if (string? diagram-definition)
(parse-terse-string diagram-definition)
(lily)
)
+;; FIXME: use backend-library for duplicates and stubs; lilypond-ps2png.scm is no more
+
(define-public _ gettext)
(define PLATFORM
(define-public (music-property-value? music property value)
- "Return true iff MUSIC's PROPERTY is equal to VALUE."
+ "Return @code{#t} iff @var{music}'s @var{property} is equal to
+@var{value}."
(equal? (ly:music-property music property) value))
(define-public (music-name? music name)
- "Return true iff MUSIC's name is NAME."
+ "Return @code{#t} iff @var{music}'s name is @var{name}."
(if (list? name)
(member (ly:music-property music 'name) name)
(music-property-value? music 'name name)))
(define-public (music-property? music property)
- "Return true iff MUSIC is a property setter and sets or unsets PROPERTY."
+ "Return @code{#t} iff @var{music} is a property setter and sets
+or unsets @var{property}."
(and (music-name? music '(PropertySet PropertyUnset))
(music-property-value? music 'symbol property)))
(define-public (music-has-property? music property)
- "Return true iff MUSIC contains PROPERTY."
+ "Return @code{#t} iff @var{music} contains @var{property}."
(not (eq? (ly:music-property music property) '())))
(define-public (property-value music)
- "Return value of a property setter MUSIC.
-If it unsets the property, return #f."
+ "Return value of a property setter @var{music}.
+If it unsets the property, return @code{#f}."
(if (music-name? music 'PropertyUnset)
#f
(ly:music-property music 'value)))
(define-public (music-elements music)
- "Return list of all MUSIC's top-level children."
+ "Return list of all @var{music}'s top-level children."
(let ((elt (ly:music-property music 'element))
(elts (ly:music-property music 'elements)))
(if (not (null? elt))
elts)))
(define-public (find-child music predicate)
- "Find the first node in MUSIC that satisfies PREDICATE."
+ "Find the first node in @var{music} that satisfies @var{predicate}."
(define (find-child queue)
(if (null? queue)
#f
(find-child (list music)))
(define-public (find-child-named music name)
- "Return the first child in MUSIC that is named NAME."
+ "Return the first child in @var{music} that is named @var{name}."
(find-child music (lambda (elt) (music-name? elt name))))
(define-public (process-music music function)
- "Process all nodes of MUSIC (including MUSIC) in the DFS order.
-Apply FUNCTION on each of the nodes.
-If FUNCTION applied on a node returns true, don't process the node's subtree."
+ "Process all nodes of @var{music} (including @var{music}) in the DFS order.
+Apply @var{function} on each of the nodes. If @var{function} applied on a
+node returns @code{#t}, don't process the node's subtree."
(define (process-music queue)
(if (not (null? queue))
(let* ((elt (car queue))
;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
(define-public (stack-stencils axis dir padding stils)
- "Stack stencils STILS in direction AXIS, DIR, using PADDING."
+ "Stack stencils @var{stils} in direction @var{axis}, @var{dir}, using
+@var{padding}."
(cond
((null? stils) empty-stencil)
((null? (cdr stils)) (car stils))
padding))))
(define-public (stack-stencils-padding-list axis dir padding stils)
- "Stack stencils STILS in direction AXIS, DIR, using a list of PADDING."
+ "Stack stencils @var{stils} in direction @var{axis}, @var{dir}, using
+a list of @var{padding}."
(cond
((null? stils) empty-stencil)
((null? (cdr stils)) (car stils))
(car padding)))))
(define-public (centered-stencil stencil)
- "Center stencil @var{stencil} in both the X and Y directions"
+ "Center stencil @var{stencil} in both the X and Y directions."
(ly:stencil-aligned-to (ly:stencil-aligned-to stencil X CENTER) Y CENTER))
(define-public (stack-lines dir padding baseline stils)
- "Stack vertically with a baseline-skip."
+ "Stack vertically with a baseline skip."
(define result empty-stencil)
(define last-y #f)
(do
(define-public (bracketify-stencil stil axis thick protrusion padding)
- "Add brackets around STIL, producing a new stencil."
+ "Add brackets around @var{stil}, producing a new stencil."
(let* ((ext (ly:stencil-extent stil axis))
(lb (ly:bracket axis ext thick protrusion))
stencil))
(define-public (make-line-stencil width startx starty endx endy)
- "Make a line stencil of given linewidth and set its extents accordingly"
+ "Make a line stencil of given linewidth and set its extents accordingly."
(let ((xext (cons (min startx endx) (max startx endx)))
(yext (cons (min starty endy) (max starty endy))))
(ly:make-stencil
xext yext))
(define-public (make-circle-stencil radius thickness fill)
- "Make a circle of radius @var{radius} and thickness @var{thickness}"
+ "Make a circle of radius @var{radius} and thickness @var{thickness}."
(let*
((out-radius (+ radius (/ thickness 2.0))))
(cons (- out-radius) out-radius))))
(define-public (make-oval-stencil x-radius y-radius thickness fill)
- "Make an oval from two Bezier curves, of x radius @var{x-radius},
- y radius @code{y-radius},
- and thickness @var{thickness} with fill defined by @code{fill}."
+ "Make an oval from two Bezier curves, of x@tie{}radius @var{x-radius},
+y@tie{}radius @code{y-radius}, and thickness @var{thickness} with fill
+defined by @code{fill}."
(let*
((x-out-radius (+ x-radius (/ thickness 2.0)))
(y-out-radius (+ y-radius (/ thickness 2.0))) )
`(,(/ thickness -2) . ,(/ thickness 2))))))
(define-public (make-ellipse-stencil x-radius y-radius thickness fill)
- "Make an ellipse of x radius @var{x-radius}, y radius @code{y-radius},
- and thickness @var{thickness} with fill defined by @code{fill}."
+ "Make an ellipse of x@tie{}radius @var{x-radius}, y@tie{}radius
+@code{y-radius}, and thickness @var{thickness} with fill defined by
+@code{fill}."
(let*
((x-out-radius (+ x-radius (/ thickness 2.0)))
(y-out-radius (+ y-radius (/ thickness 2.0))) )
(define-public (box-grob-stencil grob)
"Make a box of exactly the extents of the grob. The box precisely
-encloses the contents.
-"
+encloses the contents."
(let* ((xext (ly:grob-extent grob grob 0))
(yext (ly:grob-extent grob grob 1))
(thick 0.01))
;; TODO merge this and prev function.
(define-public (box-stencil stencil thickness padding)
- "Add a box around STENCIL, producing a new stencil."
+ "Add a box around @var{stencil}, producing a new stencil."
(let* ((x-ext (interval-widen (ly:stencil-extent stencil 0) padding))
(y-ext (interval-widen (ly:stencil-extent stencil 1) padding))
(y-rule (make-filled-box-stencil (cons 0 thickness) y-ext))
stencil))
(define-public (circle-stencil stencil thickness padding)
- "Add a circle around STENCIL, producing a new stencil."
+ "Add a circle around @var{stencil}, producing a new stencil."
(let* ((x-ext (ly:stencil-extent stencil X))
(y-ext (ly:stencil-extent stencil Y))
(diameter (max (interval-length x-ext)
(define-public (oval-stencil stencil thickness x-padding y-padding)
"Add an oval around @code{stencil}, padded by the padding pair,
- producing a new stencil."
+producing a new stencil."
(let* ((x-ext (ly:stencil-extent stencil X))
(y-ext (ly:stencil-extent stencil Y))
(x-length (+ (interval-length x-ext) x-padding thickness))
(interval-center y-ext))))))
(define-public (ellipse-stencil stencil thickness x-padding y-padding)
- "Add an ellipse around STENCIL, padded by the padding pair,
- producing a new stencil."
+ "Add an ellipse around @var{stencil}, padded by the padding pair,
+producing a new stencil."
(let* ((x-ext (ly:stencil-extent stencil X))
(y-ext (ly:stencil-extent stencil Y))
(x-length (+ (interval-length x-ext) x-padding thickness))
(interval-center y-ext))))))
(define-public (rounded-box-stencil stencil thickness padding blot)
- "Add a rounded box around STENCIL, producing a new stencil."
+ "Add a rounded box around @var{stencil}, producing a new stencil."
(let* ((xext (interval-widen (ly:stencil-extent stencil 0) padding))
(yext (interval-widen (ly:stencil-extent stencil 1) padding))
))
(define-public (arrow-stencil-maker start? end?)
- "Returns a function drawing a line from current point to @var{destination},
- with optional arrows of @var{max-size} on start and end controlled by
- @var{start?} and @var{end?}."
+ "Return a function drawing a line from current point to @code{destination},
+with optional arrows of @code{max-size} on start and end controlled by
+@var{start?} and @var{end?}."
(lambda (destination max-size)
(let*
((e_x 1+0i)
(cons 'beamExceptions beam-exceptions)))
(define-public (base-fraction time-signature time-signature-settings)
- "Get @code{baseMoment} fraction value for @code{time-signature} from
-@code{time-signature-settings}."
+ "Get @code{baseMoment} fraction value for @var{time-signature} from
+@var{time-signature-settings}."
(let ((return-value (get-setting 'baseMoment
time-signature
time-signature-settings)))
return-value)))
(define-public (beat-structure base-fraction time-signature time-signature-settings)
- "Get beatStructure value in @code{base-fraction} units
-for @code{time-signature} from
-@code{time-signature-settings}."
+ "Get @code{beatStructure} value in @var{base-fraction} units
+for @var{time-signature} from @var{time-signature-settings}."
(define (fraction-divide numerator denominator)
(/ (* (car numerator) (cdr denominator))
(* (cdr numerator) (car denominator))))
return-value)))
(define-public (beam-exceptions time-signature time-signature-settings)
- "Get beamExceptions value for @code{time-signature} from
-@code{time-signature-settings}."
+ "Get @code{beamExceptions} value for @var{time-signature} from
+@var{time-signature-settings}."
(get-setting 'beamExceptions time-signature time-signature-settings))
(define (override-property-setting context property setting value)
"Like the C++ code that executes \\override, but without type
-checking. "
+checking."
(begin
(revert-property-setting context property setting)
(ly:context-set-property!
(define (revert-property-setting context property setting)
"Like the C++ code that executes \revert, but without type
-checking. "
+checking."
(define (entry-count alist entry-key)
"Count the number of entries in alist with a key of
(revert-member current-value setting)))))
(define-public (override-time-signature-setting time-signature setting)
- "Override the time signature settings for the context in @var{rest},
-with the new setting alist @var{setting}. "
+ "Override the time signature settings for the context in
+@var{time-signature}, with the new setting alist @var{setting}."
(context-spec-music
(make-apply-context
(lambda (c) (override-property-setting
'timeSignatureSettings
time-signature)))
'Timing))
+
+
+
+
+;;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+;;; Formatting of complex/compound time signatures
+
+(define (insert-markups l m)
+ (let ((ll (reverse l)))
+ (let join-markups ((markups (list (car ll)))
+ (remaining (cdr ll)))
+ (if (pair? remaining)
+ (join-markups (cons (car remaining) (cons m markups)) (cdr remaining))
+ markups))))
+
+;;; Use a centered-column inside a left-column, because the centered column
+;;; moves its reference point to the center, which the left-column undoes.
+(define (format-time-fraction time-sig-fraction)
+ (let* ((revargs (reverse (map number->string time-sig-fraction)))
+ (den (car revargs))
+ (nums (reverse (cdr revargs))))
+ (make-override-markup '(baseline-skip . 0)
+ (make-number-markup
+ (make-left-column-markup (list
+ (make-center-column-markup (list
+ (make-line-markup (insert-markups nums "+"))
+ den))))))))
+
+(define (format-complex-compound-time time-sig)
+ (make-override-markup '(baseline-skip . 0)
+ (make-number-markup
+ (make-line-markup
+ (insert-markups (map format-time-fraction time-sig)
+ (make-vcenter-markup "+"))))))
+
+(define-public (format-compound-time time-sig)
+ (cond
+ ((not (pair? time-sig)) (null-markup))
+ ((pair? (car time-sig)) (format-complex-compound-time time-sig))
+ (else (format-time-fraction time-sig))))
+
+
+;;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+;;; Measure length calculation of (possibly complex) compound time signatures
+
+(define (calculate-time-fraction time-sig-fraction)
+ (let* ((revargs (reverse time-sig-fraction))
+ (den (car revargs))
+ (num (apply + (cdr revargs))))
+ (ly:make-moment num den)))
+
+(define (calculate-complex-compound-time time-sig)
+ (let add-moment ((moment ZERO-MOMENT)
+ (remaining (map calculate-time-fraction time-sig)))
+ (if (pair? remaining)
+ (add-moment (ly:moment-add moment (car remaining)) (cdr remaining))
+ moment)))
+
+(define-public (calculate-compound-measure-length time-sig)
+ (cond
+ ((not (pair? time-sig)) (ly:make-moment 4 4))
+ ((pair? (car time-sig)) (calculate-complex-compound-time time-sig))
+ (else (calculate-time-fraction time-sig))))
+
+
+;;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+;;; Base beat length: Use the smallest denominator from all fraction
+
+(define (calculate-compound-base-beat-full time-sig)
+ (apply max (map last time-sig)))
+
+(define-public (calculate-compound-base-beat time-sig)
+ (ly:make-moment 1
+ (cond
+ ((not (pair? time-sig)) 4)
+ ((pair? (car time-sig)) (calculate-compound-base-beat-full time-sig))
+ (else (calculate-compound-base-beat-full (list time-sig))))))
+
+
+;;;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+;;; Beat Grouping
+
+(define (normalize-fraction frac beat)
+ (let* ((thisbeat (car (reverse frac)))
+ (factor (/ beat thisbeat)))
+ (map (lambda (f) (* factor f)) frac)))
+
+(define (beat-grouping-internal time-sig)
+ ;; Normalize to given beat, extract the beats and join them to one list
+ (let* ((beat (calculate-compound-base-beat-full time-sig))
+ (normalized (map (lambda (f) (normalize-fraction f beat)) time-sig))
+ (beats (map (lambda (f) (reverse (cdr (reverse f)))) normalized)))
+ (apply append beats)))
+
+(define-public (calculate-compound-beat-grouping time-sig)
+ (cond
+ ((not (pair? time-sig)) '(2 . 2))
+ ((pair? (car time-sig)) (beat-grouping-internal time-sig))
+ (else (beat-grouping-internal (list time-sig)))))
(define-public ((marked-up-headfoot what-odd what-even)
layout scopes page-number is-last-bookpart is-bookpart-last-page)
-
- "Read variables WHAT-ODD, WHAT-EVEN from LAYOUT, and interpret them
-as markup. The PROPS argument will include variables set in SCOPES and
-page:is-bookpart-last-page, page:is-last-bookpart, page:page-number-string
-and page:page-number"
+ "Read variables @var{what-odd}, @var{what-even} from @var{layout},
+and interpret them as markup. The @var{props} argument will include
+variables set in @var{scopes} and @code{page:is-bookpart-last-page},
+@code{page:is-last-bookpart}, @code{page:page-number-string}, and
+@code{page:page-number}."
(define (get sym)
(ly:output-def-lookup layout sym))
(get what-odd))))
(define-public ((marked-up-title what) layout scopes)
- "Read variables WHAT from SCOPES, and interpret it as markup. The
-PROPS argument will include variables set in SCOPES (prefixed with
-`header:'
-"
+ "Read variables @var{what} from @var{scopes}, and interpret it as markup.
+The @var{props} argument will include variables set in @var{scopes} (prefixed
+with `header:'."
(define (get sym)
(let ((x (ly:modules-lookup scopes sym)))
(string-append "</" (symbol->string name) ">"))
(define-public (music-to-xml music port)
- "Dump XML-ish stuff to PORT."
+ "Dump XML-ish stuff to @var{port}."
;; dtd contains # -- This confuses tex during make doc.
;;
(display (close-tag 'music) port))
(define-public (music-to-musicxml music port)
- "Dump MusicXML-ish stuff to PORT."
+ "Dump MusicXML-ish stuff to @var{port}."
;; dtd contains # -- This confuses tex during make doc.
;;
(define-public
(determine-frets context notes specified-info . rest)
"Determine string numbers and frets for playing @var{notes}
-as a chord, given specified information @var{specified-info}.
+as a chord, given specified information @var{specified-info}.
@var{specified-info} is a list with two list elements,
-specified strings @var{defined-strings} and
-specified fingerings @var{defined-fingers}. Only a fingering of
-0 will affect the fret selection, as it specifies an open string.
-If @var{defined-strings} is @code{'()}, the context property
+specified strings @code{defined-strings} and
+specified fingerings @code{defined-fingers}. Only a fingering of@tie{}0
+will affect the fret selection, as it specifies an open string.
+If @code{defined-strings} is @code{'()}, the context property
@code{defaultStrings} will be used as a list of defined strings.
Will look for predefined fretboards if @code{predefinedFretboardTable}
is not @code {#f}. If @var{rest} is present, it contains the
-FretBoard grob, and a fretboard will be
-created. Otherwise, a list of (string fret finger) lists will
-be returned)."
+@code{FretBoard} grob, and a fretboard will be
+created. Otherwise, a list of @code{(string fret finger)} lists will
+be returned."
;; helper functions
'Changes': '変更点',
#TODO
- 'Extending': 0,
+ 'Extending': '拡張',
'Internals': '内部リファレンス',
- 'Contributor': 0,
+ 'Contributor': '貢献者向けガイド',
- ' (split HTML)': 0,
- ' (big HTML)': 0,
+# keep the spaces!
+ ' (split HTML)': ' (ページ毎に分割された HTML)',
+ ' (big HTML)': ' (1 つの大きな HTML)',
- 'Regression tests for ': 0,
- 'PDF of regtests for ': 0,
- 'MusicXML Regression tests for ': 0,
- 'PDF of MusicXML regtests for ': 0,
+ 'Regression tests for ': '回帰テスト バージョン ',
+ 'PDF of regtests for ': '回帰テスト (PDF 版) バージョン ',
+ 'MusicXML Regression tests for ': 'MusicXML 回帰テスト バージョン ',
+ 'PDF of MusicXML regtests for ': 'MusicXML 回帰テスト (PDF 版) バージョン ',
- 'Doc tarball for ': 0,
- ' (did not exist in 2.12)': 0,
+ 'Doc tarball for ': 'ドキュメント アーカイブ バージョン ',
+ ' (did not exist in 2.12)': ' (バージョン 2.12 には存在しません)',
},
'nl': {
'Other languages': 'Altre lingue',
},
'ja': {
- 'English': 'Japanese',
+ 'English': '日本語',
'Other languages': '他の言語',
},
'nl': {
# This file is part of LilyPond, the GNU music typesetter.
#
# Copyright (C) 1998--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
-# Jan Nieuwenhuizen <janneke@gnu.org>
+# Jan Nieuwenhuizen <janneke@gnu.org>
#
# LilyPond is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
duration_quant_clocks = 0
allowed_tuplet_clocks = []
-
+bar_max = 0
################################################################
%s
%s
-''' % ( _ ('Copyright (c) %s by') % '2001--2011',
+''' % ( _ ('Copyright (c) %s by') % '1998--2011',
'\n '.join (authors),
_ ('Distributed under terms of the GNU General Public License.'),
_ ('It comes with NO WARRANTY.')))
def warning (s):
progress (_ ("warning: ") + s)
-
+
def error (s):
progress (_ ("error: ") + s)
raise Exception (_ ("Exiting... "))
if clocks <= 0:
self.clocks = duration_quant_clocks
(self.dur, self.num, self.den) = self.dur_num_den (clocks)
-
+
def dur_num_den (self, clocks):
for i in range (len (allowed_tuplet_clocks)):
if clocks == allowed_tuplet_clocks[i]:
s = '%d*%d' % (self.dur, self.num)
else:
s = '%d*%d/%d' % (self.dur, self.num, self.den)
-
+
global reference_note
reference_note.duration = self
n = 6; a = 1; o = o - 1
return (o, n, a)
-
+
def __repr__ (self):
s = chr ((self.notename + 2) % 7 + ord ('a'))
- return 'Note(%s %s)' % (s, self.duration.dump())
+ return 'Note(%s %s)' % (s, self.duration.dump ())
def dump (self, dump_dur = 1):
global reference_note
else:
delta = self.pitch - reference_note.pitch
commas = sign (delta) * (abs (delta) / 12)
- if ((sign (delta) \
- * (self.notename - reference_note.notename) + 7) \
- % 7 >= 4) \
- or ((self.notename == reference_note.notename) \
- and (abs (delta) > 4) and (abs (delta) < 12)):
+ if (((sign (delta)
+ * (self.notename - reference_note.notename) + 7)
+ % 7 >= 4)
+ or ((self.notename == reference_note.notename)
+ and (abs (delta) > 4) and (abs (delta) < 12))):
commas = commas + sign (delta)
-
+
if commas > 0:
s = s + "'" * commas
elif commas < 0:
s = s + "," * -commas
## FIXME: compile fix --jcn
- if dump_dur and (global_options.explicit_durations \
- or self.duration.compare (reference_note.duration)):
+ if (dump_dur and (global_options.explicit_durations
+ or self.duration.compare (reference_note.duration))):
s = s + self.duration.dump ()
reference_note = self
-
+
# TODO: move space
return s + ' '
def __repr__ (self):
return 'Time(%d/%d)' % (self.num, self.den)
-
+
def dump (self):
global time
time = self
def __repr__ (self):
return 'Tempo(%d)' % self.bpm ()
-
+
def bpm (self):
return 4 * 60 / self.seconds_per_1
-
+
def dump (self):
- return '\n ' + '\\tempo 4 = %d ' % (self.bpm()) + '\n '
+ return '\n ' + '\\tempo 4 = %d ' % (self.bpm ()) + '\n '
class Clef:
clefs = ('"bass_8"', 'bass', 'violin', '"violin^8"')
def __repr__ (self):
return 'Clef(%s)' % self.clefs[self.type]
-
+
def dump (self):
return '\n \\clef %s\n ' % self.clefs[self.type]
k = (ord ('cfbeadg'[self.flats % 7]) - ord ('a') - 2 -2 * self.minor + 7) % 7
else:
k = (ord ('cgdaebf'[self.sharps % 7]) - ord ('a') - 2 -2 * self.minor + 7) % 7
-
+
if not self.minor:
name = chr ((k + 2) % 7 + ord ('a'))
else:
'LYRIC',
'MARKER',
'CUE_POINT',)
-
+
def __init__ (self, type, text):
self.clocks = 0
self.type = type
if self.type == midi.LYRIC:
s = '"%s"' % self.text
d = Duration (self.clocks)
- if global_options.explicit_durations \
- or d.compare (reference_note.duration):
+ if (global_options.explicit_durations
+ or d.compare (reference_note.duration)):
s = s + Duration (self.clocks).dump ()
s = s + ' '
else:
def split_track (track):
chs = {}
- for i in range(16):
+ for i in range (16):
chs[i] = []
-
+
for e in track:
data = list (e[1])
if data[0] > 0x7f and data[0] < 0xf0:
(lt, vel) = pitches[e]
del pitches[e]
- i = len (notes) - 1
+ i = len (notes) - 1
while i > 0:
if notes[i][0] > lt:
i = i -1
t = quantise_clocks (t, start_quant_clocks)
- if e[1][0] == midi.NOTE_OFF \
- or (e[1][0] == midi.NOTE_ON and e[1][2] == 0):
+ if (e[1][0] == midi.NOTE_OFF
+ or (e[1][0] == midi.NOTE_ON and e[1][2] == 0)):
end_note (pitches, notes, t, e[1][1])
-
+
elif e[1][0] == midi.NOTE_ON:
if not pitches.has_key (e[1][1]):
pitches[e[1][1]] = (t, e[1][2])
-
+
# all include ALL_NOTES_OFF
- elif e[1][0] >= midi.ALL_SOUND_OFF \
- and e[1][0] <= midi.POLY_MODE_ON:
+ elif (e[1][0] >= midi.ALL_SOUND_OFF
+ and e[1][0] <= midi.POLY_MODE_ON):
for i in pitches:
end_note (pitches, notes, t, i)
-
+
elif e[1][0] == midi.META_EVENT:
if e[1][1] == midi.END_OF_TRACK:
for i in pitches:
events.append ((t, Tempo (seconds_per_1)))
elif e[1][1] == midi.TIME_SIGNATURE:
(num, dur, clocks4, count32) = map (ord, e[1][2])
- den = 2 ** dur
+ den = 2 ** dur
events.append ((t, Time (num, den)))
elif e[1][1] == midi.KEY_SIGNATURE:
(alterations, minor) = map (ord, e[1][2])
# Better do Note.calc () at dump time?
global_options.key = k
- elif e[1][1] == midi.LYRIC \
- or (global_options.text_lyrics and e[1][1] == midi.TEXT_EVENT):
+ elif (e[1][1] == midi.LYRIC
+ or (global_options.text_lyrics and e[1][1] == midi.TEXT_EVENT)):
if last_lyric:
last_lyric.clocks = t - last_time
events.append ((last_time, last_lyric))
last_time = t
last_lyric = Text (midi.LYRIC, e[1][2])
- elif e[1][1] >= midi.SEQUENCE_NUMBER \
- and e[1][1] <= midi.CUE_POINT:
+ elif (e[1][1] >= midi.SEQUENCE_NUMBER
+ and e[1][1] <= midi.CUE_POINT):
events.append ((t, Text (e[1][1], e[1][2])))
else:
if global_options.verbose:
last_lyric.clocks = clocks_per_4
events.append ((last_time, last_lyric))
last_lyric = 0
-
+
i = 0
while len (notes):
if i < len (events) and notes[0][0] >= events[i][0]:
todo = []
for e in channel:
t = e[0]
- if e[1].__class__ == Note \
- and ((t == start_busy_t \
- and e[1].clocks + t == end_busy_t) \
- or t >= end_busy_t):
+ if (e[1].__class__ == Note
+ and ((t == start_busy_t
+ and e[1].clocks + t == end_busy_t)
+ or t >= end_busy_t)):
thread.append (e)
start_busy_t = t
end_busy_t = t + e[1].clocks
- elif e[1].__class__ == Time \
- or e[1].__class__ == Key \
- or e[1].__class__ == Text \
- or e[1].__class__ == Tempo:
+ elif (e[1].__class__ == Time
+ or e[1].__class__ == Key
+ or e[1].__class__ == Text
+ or e[1].__class__ == Tempo):
thread.append (e)
else:
todo.append (e)
if b == 0:
return a
c = a
- while c:
+ while c:
c = a % b
a = b
b = c
return a
-
+
def dump_skip (skip, clocks):
return skip + Duration (clocks).dump () + ' '
s = s + i.dump (dump_dur = 0 )
s = s + '>'
- s = s + notes[0].duration.dump() + ' '
+ s = s + notes[0].duration.dump () + ' '
reference_note = r
return s
bar_t = time.bar_clocks ()
if t - last_bar_t >= bar_t:
bar_count = bar_count + (t - last_bar_t) / bar_t
-
+
if t - last_bar_t == bar_t:
s = '|\n %% %d\n ' % bar_count
last_bar_t = t
else:
# urg, this will barf at meter changes
last_bar_t = last_bar_t + (t - last_bar_t) / bar_t * bar_t
-
+
return (s, last_bar_t, bar_count)
-
+
def dump_channel (thread, skip):
global reference_note, time
else:
if ch:
chs.append ((last_e[0], ch))
-
+
ch = [e[1]]
-
+
last_e = e
if ch:
last_t = 0
last_bar_t = 0
bar_count = 1
-
+
lines = ['']
- for ch in chs:
+ for ch in chs:
t = ch[0]
i = lines[-1].rfind ('\n') + 1
lines.append ('')
if t - last_t > 0:
- lines[-1] = lines[-1] + dump_skip (skip, t-last_t)
+ d = t - last_t
+ if bar_max and t > time.bar_clocks () * bar_max:
+ d = time.bar_clocks () * bar_max - last_t
+ lines[-1] = lines[-1] + dump_skip (skip, d)
elif t - last_t < 0:
errorport.write ('BUG: time skew')
(s, last_bar_t, bar_count) = dump_bar_line (last_bar_t,
t, bar_count)
+
+ if bar_max and bar_count > bar_max:
+ break
+
lines[-1] = lines[-1] + s
-
lines[-1] = lines[-1] + dump_chord (ch[1])
clocks = 0
for i in ch[1]:
if i.clocks > clocks:
clocks = i.clocks
-
+
last_t = t + clocks
-
+
(s, last_bar_t, bar_count) = dump_bar_line (last_bar_t,
- last_t, bar_count)
+ last_t, bar_count)
lines[-1] = lines[-1] + s
return '\n '.join (lines) + '\n'
def thread_first_item (thread):
for chord in thread:
for event in chord:
- if (event[1].__class__ == Note
- or (event[1].__class__ == Text
+ if (event[1].__class__ == Note
+ or (event[1].__class__ == Text
and event[1].type == midi.LYRIC)):
-
+
return event[1]
return None
return Clef (3)
else:
return Clef (2)
-
+
def convert_midi (in_file, out_file):
global clocks_per_1, clocks_per_4, key
global start_quant_clocks
- global duration_quant_clocks
+ global duration_quant_clocks
global allowed_tuplet_clocks
str = open (in_file, 'rb').read ()
- midi_dump = midi.parse (str)
-
+ clocks_max = bar_max * clocks_per_1 * 2
+ midi_dump = midi.parse (str, clocks_max)
+
clocks_per_1 = midi_dump[0][1]
clocks_per_4 = clocks_per_1 / 4
-
+
if global_options.start_quant:
start_quant_clocks = clocks_per_1 / global_options.start_quant
allowed_tuplet_clocks = []
for (dur, num, den) in global_options.allowed_tuplets:
- allowed_tuplet_clocks.append (clocks_per_1 / den)
+ allowed_tuplet_clocks.append (clocks_per_1 / dur * num / den)
+
+ if global_options.verbose:
+ print 'allowed tuplet clocks:', allowed_tuplet_clocks
tracks = []
for t in midi_dump[1]:
tag = '%% Lily was here -- automatically converted by %s from %s' % ( program_name, in_file)
-
+
s = ''
s = tag + '\n\\version "2.7.38"\n\n'
for i in range (len (tracks)):
s = s + dump_track (tracks[i], i)
s = s + '\n\\score {\n <<\n'
-
+
i = 0
for t in tracks:
track = track_name (i)
item = track_first_item (t)
-
+
if item and item.__class__ == Note:
s = s + ' \\context Staff=%s \\%s\n' % (track, track)
elif item and item.__class__ == Text:
p.add_option ('-a', '--absolute-pitches',
action='store_true',
- help=_ ("print absolute pitches"))
+ help=_ ('print absolute pitches'))
p.add_option ('-d', '--duration-quant',
- metavar= _("DUR"),
- help=_ ("quantise note durations on DUR"))
+ metavar=_ ('DUR'),
+ help=_ ('quantise note durations on DUR'))
p.add_option ('-e', '--explicit-durations',
action='store_true',
- help=_ ("print explicit durations"))
- p.add_option("-h", "--help",
- action="help",
- help=_ ("show this help and exit"))
- p.add_option('-k', '--key', help=_ ("set key: ALT=+sharps|-flats; MINOR=1"),
- metavar=_ ("ALT[:MINOR]"),
+ help=_ ('print explicit durations'))
+ p.add_option('-h', '--help',
+ action='help',
+ help=_ ('show this help and exit'))
+ p.add_option('-k', '--key', help=_ ('set key: ALT=+sharps|-flats; MINOR=1'),
+ metavar=_ ('ALT[:MINOR]'),
default='0'),
- p.add_option ('-o', '--output', help=_ ("write output to FILE"),
- metavar=_("FILE"),
+ p.add_option ('-o', '--output', help=_ ('write output to FILE'),
+ metavar=_ ('FILE'),
action='store')
- p.add_option ('-s', '--start-quant',help= _ ("quantise note starts on DUR"),
- metavar=_ ("DUR"))
+ p.add_option ('-p', '--preview', help=_ ('preview of first 4 bars'),
+ action='store_true')
+ p.add_option ('-s', '--start-quant',help= _ ('quantise note starts on DUR'),
+ metavar=_ ('DUR'))
p.add_option ('-t', '--allow-tuplet',
- metavar=_ ("DUR*NUM/DEN"),
- action = "append",
- dest="allowed_tuplets",
- help=_ ("allow tuplet durations DUR*NUM/DEN"),
+ metavar=_ ('DUR*NUM/DEN'),
+ action = 'append',
+ dest='allowed_tuplets',
+ help=_ ('allow tuplet durations DUR*NUM/DEN'),
default=[])
- p.add_option ('-V', '--verbose', help=_ ("be verbose"),
+ p.add_option ('-V', '--verbose', help=_ ('be verbose'),
action='store_true'
),
- p.version = "midi2ly (LilyPond) @TOPLEVEL_VERSION@"
- p.add_option("--version",
- action="version",
- help=_ ("show version number and exit"))
- p.add_option ('-w', '--warranty', help=_ ("show warranty and copyright"),
+ p.version = 'midi2ly (LilyPond) @TOPLEVEL_VERSION@'
+ p.add_option ('--version',
+ action='version',
+ help=_ ('show version number and exit'))
+ p.add_option ('-w', '--warranty', help=_ ('show warranty and copyright'),
action='store_true',
),
- p.add_option ('-x', '--text-lyrics', help=_ ("treat every text as a lyric"),
+ p.add_option ('-x', '--text-lyrics', help=_ ('treat every text as a lyric'),
action='store_true')
- p.add_option_group (ly.display_encode (_ ("Examples")),
+ p.add_option_group (ly.display_encode (_ ('Examples')),
description = r'''
$ midi2ly --key=-2:1 --duration-quant=32 --allow-tuplet=4*2/3 --allow-tuplet=2*4/3 foo.midi
''')
def do_options ():
- opt_parser = get_option_parser()
+ opt_parser = get_option_parser ()
(options, args) = opt_parser.parse_args ()
if not args or args[0] == '-':
opt_parser.print_help ()
- ly.stderr_write ('\n%s: %s %s\n' % (program_name, _ ("error: "),
- _ ("no files specified on command line.")))
+ ly.stderr_write ('\n%s: %s %s\n' % (program_name, _ ('error: '),
+ _ ('no files specified on command line.')))
sys.exit (2)
if options.duration_quant:
options.key = Key (sharps, flats, minor)
-
if options.start_quant:
options.start_quant = int (options.start_quant)
-
+
+ global bar_max
+ if options.preview:
+ bar_max = 4
+
options.allowed_tuplets = [map (int, a.replace ('/','*').split ('*'))
for a in options.allowed_tuplets]
-
+
+ if options.verbose:
+ sys.stderr.write ('Allowed tuplets: %s\n' % `options.allowed_tuplets`)
+
global global_options
global_options = options
return args
-def main():
- files = do_options()
+def main ():
+ files = do_options ()
for f in files:
g = f
pass
convert_midi (f, o)
+
if __name__ == '__main__':
- main()
+ main ()
(num (if numerator numerator (ly:event-property ev 'numerator))))
(format "~a:~a" den num)))
""",
-
- "compound-time-signature": """%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Formatting of (possibly complex) compound time signatures
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-#(define-public (insert-markups l m)
- (let* ((ll (reverse l)))
- (let join-markups ((markups (list (car ll)))
- (remaining (cdr ll)))
- (if (pair? remaining)
- (join-markups (cons (car remaining) (cons m markups)) (cdr remaining))
- markups))))
-
-% Use a centered-column inside a left-column, because the centered column
-% moves its reference point to the center, which the left-column undoes.
-% The center-column also aligns its contented centered, which is not undone...
-#(define-public (format-time-fraction time-sig-fraction)
- (let* ((revargs (reverse (map number->string time-sig-fraction)))
- (den (car revargs))
- (nums (reverse (cdr revargs))))
- (make-override-markup '(baseline-skip . 0)
- (make-number-markup
- (make-left-column-markup (list
- (make-center-column-markup (list
- (make-line-markup (insert-markups nums "+"))
- den))))))))
-
-#(define-public (format-complex-compound-time time-sig)
- (let* ((sigs (map format-time-fraction time-sig)))
- (make-override-markup '(baseline-skip . 0)
- (make-number-markup
- (make-line-markup
- (insert-markups sigs (make-vcenter-markup "+")))))))
-
-#(define-public (format-compound-time time-sig)
- (cond
- ((not (pair? time-sig)) (null-markup))
- ((pair? (car time-sig)) (format-complex-compound-time time-sig))
- (else (format-time-fraction time-sig))))
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Measure length calculation of (possibly complex) compound time signatures
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-#(define-public (calculate-time-fraction time-sig-fraction)
- (let* ((revargs (reverse time-sig-fraction))
- (den (car revargs))
- (nums (cdr revargs)))
- (ly:make-moment (apply + nums) den)))
-
-#(define-public (calculate-complex-compound-time time-sig)
- (let* ((sigs (map calculate-time-fraction time-sig)))
- (let add-moment ((moment ZERO-MOMENT)
- (remaining sigs))
- (if (pair? remaining)
- (add-moment (ly:moment-add moment (car remaining)) (cdr remaining))
- moment))))
-
-#(define-public (calculate-compound-measure-length time-sig)
- (cond
- ((not (pair? time-sig)) (ly:make-moment 4 4))
- ((pair? (car time-sig)) (calculate-complex-compound-time time-sig))
- (else (calculate-time-fraction time-sig))))
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Base beat lenth
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-#(define-public (calculate-compound-base-beat-full time-sig)
- (let* ((den (map last time-sig)))
- (apply max den)))
-
-#(define-public (calculate-compound-base-beat time-sig)
- (ly:make-moment 1 (cond
- ((not (pair? time-sig)) 4)
- ((pair? (car time-sig)) (calculate-compound-base-beat-full time-sig))
- (else (calculate-compound-base-beat-full (list time-sig))))))
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% The music function to set the complex time signature
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-compoundMeter =
-#(define-music-function (parser location args) (pair?)
- (let ((mlen (calculate-compound-measure-length args))
- (beat (calculate-compound-base-beat args)))
- #{
-\once \override Staff.TimeSignature #'stencil = #ly:text-interface::print
-\once \override Staff.TimeSignature #'text = #(format-compound-time $args)
-% \set Staff.beatGrouping = #(reverse (cdr (reverse $args)))
-\set Timing.measureLength = $mlen
-\set Timing.timeSignatureFraction = #(cons (ly:moment-main-numerator $mlen)
- (ly:moment-main-denominator $mlen))
-\set Timing.baseMoment = $beat
-
-% TODO: Implement beatGrouping and auto-beam-settings!!!
-#} ))
-"""
}
def round_to_two_digits (val):
return None
change = musicexp.TimeSignatureChange()
change.fractions = sig
- if (len(sig) != 2) or isinstance (sig[0], list):
- needed_additional_definitions.append ("compound-time-signature")
time_elm = attributes.get_maybe_exist_named_child ('time')
if time_elm and hasattr (time_elm, 'symbol'):