GithubHelp home page GithubHelp logo

namihey's Introduction

namilogo

namihey Alpha-version

about namihey

"namihey" is a music description language being developed mainly for Live Coding. The main feature of namihey is the ability to specify tones by a gradation with a movable-do. It is written in python and output to MIDI by the pygame library.

namihey とは

namihey は、Live Coding などで使うために開発しているテキストベースの音楽記述言語です。 音の指定を、移動ドによる階名で指定することを大きな特徴とします。 python によって記述され、pygame を使用して MIDI 出力します。

用語集 (Glossary)

  • phrase : 階名にて指定する単パートの音群
  • pattern : ランダムなど決められたアルゴリズムに従って自動生成された音群
    • パターンには Random と Arpeggio がある
  • description : phrase/pattern が記述されたテキストデータ
  • loop : namihey は基本的に、phrase/pattern の繰り返しを延々と演奏する。この繰り返しのこと。
  • part : 一つの音色、楽器による演奏データ、イベント
    • phrase や pattern は part ごとに設定できる
    • part は必ず小節の切れ目まで演奏される
  • block : 最大5partをひとまとめにして演奏できる単位

起動と終了

  • 起動
    • 'python namihey.py' : 通常の python スクリプトと同じ
  • 入力
    • '[0][1]~~> ' : nami prompt
      • [0][1]は、block 0, part 1の入力状態であることを示す
      • このプロンプトの後に、コマンドやフレーズを書き込む
    • カーソルによる過去入力のヒストリー呼び出しが可能
  • 終了
    • 'quit' 'exit' : 終了

音を出すための外部環境

  • 外部 MIDI 音源を繋ぐ
  • マルチパートで MIDI受信するアプリを同時に起動する。以下のアプリで動作確認済。
    • Logic : Mac で MIDI 演奏するための DAW
      • なお Garage Band では同時に複数チャンネルのMIDI Inを入れることが出来ない
    • Super Collider
    • namiheySynth

再生コントロール

  • 'play' 'start' : シーケンス開始
  • 'fine' : この小節の最後でシーケンス終了
  • 'stop' : 直ちにシーケンス終了

Phrase 追加

  • [note][duration][velocity] : フレーズ追加の Description

    • note: 階名
    • duration: 音価
    • velocity: 音量
    • [duration] と [velocity] は省略可能
      • 階名と音価と音量の全体の数が合わないとき、階名の内容で数を合わせる。
      • 音価と音量は、足りない時は最後の数値がそのまま連続し、多い時は途中で打ち切られる。
      • 音価を省略した場合全て四分音符とみなし、音量を省略した場合100(mf)とみなす。
    • [] : 全データ削除
  • 階名表現

    • d,r,m,f,s,l,t: ド、レ、ミ、ファ、ソ、ラ、シ
    • di,ri,fi,si,li: ド#、レ#、ファ#、ソ#、ラ#
    • ra,ma,sa,lo,ta: レb、ミb、ソb、ラb、シb
    • -d: 1オクターブ下のド、 +d: 1オクターブ上のド、--d: 2オクターブ下、++d: 2オクターブ上
    • ',' '|' : カンマ、縦棒、どちらで区切っても良い
    • x: 休符
    • d=m=s, : 同時演奏
    • |:d,r,m:3| : ドレミを3回繰り返し、合計4回演奏(数字がなければ1回繰り返し)
    • <d,r,m>*4 : ドレミを4回演奏
    • d*4 : ドを4回連続して発音
  • 音価表現

    • [8:] , [:8] は基準音価が 8 であることを示す
      • 基準音価は任意の数値が指定可能で、全音符の長さの何分の1かを示す数値となる
      • 基準音価(:n, n:)を省略した場合、全て四分音符とみなす
    • [1,1,1,1:8] : 八分音符を4回
      • :n と基準音価を書く場合、各音の音価指定の後ろに書く
      • [8:1,1,1,1] : n: と書く場合、各音の音価指定の前に書く
      • [2,1,2,1,3:12] : 一拍3連(12分音符)で、タータタータター
      • [1:2] のように書くと、どちらが基準音価か分からないので、値の大きい方を基準音価とみなす
    • [<2,1>:12] : とすると、この後もずっと 2,1 の長さを繰り返す
      • <2,1>*2 のように階名と同じように繰り返し回数の指定ができる
      • 繰り返し記号の終わりが音価表現全体の最後の場合、このパターン全体を回数制限なく繰り返すが、最後でないと回数指定分しか繰り返さない。
    • [:8(80%)] 音価指定の後に (nn%) とすると、実際の発音時間がそのパーセントの短さになる
      • (stacc.) と書くと 50% になる
  • 音量表現

    • 省略した場合、全て velocity=100 とみなす
    • [127,127,127,127] : MIDI velocity=127 を4回
    • [ff,f,mf,mp,p,pp] : ff-pp で音量を表現できる
    • [<f,p,mf,p>] : とすると、この後もずっと f,p,mf,p のパターンを繰り返す
      • <f,mp>*2 のように階名と同じように繰り返し回数の指定ができる
      • 繰り返し記号の終わりが音量表現全体の最後の場合、このパターン全体を回数制限なく繰り返すが、最後でないと回数指定分しか繰り返さない。

