ChucKのアルゴリズム合成の経験







1週間(2018年1月23〜31日)、チャック言語プログラムを使用して表明された展示会がDarアートギャラリー(Pskov)で行われていました。 なぜ、どのように起こったのかを説明しようと思います。



小さいプリアンブルが必要



Facebookのアクティビティはさらに大きくなります。 これが独特のプロジェクト「P.の歴史後の都市」が形成された方法です-ただし、オンラインコミュニティは、 オフラインプロモーションに行くこともあります。 コミュニティからの資料に基づいて、2017年9月に「P. Antiputevoditelの歴史的都市」という本出版され、その著者(および出版社)の1人であることが判明しました。 本の詳細については、以下のリンクから読むことができますが、現時点では、これは写真とテキストのコレクションであり、現代都市の退屈で具体的な現実を神話化するカタログのようなものです。



秋のどこかで、展覧会のアイデア、本に基づいた「グレイテストヒッツ」の大規模なコレクション、および本に含まれていないものが生まれました。 それから、イメージとテキストが配置される空間を都市の音で表明するというアイデアが浮上しました。 問題を遅らせることなく、適切なデバイスを装備した私の共著者であるDmitryは、P。の街をさまよい、ノイズ、会話、きしみ音、ざわめきを記録しました。 その結果、街のさまざまな場所からの生の音の約1時間半が見つかりました。







その後、いつものように、職場での臨検、出張、その他の興味深い活動が始まり、新年がようやく終わり、突然、展示会の問題が解決されました-予想外にすぐに-数週間後に準備ができていることが必要であることが判明しました。



実装



最初は、完成したサウンドを切り取って接着するだけでなく、重なり合って自分の人生のように生きる、コミットされていない、予測不可能な何かをしたかったのです。 当時、私はChucKについてほとんど何も知りませんでしたが、最初の試験では適切なツールのように見えました-おなじみの言語構成、継承のあるクラス、無料のマルチスレッド、かなり低いレベルでオーディオを操作する能力。 Kadenzeの講義コースである数夜のコースで速いペースで聞いた後、週末に座ってプロジェクトを実施しました。





その結果、構造は次のようになりました。







結果として得られた構図は、展覧会への良い追加となりました。たとえば、人が写真を見てテキストを読みながら、天井に設置されたスピーカーから、たとえば中庭の大きな音、遠くの子供たちの声、そして突然奇妙な発言が現れ、回転し、離れて加速しますまたは、神経質なしゃっくりビットが表示され、その背景に対して、シンセサイザーは誰かの声の断片でざわめきます。 もちろん、これはすべて予測不可能な方法で行われ、次に何が聞こえるかわかりません。





音楽としては、これはリスナーにとって非常に残酷なものですが、背景、伴奏として、結果は非常に満足のいくものでした。 周囲のパネルの日常生活と同じように規則的で統合失調症ではないこの音環境は、私たちが必要とする効果を正確に作り出します。





ここではソースコードを分析しません。GitHubでそれを読みたい人は誰でも、そこには複雑なことは何もありません。 起動して聞くには、 ChucKをダウンロードしてインストールし、ルートフォルダーからrun.cmdを実行します。 すべて-開発と複製-はWindowsで行われました。





パンとチャーム



ChucKで最もエレガントなものの1つは、同じ名前のオーバーロードされた演算子で、「=>」のように見えます。 はい、割り当て(それに応じて、変数宣言を使用した初期化)はやや異常に見えます。



0 => int i; "test" => string message;
      
      





最初は、右側と左側を機械的に混同します。 しかし、オブジェクトがどれほど美しくつながっているか。 サウンドファイルを取得し、リバーブを追加し、音量を調整して、結果を別のチャンネルに出力するとします。 この場合、シンプルで直感的なチェーンが構築されます:



 SndBuf sound => JCRev reverb => Gain master => Pan2 pan => dac;
      
      





その後、必要なパラメータを設定できます-私たちはまだ時間を操作しないので、これはまだ聞こえません。



