「VexFlow 調号」の版間の差分

提供:yonewiki
 
(同じ利用者による、間の16版が非表示)
82行目: 82行目:


<syntaxhighlight lang="JavaScript" line start="1">
<syntaxhighlight lang="JavaScript" line start="1">
<script src="https://wiki.yo-net.jp/vexflow/build/cjs/vexflow.js"></script>
<div id="yonet202302_Output01"></div>
<div id="yonet202302_Output01"></div>
<script>
<script>
135行目: 136行目:


 次にフラットでの表記です。
 次にフラットでの表記です。


== '''フラット系 ♭''' ==
== '''フラット系 ♭''' ==
305行目: 305行目:
</table>
</table>


 


'''■フラット系'''
'''■フラット系'''
366行目: 367行目:
</table>
</table>


記号無しはハ長調、イ短調
 


== '''ヘ音記号のシャープ系 #''' ==
== '''ヘ音記号のシャープ系 #''' ==
600行目: 605行目:
   const stave1 = new Stave(10, 50, 300).setContext(ctx).draw();
   const stave1 = new Stave(10, 50, 300).setContext(ctx).draw();
   stave1.addClef("treble").setContext(ctx).draw();
   stave1.addClef("treble").setContext(ctx).draw();
//  stave1.setBegBarType(4);
//  stave1.setBegBarType(0);
//  stave1.setEndBarType(5);
//  stave1.setEndBarType(5);
   stave1.addKeySignature('G', 'D').setContext(ctx).draw();
   stave1.addKeySignature('G', 'D').setContext(ctx).draw();
611行目: 616行目:


<syntaxhighlight lang="JavaScript" line start="1">
<syntaxhighlight lang="JavaScript" line start="1">
<div id="yonet202302_Output05"></div>
<script>
(function(){
  const {
    Factory,
    Stave,
  } = Vex.Flow;
  const f = new Factory({ renderer: { elementId: 'yonet202302_Output05', width: 1500, height: 200 } });
  const ctx = f.getContext();
  const stave1 = new Stave(10, 50, 300).setContext(ctx).draw();
  stave1.addClef("treble").setContext(ctx).draw();
  stave1.addKeySignature('G', 'D').setContext(ctx).draw();
  stave1.addTimeSignature('4/4').setContext(ctx).draw();
  stave1.setEndKeySignature('D').setContext(ctx).draw();
})();
</script>
</syntaxhighlight>
</syntaxhighlight>
 最後から2行目の setEndKeySignature関数を使うと末尾に調号を付与できます。
 


== '''特殊な表記''' ==
== '''特殊な表記(微分音)''' ==
 シャープやフラットには、特殊な表記があります。一般的なのはダブルシャープやダブルフラットまでだと思いますが、あまりみかけない特殊な表記に8分の1音上げ、4分の1音上げ、8分の3音上げ、半音上げ、8分の5音上げ、4/分の3音上げ、8分の7音上げ、そして、そのフラット版、更には3分法の6分の1音上げ、3分の1音上げ、3分の2音上げ、6分の5音上げとそのフラット版があります。♭の場合、フラットの旗にトレモロ記号のようなものをつけたり、フラットマークを逆さにしたり下矢印を付けたりします。#の場合は縦棒を一つにしたり3つにしたり、上矢印をつけたりします。VexFlowでは4分の1と4分の3の表記はできるようになっています。このような特殊な表記は使わないので、覚えなくても、使い方がわからなくても影響ない。
 シャープやフラットには、特殊な表記があります。一般的なのはダブルシャープやダブルフラットまでだと思いますが、あまりみかけない特殊な表記に8分の1音上げ、4分の1音上げ、8分の3音上げ、半音上げ、8分の5音上げ、4/分の3音上げ、8分の7音上げ、そして、そのフラット版、更には3分法の6分の1音上げ、3分の1音上げ、3分の2音上げ、6分の5音上げとそのフラット版があります。♭の場合、フラットの旗にトレモロ記号のようなものをつけたり、フラットマークを逆さにしたり下矢印を付けたりします。#の場合は縦棒を一つにしたり3つにしたり、上矢印をつけたりします。VexFlowでは4分の1と4分の3の表記はできるようになっています。このような特殊な表記は使わないので、覚えなくても、使い方がわからなくても影響ない。


630行目: 655行目:
   } = Vex.Flow;
   } = Vex.Flow;


   const f = new Factory({ renderer: { elementId: 'yonet202302_Output06', width: 1500, height: 600 } });
   const f = new Factory({ renderer: { elementId: 'yonet202302_Output06', width: 1500, height: 400 } });
   const ctx = f.getContext();
   const ctx = f.getContext();
   const stave1 = new Stave(10, 50, 300).setContext(ctx).draw();
   const stave1 = new Stave(10, 50, 300).setContext(ctx).draw();
670行目: 695行目:
   const stave5 = new Stave(330, 250, 300).setContext(ctx).draw();
   const stave5 = new Stave(330, 250, 300).setContext(ctx).draw();
   stave5.addClef("treble").setContext(ctx).draw();
   stave5.addClef("treble").setContext(ctx).draw();
   let KeySig5 = new KeySignature('d');
   let KeySig5 = new KeySignature('D');
   KeySig5.alterKey(['o', 'k']);
   KeySig5.alterKey(['o', 'k']);
   KeySig5.setPadding(18);
   KeySig5.setPadding(18);
