<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.lilypond.community/index.php?action=history&amp;feed=atom&amp;title=Keyboard_diagrams</id>
	<title>Keyboard diagrams - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.lilypond.community/index.php?action=history&amp;feed=atom&amp;title=Keyboard_diagrams"/>
	<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Keyboard_diagrams&amp;action=history"/>
	<updated>2026-05-10T01:00:23Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Keyboard_diagrams&amp;diff=4779&amp;oldid=prev</id>
		<title>Lemzwerg: New category</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Keyboard_diagrams&amp;diff=4779&amp;oldid=prev"/>
		<updated>2025-11-21T23:32:19Z</updated>

		<summary type="html">&lt;p&gt;New category&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:32, 21 November 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l244&quot;&gt;Line 244:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 244:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Instrument-specific]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Instrument-specific]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Keyboards]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Keyboards]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Scheme]][[Category:Snippet]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Scheme]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Snippet]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Keyboard_diagrams&amp;diff=3611&amp;oldid=prev</id>
		<title>Lemzwerg at 22:55, 21 November 2025</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Keyboard_diagrams&amp;diff=3611&amp;oldid=prev"/>
		<updated>2025-11-21T22:55:20Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:55, 21 November 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l244&quot;&gt;Line 244:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 244:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Instrument-specific]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Instrument-specific]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Keyboards]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Keyboards]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Scheme]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:Scheme&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]][[Category:Snippet&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Lemzwerg</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Keyboard_diagrams&amp;diff=2727&amp;oldid=prev</id>
		<title>Jean Abou Samra: Replace version=&quot;2.24.0&quot; with version=&quot;2.24&quot; now that the LilyWiki extension supports auto-selecting the latest release in a stable series</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Keyboard_diagrams&amp;diff=2727&amp;oldid=prev"/>
		<updated>2025-11-16T18:54:23Z</updated>

		<summary type="html">&lt;p&gt;Replace version=&amp;quot;2.24.0&amp;quot; with version=&amp;quot;2.24&amp;quot; now that the LilyWiki extension supports auto-selecting the latest release in a stable series&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 18:54, 16 November 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Functions to draw piano keys and piano keyboards&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Functions to draw piano keys and piano keyboards&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;lilypond version=&quot;2.24&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.0&lt;/del&gt;&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;lilypond version=&quot;2.24&quot;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;%------------------------------------------------------------&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;%------------------------------------------------------------&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;% list of enharmonic names of the same key, in various languages&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;% list of enharmonic names of the same key, in various languages&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Jean Abou Samra</name></author>
	</entry>
	<entry>
		<id>https://wiki.lilypond.community/index.php?title=Keyboard_diagrams&amp;diff=977&amp;oldid=prev</id>
		<title>Jean Abou Samra: Import snippet from LSR</title>
		<link rel="alternate" type="text/html" href="https://wiki.lilypond.community/index.php?title=Keyboard_diagrams&amp;diff=977&amp;oldid=prev"/>
		<updated>2025-10-26T22:51:24Z</updated>

		<summary type="html">&lt;p&gt;Import snippet from LSR&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Functions to draw piano keys and piano keyboards&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lilypond version=&amp;quot;2.24.0&amp;quot;&amp;gt;&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
% list of enharmonic names of the same key, in various languages&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
% IMPORTANT: do not change the first element of any of these lists&lt;br /&gt;
&lt;br /&gt;
enharmonic-c   = #&amp;#039;(&amp;quot;c&amp;quot; &amp;quot;bis&amp;quot; &amp;quot;deses&amp;quot; &amp;quot;his&amp;quot; &amp;quot;bs&amp;quot; &amp;quot;dff&amp;quot; &amp;quot;do&amp;quot; &amp;quot;sid&amp;quot; &amp;quot;rebb&amp;quot; &amp;quot;sis&amp;quot; &amp;quot;hiss&amp;quot; &amp;quot;dessess&amp;quot; &amp;quot;sik&amp;quot;)&lt;br /&gt;
enharmonic-cis = #&amp;#039;(&amp;quot;cis&amp;quot; &amp;quot;des&amp;quot; &amp;quot;bisis&amp;quot; &amp;quot;hisis&amp;quot; &amp;quot;cs&amp;quot; &amp;quot;df&amp;quot; &amp;quot;bss&amp;quot; &amp;quot;bx&amp;quot; &amp;quot;dod&amp;quot; &amp;quot;reb&amp;quot; &amp;quot;sidd&amp;quot; &amp;quot;dos&amp;quot; &amp;quot;siss&amp;quot; &amp;quot;ciss&amp;quot; &amp;quot;dess&amp;quot; &amp;quot;hississ&amp;quot; &amp;quot;dok&amp;quot; &amp;quot;sikk&amp;quot;)&lt;br /&gt;
enharmonic-d   = #&amp;#039;(&amp;quot;d&amp;quot; &amp;quot;cisis&amp;quot; &amp;quot;eses&amp;quot; &amp;quot;eeses&amp;quot; &amp;quot;css&amp;quot; &amp;quot;cx&amp;quot; &amp;quot;eff&amp;quot; &amp;quot;re&amp;quot; &amp;quot;dodd&amp;quot; &amp;quot;mibb&amp;quot; &amp;quot;doss&amp;quot; &amp;quot;cississ&amp;quot; &amp;quot;essess&amp;quot; &amp;quot;eessess&amp;quot; &amp;quot;dokk&amp;quot;)&lt;br /&gt;
enharmonic-dis = #&amp;#039;(&amp;quot;dis&amp;quot; &amp;quot;es&amp;quot; &amp;quot;ees&amp;quot; &amp;quot;feses&amp;quot; &amp;quot;ds&amp;quot; &amp;quot;ef&amp;quot; &amp;quot;fff&amp;quot; &amp;quot;red&amp;quot; &amp;quot;mib&amp;quot; &amp;quot;fabb&amp;quot; &amp;quot;res&amp;quot; &amp;quot;diss&amp;quot; &amp;quot;ess&amp;quot; &amp;quot;eess&amp;quot; &amp;quot;fessess&amp;quot; &amp;quot;rek&amp;quot;)&lt;br /&gt;
enharmonic-e   = #&amp;#039;(&amp;quot;e&amp;quot; &amp;quot;fes&amp;quot; &amp;quot;disis&amp;quot; &amp;quot;ff&amp;quot; &amp;quot;dss&amp;quot; &amp;quot;dx&amp;quot; &amp;quot;mi&amp;quot; &amp;quot;fab&amp;quot; &amp;quot;redd&amp;quot; &amp;quot;ress&amp;quot; &amp;quot;fess&amp;quot; &amp;quot;dississ&amp;quot; &amp;quot;rekk&amp;quot;)&lt;br /&gt;
enharmonic-f   = #&amp;#039;(&amp;quot;f&amp;quot; &amp;quot;eis&amp;quot; &amp;quot;geses&amp;quot; &amp;quot;gff&amp;quot; &amp;quot;fa&amp;quot; &amp;quot;mid&amp;quot; &amp;quot;solbb&amp;quot; &amp;quot;mis&amp;quot; &amp;quot;eiss&amp;quot; &amp;quot;gessess&amp;quot; &amp;quot;mik&amp;quot;)&lt;br /&gt;
enharmonic-fis = #&amp;#039;(&amp;quot;fis&amp;quot; &amp;quot;ges&amp;quot; &amp;quot;eisis&amp;quot; &amp;quot;fs&amp;quot; &amp;quot;gf&amp;quot; &amp;quot;ess&amp;quot; &amp;quot;ex&amp;quot; &amp;quot;fad&amp;quot; &amp;quot;solb&amp;quot; &amp;quot;midd&amp;quot; &amp;quot;fas&amp;quot; &amp;quot;miss&amp;quot; &amp;quot;fiss&amp;quot; &amp;quot;gess&amp;quot; &amp;quot;eississ&amp;quot; &amp;quot;fak&amp;quot; &amp;quot;mikk&amp;quot;)&lt;br /&gt;
enharmonic-g   = #&amp;#039;(&amp;quot;g&amp;quot; &amp;quot;ases&amp;quot; &amp;quot;fisis&amp;quot; &amp;quot;aeses&amp;quot; &amp;quot;fss&amp;quot; &amp;quot;fx&amp;quot; &amp;quot;aff&amp;quot; &amp;quot;sol&amp;quot; &amp;quot;fadd&amp;quot; &amp;quot;labb&amp;quot; &amp;quot;fass&amp;quot; &amp;quot;assess&amp;quot; &amp;quot;fississ&amp;quot; &amp;quot;aessess&amp;quot; &amp;quot;fakk&amp;quot;)&lt;br /&gt;
enharmonic-gis = #&amp;#039;(&amp;quot;gis&amp;quot; &amp;quot;as&amp;quot; &amp;quot;aes&amp;quot; &amp;quot;gs&amp;quot; &amp;quot;af&amp;quot; &amp;quot;sold&amp;quot; &amp;quot;lab&amp;quot; &amp;quot;sols&amp;quot; &amp;quot;giss&amp;quot; &amp;quot;aess&amp;quot; &amp;quot;solk&amp;quot;)&lt;br /&gt;
enharmonic-a   = #&amp;#039;(&amp;quot;a&amp;quot; &amp;quot;gisis&amp;quot; &amp;quot;beses&amp;quot; &amp;quot;gss&amp;quot; &amp;quot;gx&amp;quot; &amp;quot;bff&amp;quot; &amp;quot;la&amp;quot; &amp;quot;soldd&amp;quot; &amp;quot;sibb&amp;quot; &amp;quot;solss&amp;quot; &amp;quot;gississ&amp;quot; &amp;quot;solkk&amp;quot;)&lt;br /&gt;
enharmonic-ais = #&amp;#039;(&amp;quot;ais&amp;quot; &amp;quot;bes&amp;quot; &amp;quot;ceses&amp;quot; &amp;quot;as&amp;quot; &amp;quot;bf&amp;quot; &amp;quot;cff&amp;quot; &amp;quot;sib&amp;quot; &amp;quot;lad&amp;quot; &amp;quot;dobb&amp;quot; &amp;quot;las&amp;quot; &amp;quot;aiss&amp;quot; &amp;quot;cessess&amp;quot; &amp;quot;lak&amp;quot;)&lt;br /&gt;
enharmonic-b   = #&amp;#039;(&amp;quot;b&amp;quot; &amp;quot;ces&amp;quot; &amp;quot;aisis&amp;quot; &amp;quot;h&amp;quot; &amp;quot;cf&amp;quot; &amp;quot;ass&amp;quot; &amp;quot;ax&amp;quot; &amp;quot;si&amp;quot; &amp;quot;dob&amp;quot; &amp;quot;ladd&amp;quot; &amp;quot;lass&amp;quot; &amp;quot;aississ&amp;quot; &amp;quot;cess&amp;quot; &amp;quot;lakk&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
% to enter english &amp;quot;es&amp;quot; (e sharp) must set english-notename to #t&lt;br /&gt;
% to enter german &amp;quot;bes&amp;quot; (b double flat) must set german-notename to #t&lt;br /&gt;
% to enter german &amp;quot;b&amp;quot; (b flat) must set german-notename to #t&lt;br /&gt;
&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
% markup commands definitions&lt;br /&gt;
%------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#(define-markup-command (piano-key layout props key-name) (markup?)&lt;br /&gt;
   #:properties ((bottom-padding 0)&lt;br /&gt;
                 ; all key dimensions are proportional to this variable&lt;br /&gt;
                 (white-key-base 7)&lt;br /&gt;
                 ; if german or english notenames are used, this variable has to be overriden&lt;br /&gt;
                 (german-notenames #f)&lt;br /&gt;
                 (english-notenames #f)&lt;br /&gt;
                 (is-first?  #f)&lt;br /&gt;
                 (is-last?  #f)&lt;br /&gt;
                 (is-marked? #f)&lt;br /&gt;
                 (is-upmarked? #f))&lt;br /&gt;
   &amp;quot;Draw a piano key, depending on his name&lt;br /&gt;
   usage:&lt;br /&gt;
   \\piano-key key-name (note name)&lt;br /&gt;
   example:&lt;br /&gt;
   \\piano-key c&lt;br /&gt;
   or:&lt;br /&gt;
   \\override #&amp;#039;(white-key-base . 5)&lt;br /&gt;
   \\concat \\piano-key {c des d es e f}&lt;br /&gt;
   or:&lt;br /&gt;
   \\override #&amp;#039;(german-notenames . #f)&lt;br /&gt;
   \\concat \\piano-key {bes b h c}&lt;br /&gt;
   if the notename begin with \&amp;quot;*\&amp;quot;, the key will be marked&lt;br /&gt;
   \\concat \\piano-key {*c cis d dis *e f fis *g }&lt;br /&gt;
   if the notename begin with \&amp;quot;^\&amp;quot;, the key will be upmarked&lt;br /&gt;
   \\concat \\piano-key {*c cis d dis *e f fis *g }&lt;br /&gt;
   key names must be in order to get a correct piano keyboard&lt;br /&gt;
   &amp;quot;&lt;br /&gt;
   (interpret-markup layout props&lt;br /&gt;
     ; base dimension of key&lt;br /&gt;
     (let ((base (exact-&amp;gt;inexact white-key-base)))   ;to send variables to postscript, this has to be inexact&lt;br /&gt;
       ; if the notename begin with &amp;quot;*&amp;quot; the key will be marked&lt;br /&gt;
       (if (char=? (string-ref key-name 0) #\*)&lt;br /&gt;
           (begin&lt;br /&gt;
            (set! key-name (substring key-name 1 (string-length key-name)))&lt;br /&gt;
            (set! is-marked? #t)))&lt;br /&gt;
       ; if the notename begin with &amp;quot;^&amp;quot; the key will be upmarked&lt;br /&gt;
       (if (char=? (string-ref key-name 0) #\^)&lt;br /&gt;
           (begin&lt;br /&gt;
            (set! key-name (substring key-name 1 (string-length key-name)))&lt;br /&gt;
            (set! is-marked? #t)&lt;br /&gt;
            (set! is-upmarked? #t)))&lt;br /&gt;
       ; german and english notenames substitutions&lt;br /&gt;
       (if german-notenames (cond&lt;br /&gt;
                             ((equal? key-name &amp;quot;bes&amp;quot;) (set! key-name &amp;quot;beses&amp;quot;))&lt;br /&gt;
                             ((equal? key-name &amp;quot;b&amp;quot;) (set! key-name &amp;quot;bes&amp;quot;))))&lt;br /&gt;
       (if (and english-notenames (equal? key-name &amp;quot;es&amp;quot;)) (set! key-name &amp;quot;dis&amp;quot;))&lt;br /&gt;
       (let ((is-white? ; is a white key?&lt;br /&gt;
               (list?&lt;br /&gt;
                (member key-name&lt;br /&gt;
                  (append enharmonic-c enharmonic-d enharmonic-e&lt;br /&gt;
                    enharmonic-f enharmonic-g enharmonic-a enharmonic-b))))&lt;br /&gt;
             (is-black? ; is black key?&lt;br /&gt;
               (list?&lt;br /&gt;
                (member key-name&lt;br /&gt;
                  (append enharmonic-cis enharmonic-dis&lt;br /&gt;
                    enharmonic-fis enharmonic-gis enharmonic-ais))))&lt;br /&gt;
             (head ; head dimension of key&lt;br /&gt;
               (cond&lt;br /&gt;
                ; for keys from c to e (white or black)&lt;br /&gt;
                ((list? (member key-name (append enharmonic-c enharmonic-cis&lt;br /&gt;
                                           enharmonic-d enharmonic-dis enharmonic-e)))&lt;br /&gt;
                 (* base 3/5))&lt;br /&gt;
                ; for keys from f to b (white or black)&lt;br /&gt;
                ((list? (member key-name (append enharmonic-f enharmonic-fis enharmonic-g&lt;br /&gt;
                                           enharmonic-gis enharmonic-a enharmonic-ais enharmonic-b)))&lt;br /&gt;
                 (* base 4/7))&lt;br /&gt;
                (else 0)))&lt;br /&gt;
             (s-left ; left shoulder dimension of key&lt;br /&gt;
               (cond&lt;br /&gt;
                ((list? (member key-name enharmonic-c)) 0)&lt;br /&gt;
                ((list? (member key-name enharmonic-d)) (* base 1/5))&lt;br /&gt;
                ((list? (member key-name enharmonic-e)) (* base 2/5))&lt;br /&gt;
                ((list? (member key-name enharmonic-f)) 0)&lt;br /&gt;
                ((list? (member key-name enharmonic-g)) (* base 1/7))&lt;br /&gt;
                ((list? (member key-name enharmonic-a)) (* base 2/7))&lt;br /&gt;
                ((list? (member key-name enharmonic-b)) (* base 3/7))&lt;br /&gt;
                (else 0)))&lt;br /&gt;
             (neck (* base 3)) ; neck dimension of key&lt;br /&gt;
             )&lt;br /&gt;
         (let ((s-right (if is-white? (- base s-left head) 0 )) ;right shoulder dimension of key&lt;br /&gt;
                (foot (if is-white? (* base 2) 0))) ; foot dimension of key&lt;br /&gt;
           #{\markup \column {&lt;br /&gt;
             \concat {&lt;br /&gt;
               \postscript #(string-append ;variables are sent to postscript&lt;br /&gt;
                              &amp;quot;/base &amp;quot; (number-&amp;gt;string base) &amp;quot; def&amp;quot;&lt;br /&gt;
                              &amp;quot;/head &amp;quot; (number-&amp;gt;string head) &amp;quot; def&amp;quot;&lt;br /&gt;
                              &amp;quot;/foot &amp;quot; (number-&amp;gt;string foot) &amp;quot; def&amp;quot;&lt;br /&gt;
                              &amp;quot;/neck &amp;quot; (number-&amp;gt;string neck) &amp;quot; def&amp;quot;&lt;br /&gt;
                              &amp;quot;/s-left &amp;quot; (number-&amp;gt;string s-left) &amp;quot; def&amp;quot;&lt;br /&gt;
                              &amp;quot;/s-right &amp;quot; (number-&amp;gt;string s-right) &amp;quot; def&amp;quot;&lt;br /&gt;
                              &amp;quot;/radius base 5 div def&amp;quot;&lt;br /&gt;
                              &amp;quot; 0 neck neg rlineto&amp;quot;&lt;br /&gt;
                              (if is-first? &amp;quot;&amp;quot; &amp;quot; s-left neg 0 rlineto&amp;quot;)&lt;br /&gt;
                              &amp;quot; 0 foot neg rlineto&amp;quot;&lt;br /&gt;
                              &amp;quot; s-left head s-right add add 0 rlineto&amp;quot; ;base of key&lt;br /&gt;
                              &amp;quot; 0 foot rlineto&amp;quot;&lt;br /&gt;
                              (if is-last? &amp;quot;&amp;quot; &amp;quot; s-right neg 0 rlineto&amp;quot;)&lt;br /&gt;
                              &amp;quot; 0 neck rlineto&amp;quot;&lt;br /&gt;
                              &amp;quot; closepath&amp;quot;&lt;br /&gt;
                              (if is-black? &amp;quot; gsave fill grestore&amp;quot; &amp;quot;&amp;quot;)&lt;br /&gt;
                              &amp;quot; stroke&amp;quot;&lt;br /&gt;
                              (if is-marked? (string-append&lt;br /&gt;
                                              &amp;quot; head s-right add s-left sub 2 div&amp;quot;&lt;br /&gt;
                                              &amp;quot; neck foot add base&amp;quot;&lt;br /&gt;
                                              (if is-upmarked? &amp;quot; .7&amp;quot; &amp;quot; 2&amp;quot;)&lt;br /&gt;
                                              &amp;quot; div sub neg&amp;quot;&lt;br /&gt;
                                              &amp;quot; radius&amp;quot;&lt;br /&gt;
                                              &amp;quot; 0 360 arc&amp;quot;&lt;br /&gt;
                                              &amp;quot; closepath&amp;quot;&lt;br /&gt;
                                              &amp;quot; gsave&amp;quot;&lt;br /&gt;
                                              &amp;quot; 0.7 setgray&amp;quot;&lt;br /&gt;
                                              &amp;quot; fill&amp;quot;&lt;br /&gt;
                                              &amp;quot; grestore&amp;quot;&lt;br /&gt;
                                              &amp;quot; stroke &amp;quot;)&lt;br /&gt;
                                  &amp;quot;&amp;quot;)&lt;br /&gt;
                              )&lt;br /&gt;
               \hspace #(+&lt;br /&gt;
                         head&lt;br /&gt;
                         (if is-first? s-left 0)&lt;br /&gt;
                         (if is-last? s-right 0))&lt;br /&gt;
             }&lt;br /&gt;
             \vspace #(if&lt;br /&gt;
                       (or is-black? is-white?)&lt;br /&gt;
                       (+ bottom-padding(/(+ neck foot)3))&lt;br /&gt;
                       0)&lt;br /&gt;
             }&lt;br /&gt;
           #})))))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#(define-markup-command (keyboard layout props start-key number) (markup? number?)&lt;br /&gt;
   #:properties (&lt;br /&gt;
                  ; if german notenames are used, this variable has to be overriden&lt;br /&gt;
                  (english-notenames #f)&lt;br /&gt;
                  (german-notenames #f))&lt;br /&gt;
   &amp;quot;Draw a piano keyboard&lt;br /&gt;
   usage:&lt;br /&gt;
   \\keyboard start-key (note name) length (number)&lt;br /&gt;
   example:&lt;br /&gt;
   \\keyboard c #24&lt;br /&gt;
   or:&lt;br /&gt;
   \\override #&amp;#039;(white-key-base . 3)&lt;br /&gt;
   \\override #&amp;#039;(german-notenames . #t)&lt;br /&gt;
   \\keyboard b #36&lt;br /&gt;
   &amp;quot;&lt;br /&gt;
   (interpret-markup layout props&lt;br /&gt;
     (let ((one-octave &amp;#039;(&amp;quot;c&amp;quot; &amp;quot;cis&amp;quot; &amp;quot;d&amp;quot; &amp;quot;dis&amp;quot; &amp;quot;e&amp;quot; &amp;quot;f&amp;quot; &amp;quot;fis&amp;quot; &amp;quot;g&amp;quot; &amp;quot;gis&amp;quot; &amp;quot;a&amp;quot; &amp;quot;ais&amp;quot; &amp;quot;b&amp;quot;)))&lt;br /&gt;
       (let ((many-octaves (append one-octave one-octave one-octave one-octave one-octave one-octave one-octave one-octave one-octave one-octave)))&lt;br /&gt;
         ; german notenames substitutions&lt;br /&gt;
         (if german-notenames (cond&lt;br /&gt;
                               ((equal? start-key &amp;quot;bes&amp;quot;) (set! start-key &amp;quot;beses&amp;quot;))&lt;br /&gt;
                               ((equal? start-key &amp;quot;b&amp;quot;) (set! start-key &amp;quot;bes&amp;quot;))))&lt;br /&gt;
         (if (and english-notenames (equal? key-name &amp;quot;es&amp;quot;)) (set! key-name &amp;quot;dis&amp;quot;))&lt;br /&gt;
         (cond&lt;br /&gt;
          ((list? (member start-key enharmonic-c  )) (set! start-key (car enharmonic-c  )))&lt;br /&gt;
          ((list? (member start-key enharmonic-cis)) (set! start-key (car enharmonic-cis)))&lt;br /&gt;
          ((list? (member start-key enharmonic-d  )) (set! start-key (car enharmonic-d  )))&lt;br /&gt;
          ((list? (member start-key enharmonic-dis)) (set! start-key (car enharmonic-dis)))&lt;br /&gt;
          ((list? (member start-key enharmonic-e  )) (set! start-key (car enharmonic-e  )))&lt;br /&gt;
          ((list? (member start-key enharmonic-f  )) (set! start-key (car enharmonic-f  )))&lt;br /&gt;
          ((list? (member start-key enharmonic-fis)) (set! start-key (car enharmonic-fis)))&lt;br /&gt;
          ((list? (member start-key enharmonic-g  )) (set! start-key (car enharmonic-g  )))&lt;br /&gt;
          ((list? (member start-key enharmonic-gis)) (set! start-key (car enharmonic-gis)))&lt;br /&gt;
          ((list? (member start-key enharmonic-a  )) (set! start-key (car enharmonic-a  )))&lt;br /&gt;
          ((list? (member start-key enharmonic-ais)) (set! start-key (car enharmonic-ais)))&lt;br /&gt;
          ((list? (member start-key enharmonic-b  )) (set! start-key (car enharmonic-b  )))&lt;br /&gt;
          )&lt;br /&gt;
         (let ((start-list (member start-key many-octaves)))&lt;br /&gt;
           (let ((complete-list (reverse (list-tail (reverse start-list) (- (length start-list) number)))))&lt;br /&gt;
             (let ((first-key (car complete-list))&lt;br /&gt;
                   (last-key (car (reverse complete-list)))&lt;br /&gt;
                   (trunked-list (cdr (reverse (cdr (reverse complete-list))))))&lt;br /&gt;
               #{\markup&lt;br /&gt;
                 % at this point german or english notenames modifies have already been set,&lt;br /&gt;
                 % so the variable is set to false&lt;br /&gt;
                 \override #&amp;#039;(german-notenames . #f)&lt;br /&gt;
                 \override #&amp;#039;(english-notenames . #f)&lt;br /&gt;
                 \concat {&lt;br /&gt;
                   \override #&amp;#039;(is-first? . #t) \piano-key #first-key&lt;br /&gt;
                   \piano-key #trunked-list&lt;br /&gt;
                   \override #&amp;#039;(is-last? . #t) \piano-key #last-key&lt;br /&gt;
                 }&lt;br /&gt;
               #}&lt;br /&gt;
               )))))))&lt;br /&gt;
&lt;br /&gt;
\markup \center-column{&lt;br /&gt;
  &amp;quot;GrandPiano keyboard&amp;quot;&lt;br /&gt;
  \override #&amp;#039;(white-key-base . 2)&lt;br /&gt;
  \keyboard a #88&lt;br /&gt;
  \vspace #1&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;standard 41 keys Accordion&amp;quot;&lt;br /&gt;
  \override #&amp;#039;(white-key-base . 3)&lt;br /&gt;
  \keyboard f #41&lt;br /&gt;
  \vspace #1&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;26 keys Accordion&amp;quot;&lt;br /&gt;
  \override #&amp;#039;(white-key-base . 4)&lt;br /&gt;
  \keyboard b #26&lt;br /&gt;
&lt;br /&gt;
  \vspace #1&lt;br /&gt;
  &amp;quot;keys marked for didactic purpose&amp;quot;&lt;br /&gt;
  \concat{&lt;br /&gt;
    \piano-key {*b c *cis d *dis *e f *fis g *gis a *ais *b}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  \vspace #1&lt;br /&gt;
  \concat{&lt;br /&gt;
    \piano-key {*c cis ^d dis ^e *f fis ^g gis ^a ais ^b *c}&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lilypond&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Instrument-specific]]&lt;br /&gt;
[[Category:Keyboards]]&lt;br /&gt;
[[Category:Scheme]]&lt;/div&gt;</summary>
		<author><name>Jean Abou Samra</name></author>
	</entry>
</feed>