最新記事

MAX 7 MIDI基礎7

polyオブジェクトは、ホールド状態の音数を制限するオブジェクトである。 アーギュメント内に指定された数値分だけ音数を通過させるが、それを超えたものは出力しないようになっている。また、超えた数値は最右アウトレットからそのノートナンバーとベロシティがリスト化されて出力される。 polyオブジェクトでは、ホールド中の個々のノートオンに対して、ボイス番号という通し番号をそれぞれにつけて第1アウトレットから出力する。 これらの機能を利用する琴江、polyは同時発数音を制限したりコントロールしたりできる。

MAX 7 シンセサイザー基礎5

loresオブジェクトは、IIR構造をもつレゾナンス付きローパスフィルターである。 第3インレットに、レゾナンスの値を0〜0.99....の範囲で入力することで、カットオフ周波数付近での共鳴の度合いと、スロープの傾きをコントロールする。 ただし、レゾナンス値が1以上になってしまうと、フィルターが発振して耳障りなサウンドになるので、clipオブジェクトを使用して0〜0.99乃範囲に制限するのが良い。 また、第2インレットにはカットオフ周波数を与えるが、次のパッチではrandオブジェクトによってランダムに変化するシグナルでカットオフ周波数をコントロールしている。 ↓ステレオでの風音を生成。

MAX 7 シンセサイザー基礎4

基本的なフィルターの種類。 ・ローパスフィルター ローパスフィルターは、低い周波数隊を通過させ、高い周波数隊を通過させにくい周波数特性をもつ。 フィルターを通過することにより、元の振幅が3dB下がる周波数ポイントをカットオフ周波数と呼び、これはフィルターの特性を示す重要な要素となる。 通常、フィルターにおいてはカットオフ周波数が自由に設定することが出来る。 ・ハイパスフィルター ハイパスフィルターは、高い周波数隊を通過させ、低い周波数隊を通過させにくい周波数特性をもつ。 ・バンドパスフィルター bバンドパスフィルターには、中心周波数以外に帯域幅(Band width)、Q、ゲインがある。 バンドパスフィルターの場合、元の振幅が3dB下がる周波数ポイントは中心周波数を破産で二つあるが、帯域幅はその間隔を表している。帯域幅が小さくなる程、周波数特性の山の傾斜が急になり、狭い範囲の周波数しか通さない。 Q値は中心周波数を帯域幅で割った値で、Q値が大きい程山の傾斜は急になる。 Qの値が大きいバンドパスフィルターは、フィルター内部の共鳴(レゾナンス)が大きく、その中心周波数に近い帯域で強震を引き起こす場合がある。その結果、ハウリングのようにもとのサウンドが消えてもフィルター自体がなり続けることがある。 ・バンドリジェクトフィルター バンドリジェクとフィルターは(別名バンドエリミネーション/バンドストップフィルター)は、設定された周波数を中心とする一定範囲の周波数帯域を通過させにくい周波数特性をもつ。バンドリジェクトフィルターも中心周波数とQおよびゲインによりその特性をコントロールすること

MAX 7 シンセサイザー基礎3-2

ioscbankオブジェクトによる加算合成の続き。 ioscbankオブジェクトの第1インレットへ、[set ,インデックス0番の周波数, 振幅, インデックス1番の周波数, 振幅, ...]というリストを送ることでも活用できる。 一見少しややこしいが、次のパッチを見ていきたい。 まずは上記のリストを再現するため、0〜63番に相当する周波数と振幅を定めなければならない。 そこで、まずuziオブジェクトを用いて1〜64のbangをいっせいに放ち(このbangの順番がインデックス番号)、周波数設定で[random10000]すなわち1Hz〜10kHzをランダムに生成(本来、条件指定とgateオブジェクトで可聴範囲内にするのが良い)。 続いてもう一つのrandomオブジェクトを(1〜64)÷64で0.015〜1.000の範囲でランダムに変動するように設定。そのそれぞれの値をpackでリスト化し、そのリスト化された周波数と振幅の×64番号分を、さらにthreshオブジェクトでリスト化する。 そうすることで、メトロオブジェクトがbangするごとに、64個分の合成されたシグナルが出力されることになる。 また、freqsmoothメッセージとmagsmoothメッセージは、それぞれのオシレーター周波数と振幅の変化時間をサンプル単位で設定するもので、設定された時間をかけて周波数と振幅を滑らかに連続的に変化する。ただ、受け取る数値がサンプル単位なので、ここではmstosampsメッセージを使ってmsec単位に変換している。 また、次のパッチでは、multisliderオブジェクトによって64個の

