「VexFlow」の版間の差分
編集の要約なし |
(→概要) |
||
(同じ利用者による、間の58版が非表示) | |||
1行目: | 1行目: | ||
[[メインページ#言語と開発環境|言語と開発環境]]へ戻る。 | |||
== '''概要''' == | == '''概要''' == | ||
MathJaxの楽譜版みたいな。MathJax?な人もいますから説明しますと、Webサイトにおいてネットワーク越しに準備されているJavaScriptライブラリを使って、自分のWebサイトで楽譜を描画する仕組みです。楽しい。タブ譜も描けますが、管理人はデザインに納得していません。 | |||
詳しい使い方は'''[[VexFlow 使い方|VexFlow使い方]]'''の記事を参照して下さい。 | |||
6行目: | 10行目: | ||
== '''簡単な使い方''' == | == '''簡単な使い方''' == | ||
<syntaxhighlight lang="javascript"> | <syntaxhighlight lang="javascript"> | ||
<script src="https://cdn.jsdelivr.net/npm/vexflow@ | <div id="output"></div> | ||
<script src="https://cdn.jsdelivr.net/npm/vexflow@4.1.0/build/cjs/vexflow.js"></script> | |||
<script> | <script> | ||
// ここにあなたのコードを書く。 | // ここにあなたのコードを書く。 | ||
… | |||
const vf = new Factory({ | |||
renderer: { elementId: 'output', width: 500, height: 200 }, | |||
}); | |||
… | |||
</script> | </script> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
例えば | |||
<syntaxhighlight lang="javascript"> | |||
<div id="output"></div> | |||
<script id ="vexflow" src="https://cdn.jsdelivr.net/npm/vexflow@4.1.0/build/cjs/vexflow.js"></script> | |||
<script> | |||
const { Factory, EasyScore, System } = Vex.Flow; | |||
const vf = new Factory({ | |||
renderer: { elementId: 'output', width: 500, height: 200 }, | |||
}); | |||
const score = vf.EasyScore(); | |||
const system = vf.System(); | |||
system | |||
.addStave({ | |||
voices: [ | |||
score.voice(score.notes('C#5/q, B4, A4, G#4', { stem: 'up' })), | |||
score.voice(score.notes('C#4/h, C#4', { stem: 'down' })), | |||
], | |||
}) | |||
.addClef('treble') | |||
.addTimeSignature('4/4'); | |||
vf.draw(); | |||
</syntaxhighlight> | |||
とすると結果として以下のように | |||
<div id="output"></div> | |||
が得られます。肝心なのは出力するためのタグを与えなければならないことです。<syntaxhighlight lang="javascript" inline><div id="output"><div></syntaxhighlight>が出力先です。出力先のタグはスクリプトの手前に必要なようです。描画コードの中で出力先のid名を指定するところがありまして、<syntaxhighlight lang="javascript" inline>renderer: { elementId: 'output'}</syntaxhighlight>のoutputと記述しているところが対応しています。1ページに沢山の楽譜を載せる場合はoutputという文字列の部分などの変数に通し番号を付けるとか、楽譜のタイトルにするとか変数名がユニークになるような工夫が必要です。 | |||
2つ目 | |||
<div id="output2"></div> | |||
とまぁこんな具合に2個目を配置することができます。変数名を分けるのはわりかし面倒なので、もっと賢いやり方もあるはずです。まだ知りません。ちなみにサンプルで使ったのは easyscore という仕組みで、VexFlow の記述よりも簡単な方法らしいですが、文献がきれいにそろっていないので、どういう風に書けばよいのかがわかりません。VexFlow もわかりやすい文献はありません。少なくとも日本語の使いこなしているような巨大説明サイトは現時点ではありませんでした。頑張ればVexFlowの日本支部を作れますよ。今なら日本のTopの座は空いています。英語ですが、本家には、API の説明がありますが、なかなか冷たい。サンプルを解析して勉強するしかないね。VexFlow > Test > flow.html というのがあります。膨大なサンプルで、描画するのに1、2分はかかります。html のソースを見てもサンプルコードは記述されていません。ファイルに分散して配置されているようです。 | |||
ちなみに2つ目の楽譜は12連符を書きたかったのですが、easyscore の仕組みが対応していないようで、描けませんでした。描く方法もあるのかもしれませんが、簡単ではなさそうです。どこが easy やねん! | |||
とは、言いつつも頑張って調べてたら何となく使い方わかって来たので使い方を纏めます。 | |||
ちな、変数が重複しても大丈夫な様に一つの楽譜事に関数化しておけば変数名の重複を気にせず使えます。即時実行関数(function(){コード})();の中に書くだけです。 | |||
== '''関連情報''' == | |||
*[[VexFlow 使い方]] | |||
*[[音楽理論 和音の種類]] | |||
[[メインページ#言語と開発環境|言語と開発環境]]へ戻る。 | |||
<yjavascript> | <yjavascript> | ||
</script> | </script> | ||
<script src="https:// | <!-- https://cdn.jsdelivr.net/npm/vexflow/build/cjs/vexflow-debug.js --> | ||
<script id ="vexflow" src="https://cdn.jsdelivr.net/npm/vexflow@4.1.0/build/cjs/vexflow.js"></script> | |||
<script> | <script> | ||
const { Factory, EasyScore, System } = Vex.Flow; | const { Factory, EasyScore, System } = Vex.Flow; | ||
23行目: | 101行目: | ||
const vf = new Factory({ | const vf = new Factory({ | ||
renderer: { elementId: 'output', width: 500, height: 200 }, | renderer: { elementId: 'output', width: 500, height: 200 }, | ||
}); | |||
const vf2 = new Factory({ | |||
renderer: { elementId: 'output2', width: 700, height: 200 }, | |||
}); | }); | ||
39行目: | 120行目: | ||
vf.draw(); | vf.draw(); | ||
const score2 = vf2.EasyScore(); | |||
const system2 = vf2.System(); | |||
system2.addStave({ | |||
voices: [ | |||
score2.voice( | |||
score2.tuplet(score2.beam(score2.notes('G#5, E5, F#5, C#5, D#5, B4, C5, G#4, F#4, B4, C5, D5'))) | |||
.concat( | |||
score2.tuplet(score2.beam(score2.notes('A4/8, E4, C4')))) | |||
.concat( | |||
score2.tuplet(score2.beam(score2.notes('A4/8, E4, C4')))) | |||
.concat( | |||
score2.tuplet(score2.beam(score2.notes('A4/8, E4, C4')))) | |||
) | |||
] | |||
}).addClef('treble').addTimeSignature('4/4'); | |||
vf2.draw(); | |||
</yjavascript> | </yjavascript> | ||
2024年4月10日 (水) 03:23時点における最新版
言語と開発環境へ戻る。
概要
MathJaxの楽譜版みたいな。MathJax?な人もいますから説明しますと、Webサイトにおいてネットワーク越しに準備されているJavaScriptライブラリを使って、自分のWebサイトで楽譜を描画する仕組みです。楽しい。タブ譜も描けますが、管理人はデザインに納得していません。
詳しい使い方はVexFlow使い方の記事を参照して下さい。
簡単な使い方
<div id="output"></div>
<script src="https://cdn.jsdelivr.net/npm/vexflow@4.1.0/build/cjs/vexflow.js"></script>
<script>
// ここにあなたのコードを書く。
…
const vf = new Factory({
renderer: { elementId: 'output', width: 500, height: 200 },
});
…
</script>
例えば
<div id="output"></div>
<script id ="vexflow" src="https://cdn.jsdelivr.net/npm/vexflow@4.1.0/build/cjs/vexflow.js"></script>
<script>
const { Factory, EasyScore, System } = Vex.Flow;
const vf = new Factory({
renderer: { elementId: 'output', width: 500, height: 200 },
});
const score = vf.EasyScore();
const system = vf.System();
system
.addStave({
voices: [
score.voice(score.notes('C#5/q, B4, A4, G#4', { stem: 'up' })),
score.voice(score.notes('C#4/h, C#4', { stem: 'down' })),
],
})
.addClef('treble')
.addTimeSignature('4/4');
vf.draw();
とすると結果として以下のように
が得られます。肝心なのは出力するためのタグを与えなければならないことです。<div id="output"><div>
が出力先です。出力先のタグはスクリプトの手前に必要なようです。描画コードの中で出力先のid名を指定するところがありまして、renderer: { elementId: 'output'}
のoutputと記述しているところが対応しています。1ページに沢山の楽譜を載せる場合はoutputという文字列の部分などの変数に通し番号を付けるとか、楽譜のタイトルにするとか変数名がユニークになるような工夫が必要です。
2つ目
とまぁこんな具合に2個目を配置することができます。変数名を分けるのはわりかし面倒なので、もっと賢いやり方もあるはずです。まだ知りません。ちなみにサンプルで使ったのは easyscore という仕組みで、VexFlow の記述よりも簡単な方法らしいですが、文献がきれいにそろっていないので、どういう風に書けばよいのかがわかりません。VexFlow もわかりやすい文献はありません。少なくとも日本語の使いこなしているような巨大説明サイトは現時点ではありませんでした。頑張ればVexFlowの日本支部を作れますよ。今なら日本のTopの座は空いています。英語ですが、本家には、API の説明がありますが、なかなか冷たい。サンプルを解析して勉強するしかないね。VexFlow > Test > flow.html というのがあります。膨大なサンプルで、描画するのに1、2分はかかります。html のソースを見てもサンプルコードは記述されていません。ファイルに分散して配置されているようです。
ちなみに2つ目の楽譜は12連符を書きたかったのですが、easyscore の仕組みが対応していないようで、描けませんでした。描く方法もあるのかもしれませんが、簡単ではなさそうです。どこが easy やねん!
とは、言いつつも頑張って調べてたら何となく使い方わかって来たので使い方を纏めます。
ちな、変数が重複しても大丈夫な様に一つの楽譜事に関数化しておけば変数名の重複を気にせず使えます。即時実行関数(function(){コード})();の中に書くだけです。
関連情報
言語と開発環境へ戻る。