680行目: 705行目:




<syntaxhighlight lang="JavaScript" line start="1">
<div id="yonet202302_Output06"></div>
<script>
(function(){
  const {
    Factory,
    Stave,
    KeySignature,
  } = Vex.Flow;
  const f = new Factory({ renderer: { elementId: 'yonet202302_Output06', width: 1500, height: 400 } });
  const ctx = f.getContext();
  const stave1 = new Stave(10, 50, 300).setContext(ctx).draw();
  stave1.addClef("treble").setContext(ctx).draw();
  let KeySig1 = new KeySignature('Cb');
  KeySig1.alterKey(['d', 'd', 'd', 'd', 'd', 'd', 'd']);
  KeySig1.setPadding(18);
  KeySig1.addToStave(stave1);
  stave1.setContext(ctx).draw();
  stave1.addTimeSignature('4/4').setContext(ctx).draw();
  const stave2 = new Stave(330, 50, 300).setContext(ctx).draw();
  stave2.addClef("treble").setContext(ctx).draw();
  let KeySig2 = new KeySignature('Cb');
  KeySig2.alterKey(['db', 'db', 'db', 'db', 'db', 'db', 'db']);
  KeySig2.setPadding(18);
  KeySig2.addToStave(stave2);
  stave2.setContext(ctx).draw();
  stave2.addTimeSignature('4/4').setContext(ctx).draw();
  const stave3 = new Stave(650, 50, 300).setContext(ctx).draw();
  stave3.addClef("treble").setContext(ctx).draw();
  let KeySig3 = new KeySignature('C#');
  KeySig3.alterKey(['+', '+', '+', '+', '+', '+', '+']);
  KeySig3.setPadding(18);
  KeySig3.addToStave(stave3);
  stave3.setContext(ctx).draw();
  stave3.addTimeSignature('4/4').setContext(ctx).draw();
  const stave4 = new Stave(10, 250, 300).setContext(ctx).draw();
  stave4.addClef("treble").setContext(ctx).draw();
  let KeySig4 = new KeySignature('C#');
  KeySig4.alterKey(['++', '++', '++', '++', '++', '++', '++']);
  KeySig4.setPadding(18);
  KeySig4.addToStave(stave4);
  stave4.setContext(ctx).draw();
  stave4.addTimeSignature('4/4').setContext(ctx).draw();
  const stave5 = new Stave(330, 250, 300).setContext(ctx).draw();
  stave5.addClef("treble").setContext(ctx).draw();
  let KeySig5 = new KeySignature('D');
  KeySig5.alterKey(['o', 'k']);
  KeySig5.setPadding(18);
  KeySig5.addToStave(stave5);
  stave5.setContext(ctx).draw();
  stave5.addTimeSignature('4/4').setContext(ctx).draw();
})();
</script>
</syntaxhighlight>
 一番左上から右へ、右端にいったら一段下の左端へ、そしてまた右へという順で4分の1音下げ、4分の3音下げ、4分の1音上げ、4分の3音上げと指定しました。3分6分系と8分系の記号を適用する方法はVexFlowには無いみたいです。最後は o と k という指定をした場合の表記です。
 調べてみたんですけど、フラットやシャープの旗にスラッシュがつく感じの(++-、+-、+、d、bs、bss)はアラビア音階で使われるものらしく、フラットの左右反転だと9分の1音下げ、スラッシュが1つだと9分の4音下げがスラッシュが二つつくと9分の8音下げです。9分の5音下げが、通常のフラットの扱いになるそうです。反対から9分の4音上げが、シャープになるそうで、縦一本の半シャープが9分1音上げ、縦一本の半シャープにスラッシュ一つが9分5音上げ、シャープにスラッシュ一本をいれたものが9分の8音上げという対応です。oで表示される記号はソリという名前で半シャープと同じ意味だそうです。kはコロンといって左右反転フラットと同じ意味になるそうです。アラビア音階の場合は楽譜のどこかで指示しておかないとわからないかもしれませんね。3分6分系と8分系を表す記号がヘルエリノーテーションという体系で、もっとこまかい指示のサジタルノーテーションというものがあるそうです。サジタルノーテーションのどうでもよさげなことにまで対応しておきながらヘルエリノーテーションを対応していないVexFlow。不思議だわ。