MAX 7 シンセサイザー基礎3

加算合成は、音響合成の第一歩であり、理屈上ではこの方法であらゆる音色を合成することが可能であるはずである。しかしながら、現実に耳にする複雑な音は、数多くの部分音で構成されており、それらのバランスも刻々と変化している。これを加算合成で再現しようと思えば、膨大な下図のオシレーターを用意し、それぞれにも膨大なパラメーターのコントロールが必要になる。 ここでは、一つのオブジェクトを使って複数のオシレーターを加算したのと同等のシグナルを生成するioscbankオブジェクトによる加算合成を実施する。 ioscbankオブジェクトは、最初のアーギュメントを搔き込まなければ初期状態で64個のオシレーターが準備される。これらの内部オシレーターは、共通した一つの波形を出力し、初期状態ではサイン波となっている。よって初期状態の場合には、64個のcycleオブジェクトを並べて出力をミックスするのと同じ状態を1つのオブジェクトで行ってしまう。 この各オシレーターには、0番〜63番までのインデックス番号がついており、第4インレット(右端)にコントロールしたいオシレーター番号を選択する。 また、選択されたオシレーターに対して第1インレットでは周波数、第2インレットでは振幅を設定するが、多数のオシレーターの出力シグナルがミックスされるため、振幅の値は非常に小さくする必要がある。maxではこの振幅をマグニチュードと呼ぶ。

MAX 7 シンセサイザー基礎2

LFOについて。 LFOとは、Low Frequency Osillatorの略称で、可聴範囲を超えた非常に低い周波数で動作するオシレーターのことである。 低い周波数とはつまり、例えば1秒間で-1〜1の範囲を数回繰り返すようなパラメーター発生機とも言い換えることが出来る。このLFOによって、周波数や音量、フィルター特性等様々なパラメーターをコントロールすることが可能だが、ここでは、LFOによるビブラート機能を作成する。 例えばLFOとして、cycleオブジェクトを選び、1秒間に2回周期のシグナルを出力させる。 そしてそのシグナルに任意の値xを乗算させることで、1秒間に-x〜xの範囲のシグナルが出力されることとなる。 そして次に、phasorオブジェクトを用意し、設定した周波数Fに、上記のシグナルを加算させる。すると、最終的に出力される周波数は、F-x〜F+xの揺れるシグナルを発生させる。 レコーディング方法 簡易シンセから発生するサウンドをレコーディングしたい場合の保存方法は、sfrecordオブジェクトで行う。まず、openメッセージを繋いでダイアログを開き、保存したい場所を指定した後、toggleオブジェクトによって[1]を与えればレコーディングを開始し、オフ時の[0]を与えれば停止する。

MAX 7 シンセサイザー基礎1

シンセサイザーの心臓部は、様々なサウンドを作り出す音響合成部であろう。 ここでは、その第一歩としてフィルターによる音色の変化を試してみる。これはアナログシンセサイザーでもよく知られた方法で、音響合成では減算合成といわれるテクニックの初歩的なものに当たる。 MAXでは、ローパスフィルターをはじめ、様々な特性をもつデジタルフィルターが個別のオブジェクトとして多数存在しているが、その中でもfiltergraphオブジェクトとbiquadオブジェクトの組み合わせが、視覚的にフィルター特性をコントロールでき、しかも1つで何役もこなす万能フィルターとして非常に便利である。

MAX 7 オーディオ処理基礎5

