Max/MSPによるMIDIプログラミング
提供:kuhalaboWiki
(版間での差分)
(→Keyを使って音階を鳴らす) |
|||
(1人の利用者による、間の79版が非表示) | |||
5行: | 5行: | ||
* 工芸大図書館蔵書検索 | * 工芸大図書館蔵書検索 | ||
− | *;[ | + | *;[https://www-lib.t-kougei.ac.jp/search/detail?rowIndex=0&method=detail&bibId=1001007489 トランスMaxエクスプレス]:前の版。プログラミングの手法、MIDI処理、オーディオ処理までなら、大体同じ。映像処理Jitterの記述がない。 |
− | * | + | *[http://akamatsu.org/aka/max/2061maxodyssey/ 2061:Maxオデッセイ] |
:Max/MSP+Jitterの。[http://akamatsu.org/aka/max/2061maxodyssey/ 公式サポートサイト] [http://www.kuhalabo.net/kxoops/modules/d3blog/details.php?bid=120 書評] | :Max/MSP+Jitterの。[http://akamatsu.org/aka/max/2061maxodyssey/ 公式サポートサイト] [http://www.kuhalabo.net/kxoops/modules/d3blog/details.php?bid=120 書評] | ||
− | :[http:// | + | :[http://akamatsu.org/aka/max/2061maxodyssey/%e8%bf%bd%e5%8a%a0%e8%b3%87%e6%96%99/#2061_sample_browser 追加資料](サンプルパッチなど) |
− | *[ | + | *[https://www.s-musiclab.jp/max_docs/mmj_docs/index.html Max/MSP/Jitterドキュメント日本語版] |
− | *[http:// | + | *[http://vud.org/max/ Max/MSP Externals] |
*[http://www.kuhalabo.net/~kuha/dokuwiki/doku.php?id=maxmspjitter Max/MSPに関する情報] | *[http://www.kuhalabo.net/~kuha/dokuwiki/doku.php?id=maxmspjitter Max/MSPに関する情報] | ||
*[http://www.maxobjects.com/ Max Objects DataBase] | *[http://www.maxobjects.com/ Max Objects DataBase] | ||
17行: | 17行: | ||
;ノートとは音符のこと。 | ;ノートとは音符のこと。 | ||
* 音の高さ、音の強さ、音の長さで構成される。 | * 音の高さ、音の強さ、音の長さで構成される。 | ||
− | * | + | **音の高さ note numberまたはpitch 0-127 ([http://www.kuhalabo.net/wiki/images/6/63/Notenumber1.png 図]) |
+ | **音の強さ velocity 0-127 ([http://www.kuhalabo.net/wiki/images/0/0f/Velocity.png 図]) | ||
+ | **音の長さ note ONからnote OFFまでの時間 ミリ秒(ms) | ||
+ | * noteoutにpitchとvelocityをメッセージとして送り、音を鳴らす。 | ||
+ | ** velocityが1-127のとき、note ON | ||
+ | ** velocityが0のとき、note OFF | ||
+ | * makenoteでduration(note ONとnote OFF)を作り、noteoutに送る。 | ||
* noteinでMIDI Keyboardからノートを入力する。 | * noteinでMIDI Keyboardからノートを入力する。 | ||
;notein | ;notein | ||
+ | *outlet | ||
# pitch | # pitch | ||
# velocity | # velocity | ||
26行: | 33行: | ||
;noteout | ;noteout | ||
+ | *inlet | ||
# pitch | # pitch | ||
# velocity | # velocity | ||
39行: | 47行: | ||
*outlet | *outlet | ||
# pitch 音の高さ(0から127) | # pitch 音の高さ(0から127) | ||
− | # velocity | + | # velocity note ON時の音の強さ(1から127)とNote OFF(velocity=0) |
;確認事項 | ;確認事項 | ||
56行: | 64行: | ||
;楽器番号(program) と音色の対応表 | ;楽器番号(program) と音色の対応表 | ||
− | * [ | + | * [[GM規格音色リスト]]( Program Number 1-128 ) |
− | + | * [[GM規格ドラムマップ]]( Note Number Channel 10 ) | |
− | * [ | + | |
;楽器は発音メカニズムによって大きく2つに分類できる。 | ;楽器は発音メカニズムによって大きく2つに分類できる。 | ||
128行: | 135行: | ||
* 左 × 右 | * 左 × 右 | ||
− | ;/ | + | ;/ 割り算 |
* 左 / 右 | * 左 / 右 | ||
− | ;% | + | ;% 剰余算(あまり) |
− | + | ||
− | + | ||
− | + | ||
* 左を右で割った余り | * 左を右で割った余り | ||
159行: | 163行: | ||
# message | # message | ||
− | == | + | == サブパッチ == |
* パッチ p パッチ名 | * パッチ p パッチ名 | ||
* inlet インレットで入り口をあける | * inlet インレットで入り口をあける | ||
197行: | 201行: | ||
== 自動作曲パッチの例 == | == 自動作曲パッチの例 == | ||
− | + | === notein noteout === | |
− | * | + | * noteinは、MIDIキーボードから、叩いた鍵盤の情報を入力値として受け取る |
+ | * noteinから得られる情報は、note number(pitch), velocity, channelである。nouteoutに渡すと、音が鳴る。 | ||
[[ファイル:Ex001 notein noteout.png]] | [[ファイル:Ex001 notein noteout.png]] | ||
206行: | 211行: | ||
[[ファイル:Ex001 noteOn Off.png]] | [[ファイル:Ex001 noteOn Off.png]] | ||
+ | === makenote === | ||
* makenoutでnote OFFを自動で出力する。makenoteには、デフォルトのvelocityとduration(msec)を指定する。 | * makenoutでnote OFFを自動で出力する。makenoteには、デフォルトのvelocityとduration(msec)を指定する。 | ||
[[ファイル:Ex001 mokenote noteout.png]] | [[ファイル:Ex001 mokenote noteout.png]] | ||
+ | === metro random === | ||
* metroでビートを発生させる。 | * metroでビートを発生させる。 | ||
* randomでランダムに数字を発生させる。ピッチを0-128の間でランダムに発音させている。 | * randomでランダムに数字を発生させる。ピッチを0-128の間でランダムに発音させている。 | ||
217行: | 224行: | ||
[[ファイル:Ex003 metro random calc makenote.png]] | [[ファイル:Ex003 metro random calc makenote.png]] | ||
+ | === channel === | ||
* channel 1とchannel 2 の2チャンネルでアンサンブルをする。 | * channel 1とchannel 2 の2チャンネルでアンサンブルをする。 | ||
* '''s''' (send)と '''r''' (recieve)で変数を使い、数値を送受信(send recieve)している。 | * '''s''' (send)と '''r''' (recieve)で変数を使い、数値を送受信(send recieve)している。 | ||
** 結線が複雑に絡み合うことを回避できる。 | ** 結線が複雑に絡み合うことを回避できる。 | ||
* loadbangでプログラム起動時に自動的にbangを送り、チャネルの初期値を設定している。 | * loadbangでプログラム起動時に自動的にbangを送り、チャネルの初期値を設定している。 | ||
+ | * channelを10に指定すると、ドラムセットになる。 | ||
[[ファイル:Ex004 metro random calc makenote 2ch.png]] | [[ファイル:Ex004 metro random calc makenote 2ch.png]] | ||
− | *'''+''' | + | === 音程 === |
− | + | *'''+'''演算子を使い音程を指定して、2つ音を重ねて発生させる。 | |
− | [[ファイル: | + | [[ファイル:Interval maxpatch.png]] |
+ | === 和音 === | ||
+ | * pipeを使って、3和音の発音タイミングをずらして鳴らす。 | ||
+ | [[ファイル:3chord maxpat.png]] | ||
+ | * 3和音の2つ目の音程と3つ目の音程に乱数で揺らぎを与える。 | ||
+ | [[ファイル:Chord02 maxpat.png]] | ||
+ | |||
+ | === スケール === | ||
* selを使って、発音するピッチを特定のスケールに限定している。 | * selを使って、発音するピッチを特定のスケールに限定している。 | ||
+ | * instrumental selectを使って、楽器を選択する。 | ||
[[ファイル:Ex006 metro random scale makenote.png]] | [[ファイル:Ex006 metro random scale makenote.png]] | ||
− | * | + | === コード進行 === |
− | * | + | * counterを使って、ビートを刻む。 |
+ | * selを使って、コードを選択する。 | ||
+ | * 1625コード進行(C,Am,Dm,G)を生成するパッチの例 | ||
+ | [[ファイル:ChordProgress1625 maxpatch.png]] | ||
+ | |||
+ | === ビート === | ||
+ | * tempoを使って、ビートを発生する。 | ||
+ | * matrix controlを使って、発音ビートのタイミングを指定する。 | ||
** tempoは、(BPM, 倍数,単位音符)を引数として指定する。 | ** tempoは、(BPM, 倍数,単位音符)を引数として指定する。 | ||
+ | ** BPMは、Beats Per Minuteの略で、1分間にビートがいくつあるかを示す。例えばBMP=120だと、1分間に4分音符が120個あるので、4分音符1個の時間は0.5秒になる。 | ||
+ | |||
[[ファイル:Ex007 metro random scale matrixcntl makenote.png]] | [[ファイル:Ex007 metro random scale matrixcntl makenote.png]] | ||
− | * 複数行のmatrix | + | * 複数行のmatrix controlを使用して、複数のビートパターンを指定する。 |
− | * | + | * ビートパターンをメッセージで数値で入力するには、(列番号,行番号,0[off]か1[on])で指定する。 |
− | * | + | * switchを使って、流れてくる信号の入り口を切り替える。 |
− | * | + | * randomで、信号の切り替えをランダムにする。 |
+ | * unpackはリスト内の複数の数値を個々に分解する。 | ||
[[ファイル:Ex008 metro random scale matrixcntl2 makenote.png]] | [[ファイル:Ex008 metro random scale matrixcntl2 makenote.png]] | ||
* switchを2つ使用し、1つをピッチのビート、もう1つをvelocityの強さの値を指定している。 | * switchを2つ使用し、1つをピッチのビート、もう1つをvelocityの強さの値を指定している。 | ||
* loadbangで、ビートパターンの初期値を設定している。 | * loadbangで、ビートパターンの初期値を設定している。 | ||
− | + | * presetで値を保存して、呼び出すことができる。 | |
+ | ;matrixcntlを使ったドラムシーケンス | ||
+ | [[ファイル:Drumseq maxpat.png]] | ||
+ | |||
+ | === サブパッチ === | ||
+ | パッチ内にサブのパッチを作ることができる。 | ||
+ | ;ドラムにピアノとベースパートを追加 | ||
+ | *'''p''' でピアノパート('''p piano''')とベースパート('''p bass''')のsubpatchを作る。 | ||
+ | *全体のパッチ | ||
+ | [[ファイル:3partsBlues_maxpat.png]] | ||
+ | |||
+ | *ピアノパート('''p piano''')のサブパッチ | ||
+ | **メロディはブルーススケールを使用 | ||
+ | **''' % 10 '''は10で割った余り(剰余系)が返ってくる。('''sel 0 1 2 3 4 5 6''') となっているので、0から6の場合は、それぞれの数値のoutletにbangが出力されるが、7,8,9の場合は、その他のoutletにbangが出力される。出力先にノート番号が割り当たっていると音符になり、それ以外は休符の扱いとなる。この例では、音符と休符が、7:3の比率で出力される。 | ||
+ | [[ファイル:PfpartsBlues_maxpat.png]] | ||
+ | |||
+ | *ベースパート('''p bass''')のサブパッチ | ||
+ | [[ファイル:BspartsBlues_maxpat.png]] | ||
+ | |||
+ | ;'''gate'''で特定のメッセージを止めたり、流したりする。 | ||
+ | [[ファイル:gate_maxpat.png]] | ||
+ | |||
+ | == Keyを使って音階を鳴らす == | ||
+ | |||
+ | ;Key | ||
+ | キーボードの押されたキーの[https://ja.wikipedia.org/wiki/ASCII アスキーコード]を10進数で返す。 | ||
+ | |||
+ | キーボードの2段目の並びのキー'''asdfghjkl'''を'''ドレミファソラシドレ'''に対応させ、'''makenote,noteout'''で音を鳴らす。 | ||
+ | |||
+ | [[ファイル:Key noteout.png|500px]] | ||
== Tips == | == Tips == | ||
256行: | 312行: | ||
== 参考リンク == | == 参考リンク == | ||
− | *[ | + | *[https://github.com/naotokui/MaxMSP_Objects/ naotokui/MaxMSP_Objects] |
− | * | + | *[http://www.kuhalabo.net/~kuha/nime/wiimu/ Wiiを使ったライブ演奏ムービの例]:遠藤綾香氏の作品例([http://nime2008.casapaganini.org/ NIME2008]に出展) |
− | + | ||
− | + | ||
− | + | ||
* Chikashi Miyama: "Angry Sparrow" http://www.youtube.com/watch?v=6U-TVZDaryE | * Chikashi Miyama: "Angry Sparrow" http://www.youtube.com/watch?v=6U-TVZDaryE | ||
+ | |||
+ | * Life Game Orchestra http://www.kuhalabo.net/~kuha/nime/lifegorch/ | ||
+ | |||
+ | * VT Piano http://www.kuhalabo.net/~web/vtp/ | ||
== 関連項目 == | == 関連項目 == | ||
− | + | ||
+ | == 参考 == | ||
+ | [[作曲演習]] | ||
[[Category:授業|授業]] | [[Category:授業|授業]] |
2024年9月1日 (日) 02:23時点における最新版
目次 |
[編集] 概要
- MIDIデータを自由にプログラミングし、音楽を自動生成させる。
- キーボード、マウス、MIDIコントローラから情報を取得する。
- MIDIコントローラからの入力をプログラミングし、リアルタイムに音楽演奏を変化させる。
- 工芸大図書館蔵書検索
- トランスMaxエクスプレス
- 前の版。プログラミングの手法、MIDI処理、オーディオ処理までなら、大体同じ。映像処理Jitterの記述がない。
- 2061:Maxオデッセイ
[編集] ノート
- ノートとは音符のこと。
- 音の高さ、音の強さ、音の長さで構成される。
- noteoutにpitchとvelocityをメッセージとして送り、音を鳴らす。
- velocityが1-127のとき、note ON
- velocityが0のとき、note OFF
- makenoteでduration(note ONとnote OFF)を作り、noteoutに送る。
- noteinでMIDI Keyboardからノートを入力する。
- notein
- outlet
- pitch
- velocity
- channel チャネル (1から16)
- noteout
- inlet
- pitch
- velocity
- channel チャネル (1から16)
- pitchとvelocity(>=1)がくると、音をだす。(note ON)
- pitchとvelocity(=0)がくると、音を消す。(note OFF)
- makenote
- inlet
- pitch 音の高さ(0から127)
- velocity 音の強さ(0から127)
- duration 音の長さ(1から***) ミリ秒(ms=1/1000秒)で指定
- outlet
- pitch 音の高さ(0から127)
- velocity note ON時の音の強さ(1から127)とNote OFF(velocity=0)
- 確認事項
- note on とnote offの関連を理解する。
- note offは,velocity の値が 0 の note on のこと。
- channel 10 はドラムセット
[編集] プログラムチェンジ
- programとは、音色のこと。
0番から127番までの128種類の楽器番号で音色を指定する。 (1番-128番のこともある)
- pgmout
- 楽器番号とチャネルを指定する。
- 楽器番号 ( 0から127 )
- channel
- 楽器番号(program) と音色の対応表
- GM規格音色リスト( Program Number 1-128 )
- GM規格ドラムマップ( Note Number Channel 10 )
- 楽器は発音メカニズムによって大きく2つに分類できる。
- 減衰振動系
- Note ON時に瞬時に音量が立ち上がり、Note OFFがなくても、やがて音が減衰して消える。
- ピアノ、ギター、ハープ、シロフォン、打楽器など。
- 自励振動系
- Note ONから徐々に音量が立ち上がり、Note OFFがくるまで音が持続して鳴り続ける。
- オルガン、バイオリン、クラリネット、サックス、トランペットなど。
[編集] 時間制御
- metro メトロノーム
- inlet
- トグル 1=ON, 0=OFF
- interval (ms)
- outlet
- bang バング
- bang バング
- 鉄砲玉のように「バン」とアクションを起こす
- tempo
- inlet
- トグル 1=ON, 0=OFF
- BPM
- 倍率
- ビート拍
- outlet
- bang バング
- delay
- inlet
- bang
- 遅延時間 (ms)
- outlet
- bang
- pipe
- inlet
- メッセージ
- 遅延時間 (ms)
- outlet
- メッセージ
[編集] 乱数(ランダム)
- パッチ random, drunk
- random 乱数を発生させる
- bang
- 発生させる数値の最大値
- drunk
- bang
- 発生させる数値の最大値
- 発生させる数値の揺れ幅
[編集] 算術演算
- パッチ + - * / % mod
- + 足し算
- 左 + 右
- - 引き算
- 左 - 右
- * 掛け算
- 左 × 右
- / 割り算
- 左 / 右
- % 剰余算(あまり)
- 左を右で割った余り
[編集] 条件分岐
- パッチ gate, sel, switch, if, route
- sel
- inlet
- message ( if )
- outlet
- message ( then )
- gate
- inlet
- ゲート(出口)番号
- message
- outlet
- message 1,2,3,4...
- switch
- inlet
- スイッチ(入口)番号
- message 1,2,3,4...
- outlet
- message
[編集] サブパッチ
- パッチ p パッチ名
- inlet インレットで入り口をあける
- outlet アウトレットで出口をあける
[編集] コントロールチェンジ
- パッチ ctlin, ctlout
- コントロール値, コントロール番号, channel
[編集] ピッチベンド
- パッチ bendin, bendout ピッチをシフトする(ピッチベンド)
- bendout
- inlet
- Pitch Bend値(–8192~8191)
- channel
[編集] ループカウント制御
- パッチ counter, uzi
[編集] キーボードとマウス
- パッチ key, mousestate
[編集] 値の設定、プリセット
- パッチ loadbang 起動時に自動的にbangを発生させる。
- パッチ preset 現パッチの数値、状態をボタンにセーブ(Shift+Click)、ロード(Click)ができる。
[編集] 保存した値を呼び出して再生
- パッチ coll, table
[編集] マトリクス制御、スライダーなど
- matrixctrl, pictslider
[編集] MIDIシーケンス録音、再生
- パッチ seq, midiformat, midiin, midiout
- MIDIメッセージをテキスト保存、再生
[編集] 自動作曲パッチの例
[編集] notein noteout
- noteinは、MIDIキーボードから、叩いた鍵盤の情報を入力値として受け取る
- noteinから得られる情報は、note number(pitch), velocity, channelである。nouteoutに渡すと、音が鳴る。
- note ON(鍵盤を押す)とnote OFF(鍵盤を離す)に注意する。velocity の値が0の時、note OFF
- 複数の数値を半角スペースで区切り、ひとまとめにして送ることができる。
- 複数の値をまとめたものをリストという。
[編集] makenote
- makenoutでnote OFFを自動で出力する。makenoteには、デフォルトのvelocityとduration(msec)を指定する。
[編集] metro random
- metroでビートを発生させる。
- randomでランダムに数字を発生させる。ピッチを0-128の間でランダムに発音させている。
- pgmoutで楽器を選択する。
- 算術演算子 + を使って、randomで発生させる数字を、調整している。
[編集] channel
- channel 1とchannel 2 の2チャンネルでアンサンブルをする。
- s (send)と r (recieve)で変数を使い、数値を送受信(send recieve)している。
- 結線が複雑に絡み合うことを回避できる。
- loadbangでプログラム起動時に自動的にbangを送り、チャネルの初期値を設定している。
- channelを10に指定すると、ドラムセットになる。
[編集] 音程
- +演算子を使い音程を指定して、2つ音を重ねて発生させる。
[編集] 和音
- pipeを使って、3和音の発音タイミングをずらして鳴らす。
- 3和音の2つ目の音程と3つ目の音程に乱数で揺らぎを与える。
[編集] スケール
- selを使って、発音するピッチを特定のスケールに限定している。
- instrumental selectを使って、楽器を選択する。
[編集] コード進行
- counterを使って、ビートを刻む。
- selを使って、コードを選択する。
- 1625コード進行(C,Am,Dm,G)を生成するパッチの例
[編集] ビート
- tempoを使って、ビートを発生する。
- matrix controlを使って、発音ビートのタイミングを指定する。
- tempoは、(BPM, 倍数,単位音符)を引数として指定する。
- BPMは、Beats Per Minuteの略で、1分間にビートがいくつあるかを示す。例えばBMP=120だと、1分間に4分音符が120個あるので、4分音符1個の時間は0.5秒になる。
- 複数行のmatrix controlを使用して、複数のビートパターンを指定する。
- ビートパターンをメッセージで数値で入力するには、(列番号,行番号,0[off]か1[on])で指定する。
- switchを使って、流れてくる信号の入り口を切り替える。
- randomで、信号の切り替えをランダムにする。
- unpackはリスト内の複数の数値を個々に分解する。
- switchを2つ使用し、1つをピッチのビート、もう1つをvelocityの強さの値を指定している。
- loadbangで、ビートパターンの初期値を設定している。
- presetで値を保存して、呼び出すことができる。
- matrixcntlを使ったドラムシーケンス
[編集] サブパッチ
パッチ内にサブのパッチを作ることができる。
- ドラムにピアノとベースパートを追加
- p でピアノパート(p piano)とベースパート(p bass)のsubpatchを作る。
- 全体のパッチ
- ピアノパート(p piano)のサブパッチ
- メロディはブルーススケールを使用
- % 10 は10で割った余り(剰余系)が返ってくる。(sel 0 1 2 3 4 5 6) となっているので、0から6の場合は、それぞれの数値のoutletにbangが出力されるが、7,8,9の場合は、その他のoutletにbangが出力される。出力先にノート番号が割り当たっていると音符になり、それ以外は休符の扱いとなる。この例では、音符と休符が、7:3の比率で出力される。
- ベースパート(p bass)のサブパッチ
- gateで特定のメッセージを止めたり、流したりする。
[編集] Keyを使って音階を鳴らす
- Key
キーボードの押されたキーのアスキーコードを10進数で返す。
キーボードの2段目の並びのキーasdfghjklをドレミファソラシドレに対応させ、makenote,noteoutで音を鳴らす。
[編集] Tips
[編集] 日本語フォントの文字化け対策
Macintoshで書かれたMaxパッチの日本語コメントは,Osakaフォントであることが多く、Windowsでは文字化けする。対処方法は以下のとおり。
- 各コメントを選んで,適当なWindowsのフォント(例:MS Pゴシック)を指定。
- Maxをインストールしたフォルダ内の[Cyclin'74]フォルダ内の[init]フォルダにあるmax-fontmappings.txtに以下の一文を追加して、フォントを一括置換。
max system windows genericfontmap Osaka "MS Pゴシック";
[編集] 参考リンク
- naotokui/MaxMSP_Objects
- Wiiを使ったライブ演奏ムービの例:遠藤綾香氏の作品例(NIME2008に出展)
- Chikashi Miyama: "Angry Sparrow" http://www.youtube.com/watch?v=6U-TVZDaryE
- Life Game Orchestra http://www.kuhalabo.net/~kuha/nime/lifegorch/
- VT Piano http://www.kuhalabo.net/~web/vtp/