- Loopian とは
- 用語集
- 起動と終了
- 基本操作コマンド
- テンポ、拍子、調などの設定
- Phrase 指定
- Composition 指定
- Part/Compositionの共通仕様、及びその連携
- ファイルのロード、セーブ
- その他の拡張仕様
- Graphic
- setting.tomlの記述
- Loopian::ORBIT/QUBIT での演奏
- usecase
- アプリの内部で自動的に行われること
Loopian は、Live Coding などで使うために開発している、テキスト入力によるピアノ音色用シーケンサである。 以下の特徴を持つ
- 一行のテキストによって、フレーズや和音を指定したり、演奏全体をコントロールするコマンドを記述する
- ある程度自然な演奏になるように、ベロシティや和音変換時の音程、ダンパーペダルを自動算出しコントロールする
- 音程は移動ドにて指定する
- ファイルを自動的に読み込むことで、シーケンスデータを自動再生させることが可能である
本ドキュメントでは、Loopianの全機能について説明する。
- 階名 : 移動ドによる音程呼称。ドレミファソラシ(
drmfslt)が示す音は、調によって移動する。 - phrase : メロディや和音など、時系列の音符情報
- composition : phrase に適用して音を変化させる Chord/Scale 情報
- loop : Loopian は基本的に、phrase/composition を繰り返す。この繰り返し単位。
- part : phrase/composition はそれぞれ独立した4つの Loop 再生が可能である。そのphraseとcompositionがセットになったものを part と呼ぶ。
- 音価 : 音符の長さ
- 基準音価 : 一度音価を指定すれば、その後は音価を指定しなくてもその音価が継続していると見なされる。その音価のことを基準音価と呼ぶ
- ターミナルを開く
- Loopian のフォルダに移動
cd /path/to/loopian
- アプリを起動
./loopian
- オプション付きで起動する場合:
- サーバーモード:
./loopian --server
- コンパイラから起動する場合:
- Raspberry Pi 5 用:
cargo build --features raspi - 詳細ログ付き:
cargo build --features verbose
- アプリを立ち上げると、画面下の Input Window に下記のような入力用プロンプトが表示される
L1>: 入力用プロンプト。Left 1 の入力状態であることを示す
- このプロンプトの後のカーソルの位置に、コマンドやフレーズを入力し、Return で確定する
- 左右矢印キーで、入力中のカーソルを移動できる
- 上下矢印キーで、過去入力の履歴呼び出しが可能
- カーソルの誤操作防止のため、入力カーソルが左端にないときは履歴呼び出しは出来ない
- Loopian では、space の入力は
.(ピリオド)に変換される
- Input Window で入力した文字列は、Return で確定後、Scroll Text の最下行に追加される
- Scroll Text に追加されたテキストは、表示行数を超えるとスクロールする
- 上下矢印キーで、Scroll Text 上の任意の一行を呼び出すことができる
- 左右キーで行頭より右にカーソルを移動すると、上記の呼び出しは動作しない
- 画面上部の Status Indicator には、以下の情報が表示される:
>M:B:TTT:再生情報を示し、小節数(M)、拍(B)、拍内の tick(TTT)を表示bpm:BBB:現在のテンポを表示meter:N/D:現在の拍子を表示key:N:現在の調を表示R2 ---: は、各パートの再生位置(ループ内の位置/ループ全体の小節数)、および和音情報を表示- ループ内の位置が
-1の場合、次の新しい Phrase が予約されていることを示す
- ループ内の位置が
- 背景に任意のグラフィックパターンが表示される。このパターンを変更することが可能である
!quitor!qをInput Windowに入力し、returnするとアプリが終了- ウインドウの close ボタンを押しても終了
- ただし、ログファイルは記録されない
- Loopian はMIDI出力のみなので、別途音源が必要
- PC内のMIDI音源や、外部MIDI音源を選択でき、Loopian と同じフォルダにある setting.toml にて設定する。
- setting.toml の [midi] midi_out を接続先の名前に変更してから Loopian を立ち上げる(後述)
- 動作確認済みのPC音源
- Mac では以下のアプリで動作確認済
- Garage Band / Logic : Mac で MIDI 演奏するための DAW by Apple
- Pianoteq8 : 物理エンジンベースのPiano音源 by MODARTT
- Windows では、Microsoft GS Wavetable Synth で動作確認済
- Mac では以下のアプリで動作確認済
- 専用MIDI Controller(Loopian::ORBITなど)を接続し、リアルタイム演奏も可能
playorp: シーケンス開始(1小節目から)fermata: 次の小節の頭の拍を再生してbeatを止めるresume: beatが止まっているとき、その小節の先頭から再生を再開するfine: 現在の小節が終わったらシーケンス終了stop: 直ちにシーケンス終了panic: 今鳴っている音を消音する
left1orL1: 入力パートをleft1 にするleft2orL2: 入力パートをleft2 にするright1orR1: 入力パートをright1 にするright2orR2: 入力パートをright2 にするV1: 入力パートを violin1 にするV2: 入力パートを violin2 にする- 下図に各パートのオクターブ指定方法を示す
set.bpm(100): BPM(テンポ)=100 にセットset.meter(4/4): 拍子を 4/4 にセットset.key(C4): key を C4 にセット- Loopian にとって key とは
[d](ド) と指示されたときの音名を表す - デフォルト値は C4(midi note number=60)
- 音名は C-B と大文字で表現し、必要に応じて前に #, b を足すことができる
- 音名の後ろの数値はオクターブを指示するが、省略可能
- 省略した場合、今設定されているオクターブがそのまま適用される
- Loopian にとって key とは
set.oct(+1): 現状から1オクターブ上げるoct(0): 0は、現状の値を無視し、初期値に戻す
set.msr(5): 次にresumeを入力したとき、5小節目から開始する
[note].fn1().fn2(): phrase 入力の書式- note: 音符ごとの階名、音価表現、音量情報を入力する
- この中に書かれた音符が LOOP 再生される
- fn: 関数(音符変調関数、音楽表現関数)
- 関数は省略可能
- 関数は、
.で繋げて、複数の関数を追記可能
[]: 全データ削除[.....//]: 最後に // が二つあった場合は LOOP せず、Phrase の再生が止まる- 後述する variation には適用されない
- 音程は移動ド(階名)で表現
- iをつけると半音高くなる(iiで全音高くなる)
- aをつけると半音低くなる(aaで全音低くなる)
| 階名 | ド | レ | ミ | ファ | ソ | ラ | シ |
|---|---|---|---|---|---|---|---|
| 表記 | d | r | m | f | s | l | t |
| 半音上 | di | ri | mi | fi | si | li | ti |
| 半音下 | da | ra | ma | fa | sa | la | ta |
-
音符の記述
,: 音符情報の区切りを表す。1小節分を超えたら捨てられる。区切りが連続すると休符が省略されたとみなす|or/: 小節区切りを表す。区切りが連続すると休符が省略されたとみなすx: 休符dms: ドミソの同時演奏 (各音を続けて書く)- 左側から低い順に音程を記述する
[d+d]: ドとその1オクターブ上のド(相対オクターブ指定の場合)
d*4: ドを4回連続して発音
-
オクターブの記述
- オクターブは、
-、+を、音符の先頭に付けることによって表現する-d: 下のド+d: 上のド--d: 二つ下のド++d: 二つ上のド
- オクターブを記述する方法の設定を
set.inputで変更できる(デフォルトはinput(closer)) - 絶対オクターブ指定(input(fixed))の場合、
d-tまでが同じオクターブに含まれ、そのパートのデフォルトのオクターブ内なら何も表記しない- デフォルトより上のオクターブは
+を音程の前に付ける - 同様に下のオクターブは、
-を音程の前に付ける
- デフォルトより上のオクターブは
- 相対オクターブ指定(input(closer))では、前に入力した音より上下の近い方(-5..+6)に行く場合、何も表記しない。
- 相対オクターブ指定(input(upcloser))では、上側1オクターブ分(1..11)に行く場合何も表記しない。
- 和音入力の場合の考え方も以下のように異なる
- 絶対オクターブでは、和音入力はできない
- input(closer/upcloser)では、現在入力する和音のオクターブ設定は、今の和音の最低音と前の最低音との関係を記述する
- オクターブは、
- 音価を記述する場合は、階名の前に付加する
- 階名のみを入力したときは、基準音価が採用される
- デフォルトの基準音価は四分音符
h二分音符 (例:[hd,r/m,f])q四分音符 (例:[qd,r,hm/qf,s,l,t])e:八分音符 (例:[em,r,d,r,qm,r])v:十六分音符 (例:[em,vr,d,et,vd,r,em,vr,d,t,d,r,d])w:三十二分音符w(N):任意の数値を直接指定することで、装飾音符などを表現する(Nはtick数を表す数値)[w(24)d,r,m,f,s]: 十六分音符の間に5つの音符d,r,m,f,sを等間隔で演奏する
[3ed,r,m]: eの前に3を書くと、一拍三連の音価になる(八分音符で三連符を記述したことと同じ)- 同様に、5連符が可能
- 同様に、3q で二拍三連
[h'd][q'd]: 'の前にhを書くと付点二分音符、qを書くと付点四分音符do/: ドをその小節の終わりまで伸ばす(oから|までの間の文字は無視される)d..: ドを基準音価の3倍(もう2回)伸ばすd./..のように小節を跨ぐこともできる(タイ)do/o/は2小節伸ばす
hd_e: 二分音符と八分音符をタイで結ぶqd/_eのように小節を跨ぐこともできる(タイ)- 基準音価は、タイで繋いだ後ろの音符の音価に移る
[An:.....]のように冒頭にAと任意の拍を表す数値を記載すると、その拍から始まる弱起のフレーズを書くことができる[A3:d,r/m,f,s,t/d]: 二拍休んで、三拍目からその後のフレーズが始まる- 弱起の小節は前のフレーズの最後の小節と重なって演奏される
- <注意!> 弱起のフレーズの次のフレーズは、最後の1小節になってから入力すると、弱起のフレーズが始まってしまうので、それより前に入力するか、弱起のフレーズに
//を入れ、繰り返さないようにするなど注意が必要
d^: 階名の後ろに^をつけると音量が大きくなる。複数個つけることも可能d%: 階名の後ろに%をつけると音量が小さくなる。複数個つけることも可能d!: 最後に!をつけると音の長さが音価の半分になる。(stacc(),legato()より強い)d~: 最後に~をつけると音の長さが音価の120%になる。(stacc(),legato()より強い)<d,r,m>!: 複数のNoteを<>!で囲むと、それらの音の長さが音価の半分になる<d,r,m>~: 複数のNoteを<>~で囲むと、それらの音の長さが音価の120%になる[h$drm]: 同時に演奏する音符と、音価情報の間に$がある場合、アルペジオ演奏を行う[qs,(-1)ed,r..]:,の直後に()内に数値を書くことで、前打音を指定できる。(-1)であれば、半音下の音の前打音が発音する
- Phrase を記述した
[]の後に、.fn()と指定することで、Phrase 全体への指示を行うことができる - 音符の表記そのものに何らかの変更を行う音符変調関数と、Phrase 全体に効果をかける音楽表現関数の二種類がある
- 音符変調関数(note modulation function)
rpt(n):n=繰り返し回数、2ならそれ自身を含め合計3回繰り返し
- 音楽表現関数(musical expression function)
dyn(f): f,mf,mp,p,pp を引数に入れ、フレーズの音量指定dmp(on)dmp(off): off: 和音指定時でも Pedal Off指定stacc(50): 音価を半分にする(1-100まで調整可能)legato(120): 音価を20%増やす(100-200まで調整可能)trns(para)orpara(): 和音変換時、parallel 指定する。(全フレーズの parallel と同じ)
- Dynamic Pattern は、Phrase の中で実際の音程を指示せず、同時和音や分散和音を自動生成する
- 同時に鳴る和音は
Cls()(Cluster)、分散和音はArp()(Arpeggio)と記述するC(), A()と小文字を省略可能[hCls(),hArp()]のように、Phrase の中に記載し、前に Pattern 全体の音価を示す
Cls(a,b,c)とカッコ内をカンマで区切って、パラメータを与えることができる- パラメータは最大で3つで、4つ以上与えた場合以降は無視される
- パラメータが足りない場合は、default値が適用される
- a(一つ目のパラメータ): 音価を表す。h,q,e,v,w およびその三連、五連、付点を選ぶことができる(default:q)
- b(二つ目のパラメータ): 和音の音数(2-5)(default:4)
- c(三つ目のパラメータ): 最低音の位置(-6 - 7)(default:0)
$C()のようにCの前に$がある場合、同時和音に対するアルペジオ演奏を行う$SCゆっくりなアルペジオ(Slow)$QC速いアルペジオ(Quick)h$C()音価情報はアルペジオの前に置かれるArp()とは名称が被っているが、$は記譜上のアルペジオ記号のことを指している
Arp(a,b,c)とあった場合、各パラメータは以下の意味になる- a: 音価を表す。h,q,e,v,w およびその三連、五連、付点を選ぶことができる(default:q)
- b: u は上昇音形、dは下降、uxはクロス上昇、dxはクロス下降
- c: 最低音の位置(-6 - 7)(default:0)
- Phrase と同じ関数を後ろに追加することが可能
- 基本的には小節をまたがない
- 一拍分の音符を、Phraseに使うために事前に登録することができる
@c=dms: ドミソの和音を同時に発音する[ec,x,x,c,c,x,x,c]: 前に設定した和音を c のタイミングで発音する
[...]+と Phrase にプラスを書いた後に return しても再生されず、次回の Phrase の入力を待つ状態になる[aaa]+の後に[bbb]を入力したら、[aaabbb]と同じ入力がされたとみなし、再生データが生成される- 単純に二つの文字列が足されるため、
[a,b,c,]+というように、cの後ろにも,や/が必要となる。
[ax].rpt(2)+というように、rpt()+ を後ろに入力したら[axaxax]と同じ入力がされたとみなすL1.[...]+のように、パート指定と同時に使った場合はエラーとなる
{chord}: Composition の書式- chord: コードを拍、小節ごとに区切って時系列で記述
- この中に書かれたコードが LOOP 再生される
{}: 全データ削除{.....//}: 最後に // が二つあった場合は LOOP せず、Composition の再生が止まる
- chord: コードを拍、小節ごとに区切って時系列で記述
|or/: 小節区切り。区切りが連続するとコードがないとみなす{I/IV/V}: 1小節ごとに I -> IV -> V とコードが変わる/./小節線の間にピリオドを入れると、前の小節と同じコードになる
- 同小節内でコードを変える場合、拍ごとに
,で区切る。- 複数拍を同じコードにしたい場合、
.で伸ばす ,,のように何も記さずにカンマを続けた場合、その拍にコードがないとみなす
- 複数拍を同じコードにしたい場合、
- コード情報とピアノの Pedal 情報はリンクしている
- コードが変わるごとにペダルは踏み直される
- 小節が変わるごとにペダルは踏み直される
| 主音からの距離 | 一度 | 二度 | 三度 | 四度 | 五度 | 六度 | 七度 |
|---|---|---|---|---|---|---|---|
| 根音の表記 | I | II | III | IV | V | VI | VII |
X: original phrase(no pedal)O: original phrase(pedal)I:dms(Iの和音)I#:dimisi(数字の後に # を付けると半音高いコードになる。b は半音)Iion: Iを主音としたイオニアンスケール(Ionian)_ion, _dor, _lyd, _mix, _aeoという教会旋法を指定した場合、通常のコードとは動作が違っているIion, IIdor, IVlyd, Vmix, VIaeoがその調のダイアトニックスケールになり、それ以外の root が指定された場合、その差分分だけ並行移動する。
lydian: 現在のkeyを主音としたリディアンスケール!をコードの最後に追加すると、当てはまる音が等距離の場合、上側を採用する(通常は下側を採用)- コードやスケールが判断不能の場合、エラーとなり調の主音しか出ない
-
読み方
- アンダーバー
_には root(I-VII) が入る - 構成音ではrootから順に対象音
oか、非対象音xかを示す
- アンダーバー
-
基本和音
和音名 和音の表記 和音の構成音 長三和音 _ oxxx-oxxo-xxxx短三和音 _m oxxo-xxxo-xxxx属七和音 _7 oxxx-oxxo-xxox六の和音 _6 oxxx-oxxo-xoxx短七和音 _m7 oxxo-xxxo-xxox長七和音 _M7,_maj7 oxxx-oxxo-xxxo長七+短三和音 _mM7 oxxo-xxxo-xxxo -
テンション和音
和音名 和音の表記 和音の構成音 add9th _add9 oxox-oxxo-xxxxマイナーadd9th _madd9 oxoo-xxxo-xxxx属九和音 _9 oxox-oxxo-xxox長九+短七和音 _m9 oxxo-xxxo-xxox長九和音 _M9,_maj9 oxox-oxxo-xxxo長九長七+短三和音 _mM9 oxoo-xxxo-xxxo増三和音 _+5,_aug oxxx-oxxx-oxxx増三長七和音 _7+5,_aug7 oxxx-oxxx-oxox短九+属七和音 _7-9 ooxx-oxxo-xxox増九+属七和音 _7+9 oxxo-oxxo-xxox減七和音 _dim oxxo-xxox-xxxx導七和音 _m7-5 oxxo-xxox-xxoxsuspended4th _sus4 oxxx-xoxo-xxxx属七+suspended4th _7sus4 oxxx-xoxo-xxox全半音 _chr oooo-oooo-oooo -
教会旋法
和音名 和音の表記 和音の構成音 イオニア _ion oxox-ooxo-xoxoドリアン _dor oxoo-xoxo-xoxoリディアン _lyd oxox-oxoo-xoxoミクソリディアン _mix oxox-ooxo-xooxエオリアン _aeo oxoo-xoxo-oxoxダイアトニック(rootなし) diatonic oxox-ooxo-xoxoドリアン(rootなし) dorian oxoo-xoxo-xoxoリディアン(rootなし) lydian oxox-oxoo-xoxoミクソリディアン(rootなし) mixolydian oxox-ooxo-xooxエオリア(rootなし) aeolian oxoo-xoxo-oxoxコンディミ(rootなし) comdim oxoo-xoox-ooxoペンタトニック(rootなし) pentatonic oxox-oxxo-xoxxブルース(rootなし) blues oxxo-xooo-xxoxスルー(rootなし) O oooo-oooo-ooooスルー、pedal無し(rootなし) X oooo-oooo-oooo
- 12個のon/off情報を三桁の16進数で表すことで、スケールを直接 Composition の中で指定できる
Onnn/Xnnn:OあるいはXの後に、三桁の16進数(nnn)を記述する- 例えばイオニア旋法の場合、oxox-ooxo-xoxo なので、
Oad5と記述
- Phrase / Composition ともに、冒頭でパート指定することで、プロンプトのパートと違うパートも入力することができる
L1.[...]: left1パートL.[...]: left1,left2パート二つ同時に同じ Phrase をセットALL.[...]: 全パートに同じ Phrase をセットL1!.[...]: left1パート以外全て
- 和音変換時、root に合わせて Phrase が並行移動する
{IV}の場合だと、Phase 全体が完全四度移動した上で、和音構成音への変換が行われる- note単位の和音変換指定が可能
[>d,s,d,m,d,>>s]:>はparallel動作、>>は変換しない- 複数音を parallel 指定する場合、
<...>pと複数音を< >pで囲む[<d,m,s,d,s,m>p]: 全フレーズが parallel[<d,s>p,m,d,s,m]: 最初の d,s の2音が parallel
- 複数音を無変換にしたい場合、
<...>nとする
- Variation 機能とは、一つのパートに複数の Phrase を入力し、それらの再生順を Composition で指定したり、特定の小節で再生することができる機能である
- これにより Loop 内で、定期的に異なる Phrase を再生することができる
@n=[..]: Phrase 指定の冒頭に @n(nは1から9までの数値)を付け足すことで、Variation を追加できる- 追加された Variation Phrase は、Composition で以下のように指定する
{I/II@n}Chord指定の後に@n(n:1-9) と書くと、この小節冒頭から Variation Phrase が再生される- chord指定せずに直接
@nのみを書いた場合、Chord は何も書かなかった時と同じ扱いになる - Composition で指定した場合、前の Phrase が途中でも中断し、Variation Phrase を再生する
- Phrase より Composition が先に終了しても、Variation Phrase が残っていれば、そのまま再生を続ける
- 特定の小節で再生するとき
@msr(M)=[..]と表記し、M の部分に小節の条件を記述する- M が数字のとき、その小節番号になったら再生される
- Variation Phrase が終了後、新しい Variation 指定がなければ、通常の Phrase が再生される
- Loopian を
!quit/!qで終了すると、自動的にログファイルがセーブされる- アプリのあるフォルダに、/log フォルダが自動的に作られ、その中にログファイル(拡張子はlpn)がセーブされる
- 2023-06-02_19-56-54.lpn というように、日時がファイル名となる
!save(n).filename- 任意の履歴番号n行目以降の入力を、指定されたファイル名でセーブすることができる
- filename を省略すると、日時がファイル名になる
!load.filename (あるいは!l.filename) : 指定したファイルをロードする- ロードされるファイルの拡張子は
lpnのみで、ファイル指定時には拡張子は書かない*.lpnは、ログファイルと同様の形式である
- 一度ファイルをロードしたら
!loadのみの入力でも、前回と同じファイルがロードされる
- ロードされるファイルの拡張子は
- loadしたいファイルは、この
/loadフォルダ以下に入れておく必要がある- 最初のloadコマンド入力時、アプリのあるフォルダに、
/loadフォルダが自動的に作られる
- 最初のloadコマンド入力時、アプリのあるフォルダに、
/loadフォルダ以下にサブフォルダを作って、サブフォルダ下にファイルを置くこともできる- サブフォルダにあるファイルを指定する場合、ロード前に
set.path(xxx)でサブフォルダ名xxxを指定する
- サブフォルダにあるファイルを指定する場合、ロード前に
!play(あるいは!p):ファイルからロードした内容を転送する- 後述する
!blk(..)!msr(n)以降の有効行は再生しない - 後述する
!rd(..)の行は再生しない
- 後述する
!history.filename(あるいは!h.filename):指定したファイルを履歴のみにロードする- 履歴のみにロードされたコマンドは、再生はされない
- Scroll Text に表示され、上下キーで選ぶことができる
- ファイル内の各一行が、Input Window で指定できる Command 一つを表している
- 冒頭が
//になっている行はコメントとみなされ、ロードされない - 空白行があった場合、以降に説明する
!による記法の効力がそこで終わることを意味する !msr(n)とファイル内に書かれた行以降は、n小節の1拍目に間に合うように転送される- 実際には、n-1小節目の残り240tickを切ったところで転送される
- load 中に wait があり、自動 load 中と見做される場合でも、ユーザーによる Input Window への入力は可能である
!rd(n): xxxとファイル内に記載されている場合、ファイルをロード後!rd(n)と Input Window に入力すると、ファイル内にrd(n)と書かれている行のそれ以降の文字列xxxが自動に入力される(nは任意の数字)!blk(a): ファイル内の行の冒頭が!blk(a)とある行から、次の空行、あるいは別の!blk,!msrがあるところまでの行が転送される!blk(a,T,S..): T, S と引数を二つ以上に増やすことで、ブロック内の任意の文字列を差し替えることができる- まず、ファイル内に
!blk(a,T)と記述し(aはブロック名、Tは差し替え変数名)、それ以降の行の差し替えるところにTと書く - コマンドで指示する際、例えば
!blk(a,R1)と書くと、aブロック内のファイル内のTの場所がR1に差し替わる
- まず、ファイル内に
!msr(n): 入力後resumeとコマンドを打つと、ファイル内の行の冒頭が!msr(n)とある行から再生する- 1小節前から空の再生を始める
- ファイルの記述が Loop 前提の場合など、いくつかの条件では途中の小節からの正確な再生は保証しない。
!clear(あるいは!c)で、ロードされたファイルの中身は全て消去される。
- パート分割処法から継時書法への変換機能
!cnv2tl.filename で、ファイル名+tl.lpnというファイル名に変換の上、保存される- データの打ち込み方法参照のこと
rit.: テンポをだんだん遅くして、次の小節の頭で元のテンポrit.poco: 遅さが弱いrit.molto: 遅さが強いrit.fermata: rit.の次の小節の頭の拍を再生して停止- そのまま演奏終了ならば
fine再開するならresumeを指定する
- そのまま演奏終了ならば
rit.molto.fermatarit.bpm(120): rit.の次の小節をテンポ120で開始rit.bar(2): 2小節rit.をつけるrit.poco.bar(2)rit.poco.bar(2).bpm(100)- bar(N) の N は任意の数値
sync: 次の小節の頭で、そのパートの Phrase, Composition を同期させるsync.right: 右手パート(right1/2)sync.left: 左手パート(left1/2)sync.all: 全パート
fine: 現在の小節が終わったらシーケンス終了fine.next: 次の小節が終わったら終了fine.beat(2): 次の小節の2拍目で終了(2,3,4)
clear: データの中身を消去- 引数がない場合、全パート消去し、再生も止まる
clear.L1: L1パートの中身を消去。同様に L2,R1,R2 も指定可clear.env: データではなく key, meter, bpm, oct をデフォルト値に戻す
efct: MIDI Controller の出力efct.cc70(nn): cc70に対して nn(0-127) を送るefct.dmp(nn): cc64のDamperが on になったとき、nn(0-127) を送る
- 演奏中にctrl+数字キーを押すことで、その時だけテンポを、(数字×10%)だけ遅くすることができる
&&と記述し両側に別コマンドを書くことで、複数のコマンドを一行で指定することができる- ファイル内での記述では
&&は使えない
- ファイル内での記述では
set.input(fixed): オクターブ指定法fixedは、入力する階名は絶対位置(d-tまでを同じオクターブ内とする)closerは、+-指示がない限り、前回に近い音程(-5..6/g..fi) (default)upcloserは、+-指示がない限り、前回より1オクターブ上の範囲(0..11/d..t)
set.samenote(modeling): 同音連打の動き方modelingは、モデリング音源向けで、note off は一度しか送らない(default)commonは、一般的なMIDI音源向けで、note off は note on の数だけ送られる
set.turnnote(5): para 指定時、変換後の音程を折り返す位置(0-11, default=5)set.path(name): load の下にある読み込みたいディレクトリ名を指定set.flowreso(reso): FLOWパートの tick の分解能を音価で表現set.flowvel(vel): FLOW.dyn(xx) と機能は同じだが、こちらは velocity 値を直接指定するset.midi_input_ch(ch): FLOW の MIDI Input Ch を 12/13ch 以外の ch でも使えるようにするset.elasticity(type, depth): 1小節内のテンポの揺れを設定する- type: テンポの揺れのタイプを選択(0:無し、1:Ballad, 2:Swing)
- depth: 上記のタイプの強さを 0..10 で設定できる
DAMPER.[]D.[]で Damper Pedal 制御を行うことができる[]内に以下の記号でペダルの状態を記述する。また小節の区切りは/である_:踏む-:ハーフ*:離す
[____/-*-*]: 小節内には拍数と同じ数の記号を書く[__/_*/*____]拍数に足りない時は最後の記号が続き、余分にある場合は無視する
[_/*/_]小節線の間に一つしか記号がない場合、1小節間その状態が継続する- 拍間の区切りに
,があるとき瞬間的に離す。;は、拍間で瞬間的にハーフにする !/: 小節線を跨いで、ペダルを踏みっぱなしにするとき、/の前に!をつける- Composition にて
X``O指定があっても、ペダル制御があればそちらを優先する - 優先順位は
DAMPER.[]>.dmp(on/off)>{X/O}
asMin()oras(VI): parallel 指定の時、Phrase を VI のスケールとみなし、VI からの差分で並行移動する- 音楽表現関数の中でも音量や音価の変化を指示する場合、
R1.fn()のように、Phrase を記述せずにパート名の後にピリオドで繋げて指定することも可能であるR1.dyn(mf): R1 の音量を mf にするL2.stacc(): L2 を staccato にする(その他:legato())
- Phrase の音量の時間変化を指示するメッセージとして、cresc, dim を使用することができる[未実装]
cresc()orcrs(): Phrase 終了までだんだん大きくする(1段階大きくする)dim(): Phrase 終了までだんだん小さくする(1段階小さくする)cresc(mf): Phrase 最後が mf になるようにだんだん大きくするcresc(mp..f): Phrase が mp から f に、二拍でなるようにだんだん大きくする(ピリオドが1拍を示す)cresc(mp/f): 1小節で音量が移行する(スラッシュが1小節を示す)
graph.light: 白基調の画面に変化graph.dark: 黒基調の画面に変化graph.title(XXX,YYY): 画面トップにタイトルとしてXXXを表示、サブタイトルとしてYYYを表示graph.ripple: 水紋パターン(default)graph.voice: 分割された各声部が円で表示されるパターンgraph.lissa: 二つのリサジューを結んだ線を表示するパターンgraph.beatlissa(n): Beat でリサジュー波形を表示するパターンn: 0-一つ、1-拍数
graph.sinewave: 音に合わせたサイン波graph.rain: 雨が降っている様子を模したパターンgraph.fish: 魚が泳いでいる様子を模したパターンgraph.jumping: 図形が beat に合わせて跳ねるパターンgraph.wavestick: 画面全体に、棒状の図形がサイン波の模様を作るパターンgraph.circlethreads: 画面中央に、ランダムな糸が円形に現れるパターンgraph.noteroll(a): Note の音高に応じて円がピアノロール風に現れるパターンa: v-上下、h-左右
- shift + space で、以下のように4段階で表示する Text の状況を変化させられる。4の次は1に戻る。
- 1: 通常の表示。Graphic は文字の後ろのレイヤーとして表示。
- 2: Scroll Text が少し薄くなる。Graphic は文字の前のレイヤーとして表示。
- 3: Scroll Text がかなり薄くなり、Input Window が非表示となる。Graphic は文字の前のレイヤー。
- 4: Graphic Pattern のみになり、Scroll Text と Input Window が非表示となる。Graphic は文字の前のレイヤー。
- [window_size] では、アプリを立ち上げた時のデフォルトのウィンドウサイズを設定できる
- [midi] では、Loopian のMIDI環境を設定できる
midi_out =以降に、Loopianから出力されるMIDIで発音する音源のdevice名を記載するmidi_ext_out =以降は、Loopian::ORBITにMIDIを出力する際、Loopian::ORBITに繋げるMIDI OUT端子を持ったdevice名を記載するmidi_device =以降は、Loopian::ORBITからMIDIを入力する際、MIDIを出力するdevice名を記載する- 上記device名は、Loopianを立ち上げた際、以下のようにターミナル上に出力される
--MIDI Output List--と書かれた行の後に、Loopianが出力できるMIDI Deviceが一覧で表示される--MIDI Input List--と書かれた行の後に、Loopianに入力できるMIDI Deviceが一覧できる
- [command] の
init_commandsでは、アプリ起動時に自動的に入力してほしいコマンドを、配列の形式で記述できる
- Loopian::ORBIT/QUBIT からの MIDI 情報は、
FLOWパートという内部パートが受信し、適切な処理を行う。 FLOWパートはFLOW.{...}のように、パート指定による Composition 入力が可能である- Phrase は入力できない
FLOW.dyn(mp): velocity 値をdyn()と同じ指定方法で変更するFLOW.dyn(): 引数に何も書かないと、入力 velocity と同じになる(default)
FLOW.static(...): 再生中でないときでも、引数で和音を指定できる- FLOWパートで再生されている Composition は、USB MIDI 経由で外部出力され、入力側は UART MIDI で受信する。
- Composition は、AAh-0rh-cch の形式で送信される。
- AAh : Poly After Touch を MIDI Ch.11 に送信
- 0rh : root (0-11)
- cch : CHORD_TABLE[] の index 番号
- Composition は、AAh-0rh-cch の形式で送信される。
- load フォルダ内のデータは以下の手順で再生する
- Loopianを立ち上げる
set.path(xxx)で再生したい曲データのフォルダ名(xxx)を指定!l.yyyで再生したい曲データを指定(yyy.lpnを再生したい場合、yyyのみを指定)!playor!pで、ロードされたファイル内容を転送するplayorpで、ロードされたデータを再生- 再生を終えたら、
stopor.で再生停止
- 小節途中から再生したいとき
!l.yyy.msr(M)で再生したいファイル名(yyy)を指定し、再生したい小節番号(M)を指定- 2回目以降は
!l.msr(M)とファイル名を省略可能
- 2回目以降は
resumeで再生
- 曲データを打ち込む際は、以下の手順で行う
- loadフォルダ以下に必要に応じて新しいフォルダを作成し、
xxx.lpnというテキストファイルを作成 - 冒頭に set 系コマンドなど、曲再生に必要な設定を行う
- 冒頭に clear を書き、その後 meter, key, bpm を設定
- load前の状態に画面が依存しないように、graph の設定も必要に応じて行う
- Variation機能の
@msr(M)=[]を用い、パートごとに曲データの打ち込みを行う(パート分割書法) - 適宜、コメントアウトして確認に不要なパートをミュートする
- 再生は
!l.*filename*.msr(n)(nは小節番号)を入力後、resumeで行い、任意の小節番号から再生を行うことで打ち込み内容を確認(filenameは、2回目以降省略可能)!l,set.msr(M),resumeと分割することも可能だが、!msr(M)を使用した場合、分割では途中読み込みをしないため、うまく動作しない
- 全パート打ち込んだら、パートごとの並びを小節順に並び替え、
!msr(M)=[]の表記で書き直す(継時処法)- パート分割書法を継時処法に自動に書き換える
!cnv2tlコマンドが利用可能 - こちらの書法のほうが、再生時の自動ロードで順次ロードされるので、視覚的に楽しめる
- パート分割書法を継時処法に自動に書き換える
- テンポ変化などを書き加える
- loadフォルダ以下に必要に応じて新しいフォルダを作成し、
- Phrase 入力の注意事項
- 小節を跨いだタイを実現するには、現状同じ行に記述するしかない
- 全曲を1小節一行で書くことができない場合がある
- 小節を跨いだタイを実現するには、現状同じ行に記述するしかない
- Loopianでは、ユーザーがなるべく音楽的な指示で操作できるように、音楽の再生状況などを解析して自動的に、音程、ベロシティ、タイミングなどを調整する
- 指定されたコードに合わせて、音程を自動変換する
- 単音の連続する八分音符以下のフレーズは、アルペジオ的奏法とみなし、なるべく同じ音が続かないようにする
- ベロシティ(音の強さ)を、拍やテンポに合わせて変化させている
- ベロシティをランダムにわずかにずらしている
- noped 指定されない限り、一番細かい和音指定に合わせて、ペダル情報を自動的に算出する
- 同じコードが続く場合、1小節に一度踏み替える