functionオブジェクトは、サウンドにエンベロープを設定するオブジェクトである。 パッチ上におかれたfunctionオブジェクトは、グラフィカルなエンベロープ・エディターとして機能する。 エディターのY軸はエンベロープのレンジを表し、初期設定では0〜1になっている。また、X軸は時間感覚(デュレーション)を表現し、初期設定では0〜1000msecだが、レンジ/デュレーションともに、[setrange 数値 数値]/[setdomain 数値]というメッセージを与えれば変更することが可能である。 また、エディター上をクリックすることでブレークポイントが追加され、それを自由な位置にドラッグすることで好きな形のエンベロープを描ける。shiftキーを押しながらブレークポイントをクリックすれば、そのポイントは消去される。 [lineオブジェクトと音設定2]でも紹介したが、functionオブジェクトは、第2アウトレットからエンベロープ情報を出力する。その出力のされ方は以下のように、最初の0地点と、それ以降の各ポイントおよびそこに辿り着くまでのデュレーションがリストとなって吐き出される。 さて、ここで注意が必要なのが、出力される第1ポイントを省かなければならないということである。それは、0とその次の数値の急激な変化によってクリックノイズが発生してしまうからである。 よって、ここではrouteオブジェクトを使用することで、出発点値とリストと分離させ、リストのみをlineオブジェクトに送っていく。

MAX 7 オーディオ処理基礎4

今回は、MIDIコントローラーの鍵盤を弾く強さ、あるいはksliderをクリックする上下位置(鍵盤の奥に行く程大きくなる)、つまりはベロシティによって実際のサウンドに強弱をつけるパッチを作る。 ベロシティは、0〜127までの整数のため、これを0〜1へ変更したいので、[/ 127]を用いて変換する。デフォルトで0〜127の整数メッセージを出力するオブジェクトが多くあるので、この行程は覚えておきたい。いつでも呼び出せるようにサブパッチを作っておくのもよいであろう。 ちなみに、次のパッチでは、stripnoteオブジェクトを挟むことで、ノートオフを送信せず、次のノートを弾くまで鳴りっぱなしにさせている。 また、send/recieveオブジェクトを用いることで、配線を見やすくするのも大切なことである。

MAX 7 オーディオ処理基礎3

line〜オブジェクトは、2つの数値を受け取ると、それを"目標値"と"目標値までの到達時間"と解釈して、現在地点と目標地点の2点の間を滑らかに結ぶ補完作業を行う。 これによって、例えばボリューム操作を行う時の、波形の不連続が起こすクリックノイズを解除することが出来る。また、ボリュームだけではなく、周波数やその他様々なオブジェクトのパラメーターを滑らかで連続的にコントロールしなければならない場面に重宝するオブジェクトとなる。 これと関連して、gainオブジェクトがある。gain オブジェクトは垂直スライダーと形状がよく似ているが、シグナルを扱うオブジェクトであり、フェーダーによってボリュームをコントロールする。 右インレットがlineオブジェクトで言うところの目標数値への到着時間となり、ここに数値を与えてフェーダーをコントロールすることで滑らかな変化を実現できる。 ※gainオブジェクトは、MIDIにおけるボリューム(0〜127)と同様の考え方による、指数曲線でボリュムをコントロールする。フェーダーの値は127が基準値0dBとなり、[*〜]オブジェクトで1を乗算した状態と同じになる。 そこから10減少して117になれば-6dB、さらに減少して107になれば-12dBとなる。つまり、フェーダー10単位で6dBごとに変化するわけである。 さて、dB単位の話が出てきたので、少し掘り下げて改めて音圧とdBについて復習してみたいと思う。 そもそも、音には重さも面積もないので、計測の仕方は空気の圧力とその倍率で行うこととなる。つまり、ある基準を作り、その基準に対してどのくらいの音圧すなわちエ

MAX 7 オーディオ処理基礎2

