PureDataプログラミング。 パート0

はじめに



一般的な情報



PureDataは、コンピューターミュージック、サウンドデザイン、および視覚化の再生と記録に使用される対話型プログラム(この場合、「パッチ」と呼ばれることが多い)を作成するためのビジュアルプログラミング言語です。 たとえば、Max / MSPに精通している人々は、PureDataはMAXに似たファミリの言語の1つであるため、おなじみのグラフィックコードを認識します。



簡単かつわずかに誇張して言えば、これはシンセサイザーとエフェクトのプログラミングによって強化された言語です。



この記事では、言語のいくつかの要素と、PureDataでのサウンド処理の基礎となる基本原則について説明します。



PureData-クロスプラットフォーム、 Windows、MacOS、LinuxFreeBSD用のアセンブリがあります 。 標準ドライバー( ALSA、MMIO )と、 jackASIOの両方で動作しMIDI転送もサポートされています。 すべてのバージョンは、 公式サイトからダウンロードできます。 拡張バージョンには、多くの場合非常に必要な多数の外部ライブラリが含まれているため、拡張バージョンをダウンロードすることをお勧めします。



デジタルサウンドプレゼンテーション



そして、ここで蓄音機と記録を思い出すことができます。 ビニールに音を録音する原理は何ですか? ビニールディスクに傷を付けるカッターは、特定のソース(たとえば、マイク信号)の影響下で強制的に振動します。これにより、ディスクの表面の切れ目が波打つようになり、このトレースがカッターの振動を完全に繰り返します。 その後、針がこの巻線経路に沿って移動すると、針が振動し、ソースの振動を正確に繰り返します。 つまり 針が鳴ります。 したがって、このトラックがグラフの形式で表示され、グラフのポイントの座標が小さなステップで記録される場合、サウンドファイルが取得されます。 したがって、WAVは特定の曲線の点である数字の配列にすぎません。 このプロセス(波をポイントに分割する)はサンプリングと呼ばれ、ファイルに書き込むためにポイントが取得される頻度がサンプリング頻度です。



これから、プログラム合成の最初の側面が生まれます。 数学的に音を特定の線として記述することです。これは、必要な振動のグラフィック表現です。 このアプローチは普遍的であり、サウンドデバイスとの相互作用のライブラリを持つ任意の言語で実装できます。 実際には、これは必要ありません。WAV拡張機能をハングさせることで、値の配列をファイルに簡単に追加できるからです。



この表現は論理的で普遍的ですが、必ずしも便利ではありません。 エレメントインターフェイスの相互作用がモジュラーシンセサイザーに似ている場合、ソフトウェアシンセサイザーの動作を制御する方がはるかに簡単で便利です。 知識のない人向け:モジュラーシンセサイザーは、ワイヤーで相互接続されたさまざまな独立したコンポーネント(いわゆるモジュール:ジェネレーター、フィルター、コンバーターなど)で構成されるデバイスです。 この場合、請負業者は、どのモジュールが何を、どの順序で互いに追従するのかを把握しており、重要なことに、構成を「ホット」に変更できます。



このアプローチは、コードの構築の観点から、MAXのような言語で実装されています。







したがって、 PDでのソフトウェア合成の2番目の側面: 言語要素 相互作用は、モジュラーシンセサイザーとの類推によって構築されます。

実際には、これら2つのアプローチは共生しており、相互に補完しています。



それで、私たちが何を扱うかを学んだので、PureDataに直接進みます。



PureData要素



a + b =?



一般に、PureDataでのプログラミングは、「パルス」、数値、信号の送信という3つのことを要約しています。 この言語の基本的な要素もわずか4つです。オブジェクト、数値ブロック(番号ボックス)、メッセージブロック(メッセージボックス)、およびワイヤに類似した接続です。 最も単純なプログラムを作成して、PDに2つの数値を追加してみましょう。



そのため、新しいパッチのあるウィンドウで、オブジェクトを作成し(Ctrl-1)、この長方形をどこかに配置して、そこに[bng]と書き込みます(これもbangです )。 このオブジェクトなしでは、パッチはほとんど実行できません。 彼の仕事は勢いを作り出し、送ることです。 それでは、どこで、なぜ理由を見つけましょう。 メッセージ(Ctrl-2)を使用して2つのブロックを作成し、そこに2つの任意の数字を追加し、 bangを各ブロックに接続します。 そのため、これらの数値を合計する必要があります。 これを行うには、オブジェクトを再度作成し、「+」を入力します。 期待されますよね? 数値ブロックをオブジェクト"+"に接続します。 現在は、結果を表示するためだけに残っています。 これは、コンソールで印刷オブジェクトを使用するか、パッチを番号ボックス(Ctrl-3)に送信してパッチ内に残すことができます。







動作中のパッチを確認するには、それをブロックし(Ctrl-E)、 bangオブジェクトをクリックする必要があります。 そのため、コンソールまたはnumbreBox'eに結果が表示されます。 それが間違っている場合-心配しないでください、私たちは下の行のすべてを分析します。 bangをクリックして起こったことは、接続を介してメッセージブロックに到達し、それらを追加オブジェクトなどに渡すインパルスを作成しました。



では、なぜ私たちの一部が間違った結果を持っているのかを理解してみましょう。 もう一度強打します。 さあね 実際には、算術演算の正しい順序は要素の順序に影響されます。 私たちのパッチに似たパッチを作成する場合、オブジェクトが右から左に接続されていれば、正確さが保証されます。 これは非常に不便です。デバッグしてエラーを見つけることは不可能です。 ただし、別のオブジェクトが使用されている場合、これはすべて回避できます。そのタスクは、入力を複数のストリームに分割し、同時にパルスを送信することです。

これはトリガーオブジェクトです。



この名前でオブジェクトを作成します。 次に、送信する必要のあるものを書き留めましょう(bangは運動量、floatは数値、何でもかまいません)。 インパルスを2つに分割するので、オブジェクトの内容は、 トリガーbang bangtbbを省略)という形式を取ります。 出力を数字で接続することは残ります。 これで、接続順序に関係なく結果が真になります。







これはもちろん素晴らしいことですが、長い式を計算したい場合、または数学関数を使用したい場合はどうでしょうか? 実際、2次方程式の根の検索など、上記の方法で作成された最も単純なプログラムは、複雑すぎて混乱を招きます。 そのような場合、 またはexprオブジェクトがPDに存在します。 このオブジェクトを使用すると、数学式と論理式、およびそれらの組み合わせを記述できます。 同じ追加例を考えてみましょう。 ご想像のとおり、$ f1と$ f2は変数であり、左から右にカウントされます。 左端の入力は$ f1で、順番に並んでいます。 exprオブジェクトの入力の数は、式で使用される変数の数に等しくなります。







あとがきとF1



今日、最も手頃な最小値を調べ、アイデアの違いを見つけました。次の記事では、条件付きロジックの動作と、信号の処理に関連する最も単純なオブジェクトについて説明します。 ヘルプシステムについてのみ説明します。 ヘルプを常に使用する必要があり、オブジェクトに関する情報を表示するには、オブジェクトを右クリックして「ヘルプ」項目を選択するだけです。 説明と、ほとんどの場合、使用例が含まれます。 オブジェクトとライブラリの完全なリストは、 PdヘルプブラウザーまたはホットキーCtrl-bで利用できます。







少なくとも週に1回、PureDataで以下の記事とレッスンを公開する予定です。 すべて最高。



All Articles