処理時間は、ChucKのもう1つの絶妙な部分です。 時間計算式は「数値::時間単位」のように見えます。 例:



 1::second 1000::samp 2::day (x + y)::minute
      
      





などなど。 音を出すには、音の大きさを決める必要があります。 チャックオペレーターもこれに使用されます。



 1::second => now;
      
      





この表現は「前進時間」と呼ばれます-何らかの理由で私はそれを「時間をとる」と翻訳したいです。 したがって、ChucKで最初のサウンドを作成するには、次の手順を実行する必要があります。



 SinOsc sin => dac; //     -,    ,     //     ,    (      ) 440 => sin.freq; // 440 Hz //  « » 1::second => now; //  –        
      
      





ChucKは一般的に非常に友好的なものであり、多くのことは非常に簡単に行われます。 たとえば、ファイルからサウンドを再生します。



 SndBuf snd => dac; //      "c:/music/test.wav" => snd.read; //   snd.samples()::samp => now; //   
      
      





別の美しく実装されたものは、スレッドを作成することです(ChucKの用語では-シュレッド)。 新しい「シュレッド」を作成するために、キーワード「spork」と特別な演算子「〜」が使用されます。 これは次のようなものです。



 //       fun void play(int channel) { SinOsc sin => dac.chan(channel); //   while(true) { Math.random2f(100, 500) => sin.freq; //   .1::second => now; //  100  } } //   spork ~ play(0); //     spork ~ play(1); //     //  ,      while(true) 1::second => now;
      
      





一般的に、私はもちろん、「初心者向けのChucK」をここに書くつもりはありません。 与えられた例は、興味があるかもしれない人々に興味を持たせるのに十分だと思います。



グリッチとフラストレーション



シンプルさ、親しみやすさ、直感性のすべてについて、ChucKには問題があります(少なくともWindowsでは-他のプラットフォームの方が良いかもしれません)。



開発環境-miniAudicle-は、もちろんあまり適していません。 はい、構文の強調表示、デバイスのレビュー、仮想マシン制御、およびコンソールがあります。 しかし、-基本的な検索/置換さえありません。 さらに、時々リンクがエラーでクラッシュします-たとえば、リンク「@ =>」を使用して割り当て演算子に@を入力するのを忘れた場合、その時点でコンソールウィンドウが表示されない場合、問題が何であるかを理解する方法はありません



ChucKには継承のあるクラスがあり、これは非常に優れていますが、コンストラクターがないため、少しイライラします。 一般に、コード自体を書き始めたとき、何らかの複雑な不協和音が生じました-かなり複雑なことをChucKで単純に行うと、単純なこと-文字列の操作など-文書内の単語ではありません。 標準ライブラリに関する一定量の情報がある別のドキュメントがあることが判明しました。



最初は、各タイプのサウンドのストリームを作成し、SndBufオブジェクトを再利用しようとしましたが、しばらくすると、最初に再生中に何らかのパチパチ音が鳴り始め、次に、いくつかのエフェクトがオフにならずに累積することが判明しました、それらをリセットするすべての努力にもかかわらず。



その結果、各イベントが個別のシュレッドを作成し、すべてのオブジェクトが再作成されてから削除されるときに、構築に至りました。 しかし、それらは削除されないことが判明しました-宣言されたガベージコレクションは明らかに完璧からはほど遠いようで、再生中にプロセスは徐々にすべての利用可能なメモリを使い果たします。 割り当てられた時間内にこの問題を解決することはできなかったので、ギャラリースタッフに時々実行可能ファイルを再起動するように依頼しました。



一般的に-ChucKは非常に良い印象を与えます。簡単なスケッチ、小さなプロジェクト、デモンストレーションです-それだけです。 しかし、より深刻なプロジェクトを計画している場合は、長所と短所を徹底的に検討する必要があります。一部の場所では、ChucKはまだ湿っています。



追加資料



ChucK-コアリソース





プロジェクト「Sounds P」





インスタレーション「祖国の抱擁」






All Articles