今一度、MIDIノートナンバーを整理する。 MIDIノートナンバーは、MIDIコントローラーの鍵盤左端から順に0〜127の数値を割り当てたもので、これによって音高、すなわち音程・ピッチを表すものである。 例えば、中央のドは60、ラは69等となる。1オクターブで12音ずつ構成される。 一方、周波数においてこの考え方は大きく異なる。 周波数は物理現象としての音を分析して得られたものである。高さを感じられる音は周期的に繰り返される波形(倍音)を含んでおり、この周期的な波形が1秒感に何回繰り返されるかという回数が周波数である。 また、ある音高の1オクターブ上の音高は、ノートナンバーでは12を足したものであったが、周波数ではその2倍となる。同じく1オクターブ下は1/2倍になる。例えば、中央ラ(440Hz)の伊オクターブ上は880Hz、1オクターブ下は220Hzという感じである。 このように、ノートナンバーでは加算減算であるも、周波数では乗算除算によって行う。さらに音程はノートナンバーでは差、周波数では比の関係となるので注意したい。 以上の基本的な知識を頭に入れてプログラミングをしていくわけであるが、例えばどの音程の周波数が何ヘルツになるか等覚えておくのは大変なので、周波数に変換するオブジェクトとしてmtofオブジェクトを使ってノートナンバーを周波数に変換することができる。 さて、ボリュームを上げたり外部オーディオ出力を行うために、dacやezdacオブジェクトが受け取る最終的なシグナルは-1〜1の範囲内になければならない。もしこれを超えた場合、耳障りなクリッピングノイズが発生してしまう。

MAX 7 オーディオ処理基礎1

scopeオブジェクトを用いて、波形を視覚的に表示させるパッチを作る。 cycleオブジェクト(sin波)から直で接続する場合と、ボリューム処理後を表示させる。 phasorオブジェクトは、ノコギリ波を出力するオシレーターオブジェクトである。scope表示で分かる通り、ノコギリ波は0〜1へ直線的に変化するシグナルである。ノコギリ波は多くの倍音を含んでおり、サイン波と並んで音響合成で重要な波形となる。 次に、短形波シグナルを発生させるtrainオブジェクトであるが、短形波はパルス波とも呼ばれ、そのサウンド奇数倍音(3,5,7,9,...)を豊富に含む特徴をもっている。 また、trainオブジェクトはcycleやphasorのような周波数の与え方とは異なっており、第1インレットにはmsec単位での周期が与えられることになっている。 仮にこの周期をTとすると、周波数Fは1000(msec)÷Tで求められる。 この除算を組み込むことによって、cycleやphasorと同じように主端数でコントロールできるようになる。

MAX 7 MIDI基礎6

ノートメッセージを分析して、数値を報告するオブジェクトとしてboraxオブジェクトがある。 boraxオブジェクトは9このアウトレットをもち、それぞれからノートオンごとのカウントであるボイス番号や、ノートナンバー、ベロシティ、前のノートオンからの経過時間であるデルタタイムなどを出力する。 ・midiin/outオブジェクト [144, 60, 127]といった本来のMIDIメッセージをraw MIDIメッセージと予備、その受信用オブジェクトとしてmidiinオブジェクト、送信用オブジェクトとしてmidioutオブジェクトがある。 また、midiparseオブジェクトは、受信したMIDIメッセージのうち代表的なものをフィルタリングして扱いやすい形で出力できる。 一方、midiformatオブジェクトはパッチ内で処理されたMaxメッセージを本来のMIDIメッセージにフォーマットしてmidioutに渡してくれる。 ・seqオブジェクトでは、SMF(スタンダードMIDIファイル)を読み込み、再生することが可能である。 readメッセージで任意のファイルを読み込んだ後、bangあるいはstartメッセージを第1インレットに受信すれば、MIDIファイルの再生を行い、stopメッセージで停止する。 なお、発音中にstopメッセージを押すと鳴りっ放し状態が起きてしまうため(どうやらこのstopメッセージは各MIDIノートとベロシティに対してではなく、seqオブジェクトとして全体にかかっているようでだ)、midiflushオブジェクトを挟み込むことで解決できる。 midiflushは、noteo

MAX 7 MIDI基礎5