Arpeggio Pattern 追加

  • {arp(prm):chord}{length}{velocity} : Arpeggio Pattern の Description

    • prm: アルペジオのパラメータ
    • chord: アルペジオのコード、カンマで区切って時系列で表現可能
    • length: パターンの小節数、カンマで区切って、上の対応するコードが持続する小節数を表現する
    • velocity: 音量、同様にカンマで区切って、対応するコードの音量を表現
    • {length} と {velocity} は省略可能
      • 長さを省略した場合全て1小節とみなし、音量を省略した場合100(mf)とみなす。
    • {} : 全データ削除
  • Detail of description

    • パラメータ
      • (ptn=sawup, ofs=5, dur=8) : ptn/ofs/durの指定
      • 必ずデフォルト値を持ち、省略が可能
      • ptn 以下の4種類
        • 'sawup' : 下から上にアルペジオする
        • 'sawdwn' : 上から下にアルペジオ
        • 'triup' : 下から上、上から下に往復するアルペジオ
        • 'tridwn' : 上から下、下から上に往復するアルペジオ
      • ofs : 中心音の位置 (0-11 default:0)
      • dur : アルペジオの1音符の音価。数値は基準音価と同じ(default:8) 8以下は2拍のアルペジオ、8より大きいときは1拍のアルペジオ
    • コード名
      • I : d=m=s(Iの和音)
        • ローマ数字: I, II, III, IV, V, VI, VII
      • I# : di=mi=si (数字の後に # を付けると半音高いコードになる。b は半音)
      • V : s=t=r (Ⅴの和音)
      • VIm : l=d=m (m: minor)
      • IVM7 : f=l=d=m (M7: major7th)
      • IIIm7-5 : m=s=ta=r (m7-5: minor7th -5th)
      • diatonic : d=r=m=f=s=l=t (Diatonic Scale)
      • lydian : d=r=m=fi=s=l=t (Lydian Scale)
      • all : 全ての音
    • 使用例
      • ex1) {arp(ptn=sawup,dur=16):all}{2}{mp} : 16分音符の半音アルペジオ、2小節分、mpで
      • ex2) {arp:VIm,IV,V,I}{1,1,1,1}{mf} : 1小節ごとに指定した和音をアルペジオ、mfで

Random Pattern 追加

  • {rnd(prm):chord}{length}{velocity} : Random Pattern の Description

    • アルペジオと同じ
  • Detail of description

    • パラメータ
      • (rgn=5, ofs=5, dur=8) : rgn/ofs/durの指定
      • 必ずデフォルト値を持ち、省略が可能
      • ofs : 中心音の位置 (0-11 default:0)
      • rgn : 中心からの広がり、12で±1オクターブ(1-12 default:12)
      • dur : ランダム音の音価。数値は基準音価と同じ(default:8)
      • prb : 上の音価における出現確率の調整(0-100[%] default:100)
    • コード名
      • アルペジオと同じ
    • 使用例
      • ex1) {rnd(dur=16):all}{2}{mp} : 16分音符で全音域ランダム、2小節分、mpで
      • ex2) {rnd:VIm,IV,V,I}{1,1,1,1}{mf} : 1小節ごとに指定した和音をランダムに、mfで