*[https://note.com/nayuta_823543/n/ndc3d1364e6ba ヘルエリノーテーション・サジタルノーテーションについて説明のあるサイト]
*[https://swarajmusic.com/2021/10/07/%E3%82%A2%E3%83%A9%E3%83%93%E3%82%A2%E9%9F%B3%E9%9A%8E%E3%80%80%E9%9F%B3%E6%A5%BD%E5%A5%BD%E3%81%8D%E3%81%AA%E3%82%89%E7%9F%A5%E3%82%89%E3%81%AA%E3%81%84%E3%81%A8%E3%83%A4%E3%83%90%E3%81%84%E5%BE%AE/ アラビア音階について説明のあるサイト]
6項目め以降がサジタルノーテーション系記号
<table style="border: 0; border-collapse: collapse;">
<table style="border: 0; border-collapse: collapse;">
<tr border="0" style="color: white; background-color:#666666; font-weight: bolder;">
<tr border="0" style="color: white; background-color:#666666; font-weight: bolder;">
686行目: 783行目:
<tr>
<tr>
   <td>accSagittal5v7KleismaUp</td>
   <td>accSagittal5v7KleismaUp</td>
</tr>
<tr style="background-color: #cccccc;">
  <td>bbs</td>
</tr>
<tr>
  <td>bs</td>
</tr>
<tr style="background-color: #cccccc;">
  <td>+-</td>
</tr>
<tr>
  <td>++-</td>
</tr>
</tr>
<tr style="background-color: #cccccc;">
<tr style="background-color: #cccccc;">

2023年2月20日 (月) 08:10時点における最新版

VexFlow 使い方に戻る。

概要

 調号とは、五線譜の音部記号の次に記述される符号で、拍子記号がある場合は、音部記号と拍子記号の間に記述します。調号はシャープ#(これは実際には情報技術用語のハッシュです。シャープは縦の線がまっすぐになります。このように ♯。ですが、便宜上、ここでもシャープとして扱います。) あるいはフラット♭をまとめて記述することで、構成されます。#や♭は適当に配置されるものではなく、#や♭が増えて配置される法則があります。


 #はファ→ド→ソ→レ→ラ→ミ→シの順に増えます。♭はシ→ミ→ラ→レ→ソ→ド→ファの順に増えます。※音部記号がト音記号の場合です。この調号によってキーというものが決まります。以下、特段、ことわりがなければ、ドが C を表す場合を想定して記述します。


 音階とは、ドレミファソラシド(日本名でハニホヘトイロハ)の間隔のように、全音、全音、半音、全音、全音、全音、半音になっています。1オクターブは12分割できて、その内の7つを選ぶ場合に自然に聞こえる間隔になっています。ドから始まる音階は長調になります。明るい音階です。逆に自然に聞こえる間隔ですが、ラか始まる音階、ラシドレミファソラ(日本名でイロハニホヘトイ)は暗い音階で短調と呼ばれています。短調の間隔は全音、半音、全音、全音、半音、全音、全音となっています。どこから始めるかだけの違いで、長調と短調が存在しています。


 シャープもフラットもない調号のない音階はハ(Do-C)長調(C Major)で、イ(La-A)短調(A Minor)のどちらかです。主にどこから始めるかだけで調子は変わります。それに似合う和音をつけると、あからさまに長調と短調の違いが発生します。より長調と短調の違いがくっきりします。その意味でどこから始めるかだけのモノですが、曲としては伴奏に和音が採用されれば、長調と短調はしっかり分けられます。


 では、#をひとつつけるとどうなるか。ド レ ミ ファ# ソ ラ シ ドですから、全音、全音、全音、半音、全音、全音、半音となります。この構成で長調になる音階はソから始まる音階ト長調(G Major)です。短調になるのはミから始まる音階ホ短調(E Minor)です。


 調号は、このように全音、全音、半音、全音、全音、全音、半音になる調子の始まりの音の名前によって名前が付いています。半音12音でオクターブになるため、11種類あります。#がひとつ増えるごとの名前とフラットが一つ増えるごとの名前があるということです。#5個は ♭7個と同じ調子、#6個は ♭6個と同じ調子、#7個は ♭5個と同じ調子です。かすかにどっちよりの調子で使われるかによって名前だけが変わる感じです。


 仕組みはわかったと思いますが、直感的に調号の名前を導き出すのには、時間がかかると思います。覚え方は最後の#の位置の半音上の名前が調号の名前です。半音上に#がついていれば、それも含めた名前です。#6個と#7個のときだけ更に半音上の名前になる感じです。♭のときは最後の♭の位置をファと仮定してファミレドと数えて下がったドに対応するところの音の名前が調号の名前になります。♭がついてるところになることが多く、その場合は♭の分も含めて表現した名前になります。♭が2個以上になると全てそのようになります。日本語だと#は嬰(えい)、♭は変(へん)をつけます。


 ここまでの基礎的なことをわかった上でなら調号は使いやすくなったと思います。さっそく描いてみましょう。ト音記号以外につけるときもややこしいですが、できるようになると思います。


シャープ系 #


<script src="https://wiki.yo-net.jp/vexflow/build/cjs/vexflow.js"></script>
<div id="yonet202302_Output01"></div>
<script>
(function(){
  const {
    Factory,
    Stave,
  } = Vex.Flow;

  const f = new Factory({ renderer: { elementId: 'yonet202302_Output01', width: 1500, height: 600 } });
  const ctx = f.getContext();
  const stave1 = new Stave(10, 50, 200).setContext(ctx).draw();
  stave1.addClef("treble").setContext(ctx).draw();
  stave1.addKeySignature('G').setContext(ctx).draw();
  stave1.addTimeSignature('4/4').setContext(ctx).draw();

  const stave2 = new Stave(230, 50, 200).setContext(ctx).draw();
  stave2.addClef("treble").setContext(ctx).draw();
  stave2.addKeySignature('D').setContext(ctx).draw();
  stave2.addTimeSignature('4/4').setContext(ctx).draw();

  const stave3 = new Stave(450, 50, 200).setContext(ctx).draw();
  stave3.addClef("treble").setContext(ctx).draw();
  stave3.addKeySignature('A').setContext(ctx).draw();
  stave3.addTimeSignature('4/4').setContext(ctx).draw();

  const stave4 = new Stave(10, 250, 200).setContext(ctx).draw();
  stave4.addClef("treble").setContext(ctx).draw();
  stave4.addKeySignature('E').setContext(ctx).draw();
  stave4.addTimeSignature('4/4').setContext(ctx).draw();

  const stave5 = new Stave(230, 250, 200).setContext(ctx).draw();
  stave5.addClef("treble").setContext(ctx).draw();
  stave5.addKeySignature('B').setContext(ctx).draw();
  stave5.addTimeSignature('4/4').setContext(ctx).draw();

  const stave6 = new Stave(450, 250, 200).setContext(ctx).draw();
  stave6.addClef("treble").setContext(ctx).draw();
  stave6.addKeySignature('F#').setContext(ctx).draw();
  stave6.addTimeSignature('4/4').setContext(ctx).draw();

  const stave7 = new Stave(10, 450, 200).setContext(ctx).draw();
  stave7.addClef("treble").setContext(ctx).draw();
  stave7.addKeySignature('C#').setContext(ctx).draw();
  stave7.addTimeSignature('4/4').setContext(ctx).draw();
})();
</script>


 13行目にあるようなaddKeySignature()関数の引数に調号名を入れると、それにあわせた、シャープやフラットが描画されます。調号名称にシャープとフラットの7種類づつは重複はなく表せます。あえて言うなら、短調で表現もあるので、その表現を使えば2種類の名前が一つの状態をあらわしています。短調の名称は、すべてマイナーを意味する m を付けることで表現できます。まずは上記にシャープの7種類の調号を表記しました左上から左へ、右端にいったらひとつさがって一番左から右へという順番で、G→D→A→E→B→F#→C#という名称です。


 次にフラットでの表記です。

フラット系 ♭


<div id="yonet202302_Output02"></div>
<script>
(function(){
  const {
    Factory,
    Stave,
  } = Vex.Flow;

  const f = new Factory({ renderer: { elementId: 'yonet202302_Output02', width: 1500, height: 600 } });
  const ctx = f.getContext();
  const stave1 = new Stave(10, 50, 200).setContext(ctx).draw();
  stave1.addClef("treble").setContext(ctx).draw();
  stave1.addKeySignature('F').setContext(ctx).draw();
  stave1.addTimeSignature('4/4').setContext(ctx).draw();

  const stave2 = new Stave(230, 50, 200).setContext(ctx).draw();
  stave2.addClef("treble").setContext(ctx).draw();
  stave2.addKeySignature('Bb').setContext(ctx).draw();
  stave2.addTimeSignature('4/4').setContext(ctx).draw();

  const stave3 = new Stave(450, 50, 200).setContext(ctx).draw();
  stave3.addClef("treble").setContext(ctx).draw();
  stave3.addKeySignature('Eb').setContext(ctx).draw();
  stave3.addTimeSignature('4/4').setContext(ctx).draw();

  const stave4 = new Stave(10, 250, 200).setContext(ctx).draw();
  stave4.addClef("treble").setContext(ctx).draw();
  stave4.addKeySignature('Ab').setContext(ctx).draw();
  stave4.addTimeSignature('4/4').setContext(ctx).draw();

  const stave5 = new Stave(230, 250, 200).setContext(ctx).draw();
  stave5.addClef("treble").setContext(ctx).draw();
  stave5.addKeySignature('Db').setContext(ctx).draw();
  stave5.addTimeSignature('4/4').setContext(ctx).draw();

  const stave6 = new Stave(450, 250, 200).setContext(ctx).draw();
  stave6.addClef("treble").setContext(ctx).draw();
  stave6.addKeySignature('Gb').setContext(ctx).draw();
  stave6.addTimeSignature('4/4').setContext(ctx).draw();

  const stave7 = new Stave(10, 450, 200).setContext(ctx).draw();
  stave7.addClef("treble").setContext(ctx).draw();
  stave7.addKeySignature('Cb').setContext(ctx).draw();
  stave7.addTimeSignature('4/4').setContext(ctx).draw();
})();
</script>


 指定する値は次のような順になります。F→Bb→Eb→Ab→Db→Gb→Cbです。短調の表記指定するときも合わせて表にすると以下のようになります。


指定する値のまとめ

■シャープ系

♯の数 長調名   長調表記   短調名   短調表記  
1 ト長調 G ホ短調 Em
2 二長調 D ロ短調 Bm
3 イ長調 A 嬰へ短調 F#m
4 ホ長調 E 嬰ハ短調 C#m
5 ロ長調 B 嬰ト短調 G#m
6 嬰へ長調 F# 嬰二短調 D#m
7 嬰ハ長調 C# 嬰イ短調 A#m

 

■フラット系

♭の数 長調名   長調表記   短調名   短調表記  
1 へ長調 F 二短調 Dm
2 変ロ長調 Bb ト短調 Gm
3 変ホ長調 Eb ハ短調 Cm
4 変イ長調 Ab ヘ短調 Fm
5 変二長調 Db 変ロ短調 Bbm
6 変ト長調 Gb 変ホ短調 Ebm
7 変ハ長調 Cb 変イ短調 Abm


記号無しはハ長調、イ短調

 

ヘ音記号のシャープ系 #

 ト音記号をヘ音記号に変えると調号のために描かれる#の位置はずれます


<div id="yonet202302_Output03"></div>
<script>
(function(){
  const {
    Factory,
    Stave,
  } = Vex.Flow;

  const f = new Factory({ renderer: { elementId: 'yonet202302_Output03', width: 1500, height: 600 } });
  const ctx = f.getContext();
  const stave1 = new Stave(10, 50, 200).setContext(ctx).draw();
  stave1.addClef("bass").setContext(ctx).draw();
  stave1.addKeySignature('G').setContext(ctx).draw();
  stave1.addTimeSignature('4/4').setContext(ctx).draw();

  const stave2 = new Stave(230, 50, 200).setContext(ctx).draw();
  stave2.addClef("bass").setContext(ctx).draw();
  stave2.addKeySignature('D').setContext(ctx).draw();
  stave2.addTimeSignature('4/4').setContext(ctx).draw();

  const stave3 = new Stave(450, 50, 200).setContext(ctx).draw();
  stave3.addClef("bass").setContext(ctx).draw();
  stave3.addKeySignature('A').setContext(ctx).draw();
  stave3.addTimeSignature('4/4').setContext(ctx).draw();

  const stave4 = new Stave(10, 250, 200).setContext(ctx).draw();
  stave4.addClef("bass").setContext(ctx).draw();
  stave4.addKeySignature('E').setContext(ctx).draw();
  stave4.addTimeSignature('4/4').setContext(ctx).draw();

  const stave5 = new Stave(230, 250, 200).setContext(ctx).draw();
  stave5.addClef("bass").setContext(ctx).draw();
  stave5.addKeySignature('B').setContext(ctx).draw();
  stave5.addTimeSignature('4/4').setContext(ctx).draw();

  const stave6 = new Stave(450, 250, 200).setContext(ctx).draw();
  stave6.addClef("bass").setContext(ctx).draw();
  stave6.addKeySignature('F#').setContext(ctx).draw();
  stave6.addTimeSignature('4/4').setContext(ctx).draw();

  const stave7 = new Stave(10, 450, 200).setContext(ctx).draw();
  stave7.addClef("bass").setContext(ctx).draw();
  stave7.addKeySignature('C#').setContext(ctx).draw();
  stave7.addTimeSignature('4/4').setContext(ctx).draw();
})();
</script>


 上記のように、addClefの引数値を変更するだけで、調号の位置は追従されます。


前の調号を取り消す調号

 調号が変化する場合で、シャープやフラットの数が減るときは一度、前の調号を取り消す必要があります。ナチュラル♮を設定する必要があります。以下のようなものです。



<div id="yonet202302_Output04"></div>
<script>
(function(){
  const {
    Factory,
    Stave,
  } = Vex.Flow;

  const f = new Factory({ renderer: { elementId: 'yonet202302_Output04', width: 1500, height: 600 } });
  const ctx = f.getContext();
  const stave1 = new Stave(10, 50, 200).setContext(ctx).draw();
  stave1.addClef("treble").setContext(ctx).draw();
  stave1.addKeySignature('G', 'C#').setContext(ctx).draw();
  stave1.addTimeSignature('4/4').setContext(ctx).draw();

  const stave2 = new Stave(230, 50, 200).setContext(ctx).draw();
  stave2.addClef("treble").setContext(ctx).draw();
  stave2.addKeySignature('D', 'C#').setContext(ctx).draw();
  stave2.addTimeSignature('4/4').setContext(ctx).draw();

  const stave3 = new Stave(450, 50, 200).setContext(ctx).draw();
  stave3.addClef("treble").setContext(ctx).draw();
  stave3.addKeySignature('A', 'C#').setContext(ctx).draw();
  stave3.addTimeSignature('4/4').setContext(ctx).draw();

  const stave4 = new Stave(10, 250, 200).setContext(ctx).draw();
  stave4.addClef("treble").setContext(ctx).draw();
  stave4.addKeySignature('E', 'C#').setContext(ctx).draw();
  stave4.addTimeSignature('4/4').setContext(ctx).draw();

  const stave5 = new Stave(230, 250, 200).setContext(ctx).draw();
  stave5.addClef("treble").setContext(ctx).draw();
  stave5.addKeySignature('B', 'C#').setContext(ctx).draw();
  stave5.addTimeSignature('4/4').setContext(ctx).draw();

  const stave6 = new Stave(450, 250, 200).setContext(ctx).draw();
  stave6.addClef("treble").setContext(ctx).draw();
  stave6.addKeySignature('F#', 'C#').setContext(ctx).draw();
  stave6.addTimeSignature('4/4').setContext(ctx).draw();

  const stave7 = new Stave(10, 450, 200).setContext(ctx).draw();
  stave7.addClef("treble").setContext(ctx).draw();
  stave7.addKeySignature('C#', 'C#').setContext(ctx).draw();
  stave7.addTimeSignature('4/4').setContext(ctx).draw();
})();
</script>

 13行目のようにaddKeySignature関数の引数に第二引数を使って、キャンセルしたい調号の名前を入れます。差分を計算して必要なところにナチュラル記号が描画されますしたがって、7つめに例示したように C# の調号を描くのに、C#を取り消すような指定した場合、なにも取り消す必要がないため、変化は発生しません。したがって、この表記の効果は、第一引数の調号に使われるシャープやフラットの数と第二引数の数では第二引数の方が数が大きい時だけ描画変動の効果があることになります。

 

音部記号を伴わない調号

 行の始めには音部記号がありますが途中には有りません。そういった小節の途中で調号が変わる場合には、addClefを使わずに調号を適切な高さに描かれる様な一工夫が必要になりますが、今のところやり方がわかっていません。できないのかもしれない。ト音記号のときに限れば、音部記号を省略した調号の変化を表すことができます。

 

行末における調号の変更予告

 次のページや次の行から、新しい調号に移調する場合、行の最後にその予告的な記述をするときがあります。



<div id="yonet202302_Output05"></div>
<script>
(function(){
  const {
    Factory,
    Stave,
  } = Vex.Flow;

  const f = new Factory({ renderer: { elementId: 'yonet202302_Output05', width: 1500, height: 200 } });
  const ctx = f.getContext();
  const stave1 = new Stave(10, 50, 300).setContext(ctx).draw();
  stave1.addClef("treble").setContext(ctx).draw();
  stave1.addKeySignature('G', 'D').setContext(ctx).draw();
  stave1.addTimeSignature('4/4').setContext(ctx).draw();
  stave1.setEndKeySignature('D').setContext(ctx).draw();
})();
</script>

 最後から2行目の setEndKeySignature関数を使うと末尾に調号を付与できます。

 

特殊な表記(微分音)

 シャープやフラットには、特殊な表記があります。一般的なのはダブルシャープやダブルフラットまでだと思いますが、あまりみかけない特殊な表記に8分の1音上げ、4分の1音上げ、8分の3音上げ、半音上げ、8分の5音上げ、4/分の3音上げ、8分の7音上げ、そして、そのフラット版、更には3分法の6分の1音上げ、3分の1音上げ、3分の2音上げ、6分の5音上げとそのフラット版があります。♭の場合、フラットの旗にトレモロ記号のようなものをつけたり、フラットマークを逆さにしたり下矢印を付けたりします。#の場合は縦棒を一つにしたり3つにしたり、上矢印をつけたりします。VexFlowでは4分の1と4分の3の表記はできるようになっています。このような特殊な表記は使わないので、覚えなくても、使い方がわからなくても影響ない。


 意味はわからないですが、他にもbs、bss、+-、++-が指定できる他、なぞの記号が多数指定できます。面倒なのでペロッてキーワードだけはっておきます。どんなマークが出てくるかは実際にやってみるといいんじゃないかな。



<div id="yonet202302_Output06"></div>
<script>
(function(){
  const {
    Factory,
    Stave,
    KeySignature,
  } = Vex.Flow;

  const f = new Factory({ renderer: { elementId: 'yonet202302_Output06', width: 1500, height: 400 } });
  const ctx = f.getContext();
  const stave1 = new Stave(10, 50, 300).setContext(ctx).draw();
  stave1.addClef("treble").setContext(ctx).draw();
  let KeySig1 = new KeySignature('Cb');
  KeySig1.alterKey(['d', 'd', 'd', 'd', 'd', 'd', 'd']);
  KeySig1.setPadding(18);
  KeySig1.addToStave(stave1);
  stave1.setContext(ctx).draw();
  stave1.addTimeSignature('4/4').setContext(ctx).draw();

  const stave2 = new Stave(330, 50, 300).setContext(ctx).draw();
  stave2.addClef("treble").setContext(ctx).draw();
  let KeySig2 = new KeySignature('Cb');
  KeySig2.alterKey(['db', 'db', 'db', 'db', 'db', 'db', 'db']);
  KeySig2.setPadding(18);
  KeySig2.addToStave(stave2);
  stave2.setContext(ctx).draw();
  stave2.addTimeSignature('4/4').setContext(ctx).draw();

  const stave3 = new Stave(650, 50, 300).setContext(ctx).draw();
  stave3.addClef("treble").setContext(ctx).draw();
  let KeySig3 = new KeySignature('C#');
  KeySig3.alterKey(['+', '+', '+', '+', '+', '+', '+']);
  KeySig3.setPadding(18);
  KeySig3.addToStave(stave3);
  stave3.setContext(ctx).draw();
  stave3.addTimeSignature('4/4').setContext(ctx).draw();

  const stave4 = new Stave(10, 250, 300).setContext(ctx).draw();
  stave4.addClef("treble").setContext(ctx).draw();
  let KeySig4 = new KeySignature('C#');
  KeySig4.alterKey(['++', '++', '++', '++', '++', '++', '++']);
  KeySig4.setPadding(18);
  KeySig4.addToStave(stave4);
  stave4.setContext(ctx).draw();
  stave4.addTimeSignature('4/4').setContext(ctx).draw();

  const stave5 = new Stave(330, 250, 300).setContext(ctx).draw();
  stave5.addClef("treble").setContext(ctx).draw();
  let KeySig5 = new KeySignature('D');
  KeySig5.alterKey(['o', 'k']);
  KeySig5.setPadding(18);
  KeySig5.addToStave(stave5);
  stave5.setContext(ctx).draw();
  stave5.addTimeSignature('4/4').setContext(ctx).draw();
})();
</script>


 一番左上から右へ、右端にいったら一段下の左端へ、そしてまた右へという順で4分の1音下げ、4分の3音下げ、4分の1音上げ、4分の3音上げと指定しました。3分6分系と8分系の記号を適用する方法はVexFlowには無いみたいです。最後は o と k という指定をした場合の表記です。


 調べてみたんですけど、フラットやシャープの旗にスラッシュがつく感じの(++-、+-、+、d、bs、bss)はアラビア音階で使われるものらしく、フラットの左右反転だと9分の1音下げ、スラッシュが1つだと9分の4音下げがスラッシュが二つつくと9分の8音下げです。9分の5音下げが、通常のフラットの扱いになるそうです。反対から9分の4音上げが、シャープになるそうで、縦一本の半シャープが9分1音上げ、縦一本の半シャープにスラッシュ一つが9分5音上げ、シャープにスラッシュ一本をいれたものが9分の8音上げという対応です。oで表示される記号はソリという名前で半シャープと同じ意味だそうです。kはコロンといって左右反転フラットと同じ意味になるそうです。アラビア音階の場合は楽譜のどこかで指示しておかないとわからないかもしれませんね。3分6分系と8分系を表す記号がヘルエリノーテーションという体系で、もっとこまかい指示のサジタルノーテーションというものがあるそうです。サジタルノーテーションのどうでもよさげなことにまで対応しておきながらヘルエリノーテーションを対応していないVexFlow。不思議だわ。



6項目め以降がサジタルノーテーション系記号

コード
accSagittal5v7KleismaUp
bbs
bs
+-
++-
accSagittal5v7KleismaDown
accSagittal5CommaUp
accSagittal5CommaDown
accSagittal7CommaUp
accSagittal7CommaDown
accSagittal25SmallDiesisUp
accSagittal25SmallDiesisDown
accSagittal35MediumDiesisUp
accSagittal35MediumDiesisDown
accSagittal11MediumDiesisUp
accSagittal11MediumDiesisDown
accSagittal11LargeDiesisUp
accSagittal11LargeDiesisDown
accSagittal35LargeDiesisUp
accSagittal35LargeDiesisDown
accSagittalSharp25SDown
accSagittalFlat25SUp
accSagittalSharp7CDown
accSagittalFlat7CUp
accSagittalSharp5CDown
accSagittalFlat5CUp
accSagittalSharp5v7kDown
accSagittalFlat5v7kUp
accSagittalSharp
accSagittalFlat
accSagittalSharp5v7kUp
accSagittalFlat5v7kDown
accSagittalSharp5CUp
accSagittalFlat5CDown
accSagittalSharp7CUp
accSagittalFlat7CDown
accSagittalSharp25SUp
accSagittalFlat25SDown
accSagittalSharp35MUp
accSagittalFlat35MDown
accSagittalSharp11MUp
accSagittalFlat11MDown
accSagittalSharp11LUp
accSagittalFlat11LDown
accSagittalSharp35LUp
accSagittalFlat35LDown
accSagittalDoubleSharp25SDown
accSagittalDoubleFlat25SUp
accSagittalDoubleSharp7CDown
accSagittalDoubleFlat7CUp
accSagittalDoubleSharp5CDown
accSagittalDoubleFlat5CUp
accSagittalDoubleSharp5v7kDown
accSagittalDoubleFlat5v7kUp
accSagittalDoubleSharp
accSagittalDoubleFlat
accSagittal7v11KleismaUp
accSagittal7v11KleismaDown
accSagittal17CommaUp
accSagittal17CommaDown
accSagittal55CommaUp
accSagittal55CommaDown
accSagittal7v11CommaUp
accSagittal7v11CommaDown
accSagittal5v11SmallDiesisUp
accSagittal5v11SmallDiesisDown
accSagittalSharp5v11SDown
accSagittalFlat5v11SUp
accSagittalSharp7v11CDown
accSagittalFlat7v11CUp
accSagittalSharp55CDown
accSagittalFlat55CUp
accSagittalSharp17CDown
accSagittalFlat17CUp
accSagittalSharp7v11kDown
accSagittalFlat7v11kUp
accSagittalSharp7v11kUp
accSagittalFlat7v11kDown
accSagittalSharp17CUp
accSagittalFlat17CDown
accSagittalSharp55CUp
accSagittalFlat55CDown
accSagittalSharp7v11CUp
accSagittalFlat7v11CDown
accSagittalSharp5v11SUp
accSagittalFlat5v11SDown
accSagittalDoubleSharp5v11SDown
accSagittalDoubleFlat5v11SUp
accSagittalDoubleSharp7v11CDown
accSagittalDoubleFlat7v11CUp
accSagittalDoubleSharp55CDown
accSagittalDoubleFlat55CUp
accSagittalDoubleSharp17CDown
accSagittalDoubleFlat17CUp
accSagittalDoubleSharp7v11kDown
accSagittalDoubleFlat7v11kUp
accSagittal23CommaUp
accSagittal23CommaDown
accSagittal5v19CommaUp
accSagittal5v19CommaDown
accSagittal5v23SmallDiesisUp
accSagittal5v23SmallDiesisDown
accSagittalSharp5v23SDown
accSagittalFlat5v23SUp
accSagittalSharp5v19CDown
accSagittalFlat5v19CUp
accSagittalSharp23CDown
accSagittalFlat23CUp
accSagittalSharp23CUp
accSagittalFlat23CDown
accSagittalSharp5v19CUp
accSagittalFlat5v19CDown
accSagittalSharp5v23SUp
accSagittalFlat5v23SDown
accSagittalDoubleSharp5v23SDown
accSagittalDoubleFlat5v23SUp
accSagittalDoubleSharp5v19CDown
accSagittalDoubleFlat5v19CUp
accSagittalDoubleSharp23CDown
accSagittalDoubleFlat23CUp
accSagittal19SchismaUp
accSagittal19SchismaDown
accSagittal17KleismaUp
accSagittal17KleismaDown
accSagittal143CommaUp
accSagittal143CommaDown
accSagittal11v49CommaUp
accSagittal11v49CommaDown
accSagittal19CommaUp
accSagittal19CommaDown
accSagittal7v19CommaUp
accSagittal7v19CommaDown
accSagittal49SmallDiesisUp
accSagittal49SmallDiesisDown
accSagittal23SmallDiesisUp
accSagittal23SmallDiesisDown
accSagittal5v13MediumDiesisUp
accSagittal5v13MediumDiesisDown
accSagittal11v19MediumDiesisUp
accSagittal11v19MediumDiesisDown
accSagittal49MediumDiesisUp
accSagittal49MediumDiesisDown
accSagittal5v49MediumDiesisUp
accSagittal5v49MediumDiesisDown
accSagittal49LargeDiesisUp
accSagittal49LargeDiesisDown
accSagittal11v19LargeDiesisUp
accSagittal11v19LargeDiesisDown
accSagittal5v13LargeDiesisUp
accSagittal5v13LargeDiesisDown
accSagittalSharp23SDown
accSagittalFlat23SUp
accSagittalSharp49SDown
accSagittalFlat49SUp
accSagittalSharp7v19CDown
accSagittalFlat7v19CUp
accSagittalSharp19CDown
accSagittalFlat19CUp
accSagittalSharp11v49CDown
accSagittalFlat11v49CUp
accSagittalSharp143CDown
accSagittalFlat143CUp
accSagittalSharp17kDown
accSagittalFlat17kUp
accSagittalSharp19sDown
accSagittalFlat19sUp
accSagittalSharp19sUp
accSagittalFlat19sDown
accSagittalSharp17kUp
accSagittalFlat17kDown
accSagittalSharp143CUp
accSagittalFlat143CDown
accSagittalSharp11v49CUp
accSagittalFlat11v49CDown
accSagittalSharp19CUp
accSagittalFlat19CDown
accSagittalSharp7v19CUp
accSagittalFlat7v19CDown
accSagittalSharp49SUp
accSagittalFlat49SDown
accSagittalSharp23SUp
accSagittalFlat23SDown
accSagittalSharp5v13MUp
accSagittalFlat5v13MDown
accSagittalSharp11v19MUp
accSagittalFlat11v19MDown
accSagittalSharp49MUp
accSagittalFlat49MDown
accSagittalSharp5v49MUp
accSagittalFlat5v49MDown
accSagittalSharp49LUp
accSagittalFlat49LDown
accSagittalSharp11v19LUp
accSagittalFlat11v19LDown
accSagittalSharp5v13LUp
accSagittalFlat5v13LDown
accSagittalDoubleSharp23SDown
accSagittalDoubleFlat23SUp
accSagittalDoubleSharp49SDown
accSagittalDoubleFlat49SUp
accSagittalDoubleSharp7v19CDown
accSagittalDoubleFlat7v19CUp
accSagittalDoubleSharp19CDown
accSagittalDoubleFlat19CUp
accSagittalDoubleSharp11v49CDown
accSagittalDoubleFlat11v49CUp
accSagittalDoubleSharp143CDown
accSagittalDoubleFlat143CUp
accSagittalDoubleSharp17kDown
accSagittalDoubleFlat17kUp
accSagittalDoubleSharp19sDown
accSagittalDoubleFlat19sUp
accSagittalShaftUp
accSagittalShaftDown
accSagittalAcute
accSagittalGrave
accSagittal1MinaUp
accSagittal1MinaDown
accSagittal2MinasUp
accSagittal2MinasDown
accSagittal1TinaUp
accSagittal1TinaDown
accSagittal2TinasUp
accSagittal2TinasDown
accSagittal3TinasUp
accSagittal3TinasDown
accSagittal4TinasUp
accSagittal4TinasDown
accSagittal5TinasUp
accSagittal5TinasDown
accSagittal6TinasUp
accSagittal6TinasDown
accSagittal7TinasUp
accSagittal7TinasDown
accSagittal8TinasUp
accSagittal8TinasDown
accSagittal9TinasUp
accSagittal9TinasDown
accSagittalFractionalTinaUp
accSagittalFractionalTinaDown
accidentalNarrowReversedFlat
accidentalNarrowReversedFlatAndFlat
accidentalWilsonPlus
accidentalWilsonMinus


 


VexFlow 使い方に戻る。