ノートメッセージにおいて、ノートオンが送信された後に必ずノートオフが送信されなければ、"音の鳴りっぱなし"という現象が発生する。実際にMIDIを扱うプログラムを進めていると、ノートオンに対応すべき適切なノートオフが送信されないケースもある。 例えば、noteinで受信したノートメッセージのノートナンバーに一定の値を加え、キートランスポーズする際、鍵盤を話す前(ノートオフを送信する前)に変更してしまうと、オフを受信していない前のノートが鳴りっぱなしに鳴ってしまう。 flushオブジェクトを使用することで、この現象を解決することが出来る。 flushオブジェクトは、左右のインレットにノートナンバーx・ベロシティyの数値を受け取ったとき、そのまま通過させるのと同時に、内部に一時的に格納する。この格納された状態で左インレットにbangメッセージを受け取ると、flushオブジェクトは内部に格納していた先程のノートナンバーx・ベロシティyを, ノートナンバーx・ベロシティ0に変えて出力する。これをnoteoutオブジェクトと組み合わせると、いつでも強制的に鳴りっぱなしのオフにすることができる。 一方、sustainオブジェクトはホールド(鳴りっぱなし)状態を意図的に作り出し、トリガーを受けて解除するものである。一件flushオブジェクトと同じようであるが、sustainはピアノのダンパーペダルのように意識的にその状態を作ったり解除したりする。 ここでは、MIDIコントロールチェンジ64の定義を利用してsustainのコントロールに使用している。サスティンオブジェクトは、受け取ったノートオフ

MAX 7 MIDI基礎4

bendin/outオブジェクトは、発音中の音の高さ(ピッチ)を連続的に変化させる目的で使用されるものである。 次のパッチでは、bendinオブジェクトによってピッチベンドメッセージを受信し、また、dialオブジェクトをドラッグしてメッセージを送信することが出来る。尚、ピッチベンドのかかっていない状態は、0〜127の中央値である64となる。 また、同じように、ctl in/outオブジェクトを用いることで、コントロールチェンジメッセージを送受信することも出来る。 このばあい、第1インレットにコントロール値、第2インレットにコントロール番号、第3インレットはピッチベンドと同じくチャンネル数となる。 さらに、pgmin/outオブジェクトを使用すると、GM規格に定められたプログラム番号(1〜128)と音色の対応に従って必要な音色を指定することが出来る。

MAX 7 MIDI基礎3

ksliderオブジェクトは、鍵盤のアイコンをもつユーザインターフェースオブジェクトで、数値を受け取り、鍵盤の位置で表示する他、クリックで鍵盤上を弾くことも出来る。また、インスペクターでオクターブ数やmono/polyの設定等が行える。 noteinオブジェクトは、ノートメッセージ(ノートオンオフのみ)を受け取り、それをノートナンバー、ベロシティ、チャンネルという3つの要素に分けてパッチ内に取り込んでいる。MIDIコントローラーの鍵盤から指を離したとき(すなわちノートオフ受信時)、ベロシティが0になっていることが分かる。 ちなみに、MIDIコントローラーによっては、本来のMIDIメッセージとしてノートオフベロシティを固定値64で送信するものや、鍵盤を話す速度に応じて可変値で送信するものがあるが、noteinオブジェクトはノートオフベロシティをすべてベロシティ=0で表現する。 noteoutオブジェクトは、ノートナンバー/ベロシティ/チャンネルという3つのパラメーターを与えることでノートメッセージを送信する。ここでもノートオンとノートオフの違いはベロシティが0以外か0かによる。 Mac OS X、Windows XPともに、OS標準でDLSシンセを内蔵しており、右のパッチではDLSシンセが割り当てられて音が鳴る。 この設定は、Option>Midiセットアップ>に表示されており、受信および送信ポートの選択や設定が出来る。MAXではこのデフォルトポートがDLSシンセ用の送信ポート、チャンネル1に割り当てられている。 ちなみにnotein/noteoutオブジェクトをダブルクリックす

MAX 7 MIDI基礎2