入力環境コマンド

  • 'copyto 2' : 入力中のpartのフレーズ/パターンを part2 にコピー
  • 'input 1' 'part 1' : part 1への入力切り替え(1〜5)
  • 'show [all]' : 現在の入力パートのフレーズ/パターンを一行で表示(allで全パートを5行で表示)(未実装)
  • 'midi 1' : MIDI PORT 1 を選択
  • 'color 0' : Namihey Indicator の背景色を赤にする(1:緑、2:青)
  • 'panic' : 今鳴っている音を消音する

調、テンポ、拍子、音量

  • 'set bpm=100' : BPM(テンポ)=100 にセット
  • 'set beat=4/4' : 拍子を 4/4 にセット
  • 'set key=C4' : key を C4 にセット
    • namihey にとって key とは [d](ド) と指示されたときの音名を表す
    • デフォルト値は C4(midi note number=60)
    • 音名は C-B と大文字で表現し、必要に応じて前に #, b を足すことができる
    • 音名の後ろの数値はオクターブを指示するが、省略可能
      • 省略した場合、今設定されているオクターブがそのまま適用される
    • set 以降に all を付け足すと、全 part に効果、付けなければ入力中の part に対してのみ効果
  • 'set oct=+1' : 現状から1オクターブ上げる
    • set 以降に all を付け足すと、全 part に効果、付けなければ入力中の part に対してのみ効果
    • 'set oct=0,0,0,-1,+1' : 5つのパートのオクターブを一度に設定できる
  • 'set balance=7,7,4,4,4' : 5つのパートの音量バランスを変更できる(数値は 0-10, default:7)
    • 'balance' 以外に 'volume' も可
  • 'set pan=L10,C,R10,R5,L3' : 5つのパートのパンを変更できる(値は L10-C-R10, default:C)
  • 'set pgn=1,2,3,4,5' : 5つのパートの Program Number を変更できる(値は 1-128, default:1)
  • 再生中でも設定可能。再生中の場合、次のループから反映される

パターン、フレーズのセーブ、ロード機能

  • パターンとフレーズのデータのみ、セーブ、ロードすることができる
  • セーブされたファイルは、拡張子が nmhy のテキストファイルで、一行に一つのパターン、或いはフレーズが番号付きで記録されている
  • 'save filename' で、現在の各パートのパターン、フレーズが一度に全部セーブされる
    • 一つのパートは1行で記述され、最大5行が追加される。
    • ファイルはカレントフォルダのみにセーブされる
    • セーブ時に同じファイル名があった場合、ファイルの後ろに追記される
  • 'load filename' で指定されたファイルの内容が表示され、その中の何行目を選ぶかを選択するプロンプトが現れる
    • '[load]~~>' の後に行番号を書き、ロードするパターン或いはフレーズを指示する
    • 'load filename nn' と nn でフレーズを直接指示することもできる(未実装)
    • 'load filename all' と書いた場合、ファイルの先頭5行を5パートにそれぞれロードする(未実装)
  • パターン {}、フレーズ [] の後に '> filename' と書くと、そのファイル名の最終行に保存する(リダイレクト)(未実装)
  • 上記のファイル名の指定では拡張子を書く必要はない
  • nmhy ファイルの各行の終わりに '-> (行番号)' と書き込むことで、チェーンロード機能が実現できる。
    • 再生時、その行が再生し終えたら、矢印の後の行番号に自動的に移動する。
    • 行指定は、直接行番号を書くだけでなく、'+N'と相対距離を書くことも可能である。
    • チェーンロードの場合、最初の有効な5行がそれぞれ5パートの最初のフレーズに設定される。
    • '->end' でそのパートの再生は終わり。全行に '->' が書かれていなければロード時にエラー。
    • チェーンロードが設定されたファイルの場合、再生行を選択するプロンプト'[load]'は現れない。
  • チェーンロード機能の特殊ルール
    • 行頭に '#' が書かれている場合、その行はコメントとなり無視される。
    • 行頭に '&' が書かれている場合、前のフレーズと小節が1小節分、重なる。
      • [d,r,m,f,s,l,t,x]
      • &[x,+d,t,l,s,f,m,r][6,1,1,2,2,2,2:8]
        • 前のフレーズと1小節重なり、4拍目から再生する。
      • ただし、前のフレーズも重なるフレーズも最低でも2小節はあるべきである。
      • 上記のようになっていない場合、再生の不具合が発生する可能性がある。

namihey's People

Contributors

hasebems avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.