P393〜 MIDIシーケンスデータをファイルとして保存する場合、先に上げたいくつかのシーケンスソフトでは、それぞれ独自のフォーマットをもっており、互いに互換性が少ない。MIDIでは、このファイル保存フォーマットに共通の取り決めがあり、これに従って保存されたファイルをスタンダードMIDIファイル(SMF)と呼ぶ。通常、シーケンス・ソフトは独自のファイル保存フォーマットの他に、このSMFの読み書きが出来るようになっている。 一方、コンピュータのソフトウェア上でMIDIシーケンスデータを編集し、音楽を制御する作業が一般的になると、同期の問題が浮上する。録音機器とシーケンスソフトを同期させるマルチトラックレコーディングを行ったり、ビデオデッキ等の映像機器と同期させるケースである。 同期とは、異なる機器がタイミングを共有しながら動作することで、このためMIDiではタイミングクロックやMIDIタイムコード(MTC)という同期信号に関する規格を定めている。さらに録音機器や映像機器の操作自体もMIDiメッセージによってコントロールするMIDIマシンコントロール(MMC)という取り決めも追加されている。 ----------------------------------------- さて、MIDIメッセージは、"音を鳴らせ"、"音を止めろ"といった機器に対する命令であって、肝心のどんな音色のサウンドが鳴るかは受信側のMIDI機器の設定に任されている。これではSMFを共有するような場合に不都合が生じる。 MIDIにはもともとプログラムチェンジというMIDIメッセージがあり、受信側の音色プログ

MAX 7 MIDI基礎1

P386〜 MIDIメッセージは、1バイト(=8bit)のデータの並びであり、1〜 16のMIDIチャンネル区別をもっている「チャンネルメッセージ」とMIDIシステム全体に共有される「システムメッセージ」に大別される。 チャンネルメッセージにはMIDIコントローラーを演奏した際に送信されるノートオン・オフ、ピッチベンドなどのメッセージが含まれ、システムメッセージには同期用のタイミングクロックや音色プログラム等を転送するためのシステム・エクスクルーシブ(16進数の「F0」ではじまり「F7」で終了する、音源機器固有の機能制御信号。SysExとも表記する)などのメッセージが含まれる。 例えば、鍵盤型のMIDIコントローラーを押すと、"音を鳴らせ"という意味を持ったノート・オンメッセージが送信される。このノート・オンは、具体的には[144(ステータスバイト)、60(データバイト)、127(データバイト)]といった3バイトからなるデータ配列であり、1バイトずつ順次転送される。 1番目の144は、ステータス・バイトと呼ばれ、メッセージが何であるかの種類を宣言する。MIDIには、1〜16のチャンネルがあり、1本のMIDIケーブルの中であっても区別して転送することが出来るが、これはステータス・バイトがチャンネル別に定義されているためである。 144はチャンネル1のノート・オン、145はチャンネル2のノート・オン・・という具合である。このMIDIチャンネルの区別により、複数のMIDI機器がMIDIケーブルで接続されている状態でも、送信側と受信側でチャンネルを併せて特定の機器だけ選択的にコントロー

MAX 7 サウンドプログラミング基礎17

P328〜 ・tableオブジェクトその② tableオブジェクトは、変換テーブル以外に、確率テーブルとしても利用することが出来る。 これは、tableのy軸を出現率が高いと考える時、その出現率に応じたインデックス番号(x座標)を出力する仕組みだからである。 例えばsizeとrangeがともに10である右のようなtableの場合、y座標の最も高い4と2と7の出現する割合は、9:1:1であり、のこりは0のため出現しないことになる。 では、この確率テーブルを利用したドットの作成パッチはどのようなものになるか。 実験結果は以下の通りである。

MAX 7 サウンドプログラミング基礎16

P312〜322 ・speedlimオブジェクト 指定した数値の間隔ごとに間引いて出力する。 ・timerオブジェクト ストップウォッチのような機能で時間を計測するオブジェクト。 ・dateオブジェクト PCの内蔵クロックと同期して日時を表示する。 ・clockerオブジェクト 指定したmsec単位で経過時間を表示するオブジェクト。

アーカイブ
タグから検索
  • SoundCloud Social Icon

■当サイト音源や動画を著作者の許諾なく、営利目的・商用使用することを禁止します。

■著作物を個人的に楽しむ場合などを除き、著作権利者の許諾を得ないで複製 (録音)などを行うことは、著作権法で禁止されています。

Copyright © 2015 kuu-sou sound creations. All Rights Reserved.