yoppa.org


詩的なコンピューティング

前回の続き。

2013年、openFrameworksの創始者であるZach Liebermanさんが、パーソンズ大の先生を辞めて“School for Poetic Computing (sfpc)”という私塾を立ち上げた。その名前を最初に聞いた時、個人的には、正直ちょっと戸惑った。

それは、今、日本における「ポエム」という用語の意味が歪んでしまって、軽い蔑みの対象になってしまったところにも原因はあったのかもしれない。今日本で「ポエム」というと、いわゆる「意識高い系」のスローガンみたいな印象がついてしまっていてちょっと意味を曲解してしまう。しかし、真面目に「詩的なコンピューティング」と訳して考えてみても、それでもなかなかしっくりと理解できなかった。

しばらくして、Zachさんがほぼ毎日プログラムを作成してその成果を動画でアップしているというのを知り、その活動をフォローするようになった。その過程で徐々に彼の言う「詩的なコンピューティング」の意味が朧げながら理解できてきたような気がする。

Poetic Computingとは、コードで詩を生成することではない。それは、詩のより根源的な意味、ものごとの表面的な意味だけではなく美学的・喚起的な性質を用いて表現を行うということを、コードを通して実践しているのだということに気付いた。そこから徐々に自分なりに「詩的なコンピューティング」の意味がわかってきたような気がする。

それは、効率やスピードを重視するコンピューティングのカルチャーへのアンチテーゼなのかもしれない。さらには、何らかの対象物を抽象化して表現するということですら無い。

Desing by Numbersのジョン前田やProcessingのCasey ReasとBen Fryは、自分達の開発環境で生みだすコードを「スケッチ」と読んで、スケッチブックに自由に描くようにコーディングをすることを目指した。しかし、スケッチは何らかの対象物がありそれを描写するというニュアンスが含まれてしまう。もちろん、その過程でDaniel Shiffmanの “Nature of Code” のように自然を観察した結果としての優れたスケッチの成果が生まれた。

しかし、Poetic Computingが目指すのは、そうした自然の描写ではなく、より自由により感覚的にコードによって表現することを目指している。単に対象物を描写するのではなく、プログラムから生成される動きや形態そのものから美的な価値や意味を見出す行為なのだと思う。

もちろん、この考えをZachさんにぶつけたら、全然見当違いな可能性もあるのだけれど…

さらに考えを深めていきたい…


人工知能、機械学習、ライブコーディング

先日「計算美学しよう!」という研究グループで、ライブコーディングについての簡単なプレゼンとデモをした。その後のディスカッションで人工知能、人工生命、美学といった様々な専門家の議論を専ら横で聞いていていろいろ刺激され、アイデアが湧いてきた。

その後、TidalCyclesの開発者のAlex McLeanによる “Lessons from the Luddites (ラッダイト運動からの教訓)” という記事を読んで、研究会での議論ともかなり重なる部分もあり、人工知能や機械学習とライブコーディングの関係についていろいろ思いを巡らせた。アイデアを忘れてしまわないようにメモ的に記録してみる。

個人的には、現在のAIブームにはちょっと懐疑的な部分もある。現在の深層学習のアプローチ、巨大なデータを処理して効率的に学習しながら最適解を見つけていくような方法は、今後もどんどん発展し様々なジャンルに適用されていくのは間違いないと思う。その一方で、意識をもった「強いAI」が生まれてシンギュラリティによってAIが人類を凌駕するというのは、まだあまり実感できていない。

とはいえ、例えばコーディングの分野にしても、近い将来、単純に効率的に最適解を求めるようなプログラムなら、人間のプログラマーではなく機械学習によって自動的に生成されたプログラムのほうが遥かに優秀になる時代が来るのは確実だと思う。そういった時代では巨大なデータと膨大な計算資源をもった組織が圧倒的に有利になり、一人のハッカーが世界を変えるというのがどんどん難しくなっていく。巨大な計算資源とデータを押さえた組織が圧倒的に優位だ。

では、個人のプログラマーはもう無力なのか?

そういった背景を踏まえると、現在のライブコーディングやクリエイティブコーディングの動きがちょっと違った角度から見えてくる。例えば、最近になってZach Lieberman達が提唱している “Poetic Computation” は、計算を効率や速度といった観点からではなく美学として詩的な観点からコーディングを捉え直す試みなのだと思う。ライブコーディングは、さらにこの詩的なコーディングの考えを発展させて、コーディングする行為自体に美や詩情を見出す姿勢なのかもしれない。どちらも、機械学習時代のデータ量や効率や速度といった尺度から逃れて、コーディングの別の価値を生みだすためのアプローチと考えると、その意義が見えてくる。

単に機械学習のブームに乗るだけではなく (もちろんそれも重要だが)、機械学習ではカバーできない領域を開拓して表現していくことが、今、個人ベースのプログラマーにとって重要なことなのかもしれない。


はじめに – 『Processing クリエイティブ・コーディング入門 – コードが生み出す創造表現』より

※ 以下の文章は、『Processing クリエイティブ・コーディング入門 – コードが生み出す創造表現』の序文のために書かれたものです。書籍に掲載されたものはページ数の関係で若干短くなっているので、オリジナルのバージョンをこちらに投稿します。

この本で使用していくプログラミング開発環境Processingの開発者の1人であるケーシ・リース(Casey Reas)は、講演の中で、これからのプログラマーは「ハイブリッド」であるべきだと主張しています。[1]

彼は、ハイブリッドまで至るプログラマーの歴史を、4つの段階にまとめました。

  • リアル・プログラマー
  • ハッカー
  • アマチュア
  • ハイブリッド

「リアル・プログラマー」は、1940年代から50年代にコンピュータが発明された当初の「真の」プログラマー達です。その多くはコンピュータを専門に扱う科学者達で、国家的プロジェクトによって建造された世界に僅かしかない巨大なマシンをプログラミングできる一握りのエリート達でした。

その後に続くのが「ハッカー」の時代です。1960年代から70年代にかけて、国家や軍などではなく大学の研究室などでもコンピュータが利用できるようになった時代に生まれました。コンピュータをハック(様々な技術を組み合わせて創意工夫)することで、コンピュータゲームなどそれまでに無い様々なカルチャーを生みだしていきました。

1980年代になると、一般家庭にもコンピュータが普及し始めて、誰にでもプログラミングができるチャンスが生まれました。これが「アマチュア」の時代です。BASICなどの学習用のプログラミング言語を通して、趣味としてプログラミングを楽しむ時代になりました。

これらの時代に続く、現代のプログラマー像として提示しているのが「ハイブリッド」なプログラマーです。ここでハイブリッドが意味するものは、何か別の専門分野とプログラミングとの混合(ハイブリッド)です。現代でももちろん専業のプログラマーは数多く存在します。しかし、これからより重要となってくるのは、他の専門分野を持ちつつプログラミングによって実現する能力なのです。アーティスト、デザイナー、建築家、教師、作曲家、データサイエンティストといった様々な分野でプログラミング能力が必要とされています。

Processingは、こうしたハイブリッドなプログラマーのために開発されたプログラミングの環境です。プログラマーになるためにプログラミングを学ぶのではなく、プログラミングで何かを創造したい人達のための道具なのです。

コンピュータが高速化し、多くの便利なアプリケーションが開発され利用されるようになって、いつの間にかコンピュータを利用することとプログラミングすることが乖離してきました。専門のプログラマー達が開発したアプリケーションを業務で使用するというようになると、コンピュータがどんどんつまらなく味気ない存在になってしまっています。

最近になって、PCなど無くても、スマートフォンやタブレットで十分という意見もあります。スマートフォンさえあれば、チャットやSNSやゲームなどのコンテンツを消費することは誰にでもできます。また、人工知能が発達すればプログラミングは必要なくなるという予想をする人達もいます。

しかし、現段階ではスマートフォンやタブレットでプログラミングすることは困難です。また、AIによって全てが作られる未来が本当だとすると、人間は何も生みださずただコンテンツを消費し、巨大企業にデータを提供するだけの存在になってしまいます。

しかしコンピュータは消費ではなく、新たに何かを生みだすことができます。プログラミングで何かオリジナルなものを創造することこそ、コンピュータの根源的な力であり、最も刺激的な行為なのです。そうして何かを生みだす行為は、たとえAIが普及したとしても失われることなく続くことと信じています。

この本は、そうしたハイブリッドなプログラマーを目指す方々のために書きました。この本を足掛りにして、新たな創造の可能性が拡がることを願っています。

[1] Casey Reas, History of the Future, Art & Technology from 1965 – Yesterday | Casey Reas | The Gray Area Festival


International Conference on Live Coding 2016

2016年10月12日〜15日にかけて、カナダのトロントの近くにあるハミルトンという小さな街でInternational Conference on Live Coding 2016という国際会議にダメ元で作品を応募したら入選したので、参加してきました。まだほとんど知られていない集まりなので、自分の記録を兼ねて(もしかしたら渡航費の補助の資料にもなるかもしれないので…)、どんな様子だったかまとめてみたので、公開してみます。

ICLCはライブコーディングを専門に扱う国際会議です。そもそもライブコーディングとは何かというと、コード(プログラム)を常に動作させた状態でリアルタイムにライブでコーディングを行うことで音楽や映像のパフォーマンスを行うジャンルです。詳細は、ToplapによるLive Codingの説明などが参考になると思います。

国際会議といっても、まだ昨年始まったばかりで今回で2回目の生まれたばかりの集まりで、類似するICMCNIMEなどと比べるとまだ小規模で、参加人数はたぶん50人くらいという感じです。

Webサイトのスケジュールのメニューとわかるように、午前中から昼過ぎにかけて、論文発表やパネル討論などが行われ、夕方から夜にかけてコンサートが開催されるという、ICMCやNIMEなどと同様の構成になっています。ただし、規模が小さいので、同時並行でいろいろイベントがあるのではなく、同時刻には常に1つだけのイベントが行われているので、わかりやすいスケジュールでした。

印象に残った発表など

論文発表 / キーノートスピーチ / パネルディスカッション

Keynote by Andrew Sorensen

ImpromptuやExtemporeといったライブコーディング環境の開発者として、またライブコーダーとして知られるAndrew Sorensenによるキーノート。Extemporeの紹介や現在とりくんでいるプロジェクトの解説など興味深いものでした。

Sang Won Lee and Georg Essl: Live Coding the Audience Participation

ネットワーク参加型のライブコーディングパフォーマンスの試みについて

Charlie Roberts and Graham Wakefield: Live Coding the Digital Audio Workstation

ライブコーディングでAbleton Liveをコントロール

Timothy R Wood: Seer: Live Coding Interactive Audio Visual Worlds in Scala

Scalaを用いたライブコーディングなインタラクティブなオーディオビジュアル開発環境

Scott Fradkin: A Block Based Music Live Coding Environment for Kids

Scratch的なブロックベースのコーディング環境で、Sonic Piでライブコーディングするプログラミング開発環境

Takahiko Tsuchiya, Anna Xambó and Jason Freeman: Adapting DAW-Driven Musical Language to Live Coding: A Case Study in EarSketch

複数人で参加可能な、Webベースのライブコーディングな音楽教育プラットフォーム

Luke Church, Emma Söderberg, Gilad Bracha and Steven Tanimoto: Liveness becomes Entelechy – A scheme for L6

戦略的予測によるライブコーディング

Rodrigo Velasco: Poetics of Live Coding through s2hs2

ProcessingとTidalを連携したシステム「s2hs2」による、ポエティックなライブコーディング

パフォーマンス

Joana Chicau: WebPage Act I, II and III

Webブラウザをライブコーディングでハックしながらパフォーマンス

BEER: Dark Matter

SuperCollierによるライブコーディングセッションを3Dでビジュアライズ

Lee, de Carvalho Jr., Essl: Crowd in C[loud]

iPhoneから観客が参加して、Terry RileyのIn Cのような即興を作りだす

Ben Taylor: The Last Cloud

Webブラウザを用いたオーディオビジュアルパフォーマンス

Luis Fernando Navarro Del Angel, Karen Del Valle, Elihú Pérez, Diego Acevedo and Victor Mancilla: Corium: Live City

Susanne Palzer: On/Off

板の上に乗ったり降りたり

Algorave

最終日の夜は、夕方8:00pm 〜 翌日の2:00amまで、アルゴリズムによるRave “Algorave” が行われた。

著名なライブコーダー達によるライブコーディングによるパフォーマンスは、やはり素晴しく、自分のパフォーマンスの今後の展開を考える上でも、とても参考になるものであった。

  • Jason Levine: Tempus Percussus
  • Ryan Kirkbride: An Algorave with FoxDot
  • Ali Khajehei and Jamie Beverley: 0b10 beats
  • yèct (Rodrigo Velasco)
  • Alexandra Cárdenas
  • Shawn Lawson and Ryan Ross Smith: Owego System Trade Routes
  • Renick Bell: Algorave Performance for Two Conductor Players
  • Charlie Roberts: Improvisation in Gibber
  • Mike Hodnick: Humanly Organized Sound
  • Norah Lorway, Nancy Lee, Kiran Bhumber and Laine Butler: Hollow Vertices: an immersive – improv live coding performance
  • Alex McLean
  • Mico Rex

一部映像があったので転載


「Processingをはじめよう」第2版が出た!

81CNh64v1iL

Casey ReasとBen Fryによるインタラクティブ・グラフィクスのためのプログラミング言語であり開発環境のProcessingは、2001年の誕生から15年が経ち、プログラミング入門のための環境のひとつとしてポピュラーなものとなった。試しにAmazonで「Processing」で検索してみると、大量の解説書がヒットする。「Built with Processing」など日本の良書も数多く出版されている。

とはいえ、やはりCasey ReasとBen FryというProcessingの開発者である2人による解説書「Processingをはじめよう」は、別格のわかり易さの入門書だと感じる。同じ著者による「Processing:ビジュアルデザイナーとアーティストのためのプログラミング入門」も素晴しい本なのだけれど、こちらは入門書というよりは全ての機能を網羅したバイブル的な感じ。頭から通して読んでいこうとするとけっこう骨が折れる。それに対して「Processingをはじめよう」は、よりプログラム初心者が最初にProcessingを学ぶことを意識した入門書的な内容となっている。

第2版は、もちろん現在Processingの最新版であるver 3.xに準拠しているし、新たにデータビジュアライゼーションに関する章が追加されるなど内容もさらに充実したものとなっている。

最近、子供や中高生のためのプログラミング教育が話題になることが多い。実際の教育の実例などもよく紹介されているのだけれど、Scratchや、そこから派生したビジュアルプログラミング環境を使っていることが多い印象を受ける。もちろんScratchも素晴しい環境なのだけれど、個人的には、中学生くらいになったらScratchではなくProcessingから始めたほうが、その先に拡がるより本格的なプログラミングの世界に入りやすいんじゃないかと思う。もちろん大学生や大人にとっても。


Live Coding – note 01: ManifestoDraft

ライブコーデイング(Live Coding)に関して調べものや考えたことを、メモとしてブログに残していこうかと。まず始めに、TOPLAPのライブコーディングのマニフェストを、ざっくり訳してみた。あくまで自分用のメモなので、日本語としてちょっと不自然な直訳で、かつニュアンスがちょっと間違っているかもしれないので、原文も併記。

全体を通して、TOPLAPの考える、Live Codingのあるべき姿が感じられて面白い。道具としてコードを書くのではなく、心や思想を表現する手段としてのコードといった感じ。また、コードを隠すな、バックアップするなというあたりに潔癖さを感じた。

マニフェスト草稿

http://toplap.org/wiki/ManifestoDraft を翻訳

以下のことを要望する:

  • 演奏者の思考に、人間という楽器全体に到達できるようにせよ。
  • オブスキュランティズム (衒学趣味) は危険だ。スクリーンを見せろ。
  • プログラムは、自身を書き換えることのできる楽器である。
  • プログラムは超越的であるべきで、人工言語はその手段だ。
  • コードは聞こえているように見えるべきだ、基礎となるアルゴリズムはその視覚的な出力結果と同じように見えるべきだ。
  • ライブコーディングは道具ではない。アルゴリズムは思想だが、チェーンソーは道具だ。アルゴリズムが時としてチェーンソーより認識が難しいのはそのためだ。

我々は連続するインタラクションの深淵さを認めている。しかし、それに加えて以下のものを求める:

  • アルゴリズムの洞察
  • 心の機智の表現豊かで印象的な表出としての、アルゴリズムの熟練した即興
  • バックアップしない

我々は以下のように考えている:

  • オーディエンスはコードの全てを正しく理解させる必要はない。それは、ギターのパフォーマンスを見ている聴衆がギターの弾き方の詳細を知る必要がないのと同じことだ。
  • ライブコーディングは、タイピング操作の巧妙さと素晴しさを表現する印象的なディスプレイを伴なう
  • パフォーマンスは連続したインタラクション、パフォーマーのアートワークの空間の操作、ジェスチャー、表現の詳細に対する率直さを含む。
  • 伝統的な器楽による楽曲における、触覚的なタイミングの逸脱による表現は、コードには必要ない。なぜ過去を模倣するのか? コードを書いて思考を表現することは、それ自身がニュアンスや慣習の開拓になることは疑いようもない。

原文 (ManifestoDraft)

We demand:

  • Give us access to the performer’s mind, to the whole human instrument.
  • Obscurantism is dangerous. Show us your screens.
  • Programs are instruments that can change themselves
  • The program is to be transcended – Artificial language is the way.
  • Code should be seen as well as heard, underlying algorithms viewed as well as their visual outcome.
  • Live coding is not about tools. Algorithms are thoughts. Chainsaws are tools. That’s why algorithms are sometimes harder to notice than chainsaws.

We recognise continuums of interaction and profundity, but prefer:

  • Insight into algorithms
  • The skillful extemporisation of algorithm as an expressive/impressive display of mental dexterity
  • No backup (minidisc, DVD, safety net computer)

We acknowledge that:

  • It is not necessary for a lay audience to understand the code to appreciate it, much as it is not necessary to know how to play guitar in order to appreciate watching a guitar performance.
    Live coding may be accompanied by an impressive display of manual dexterity and the glorification of the typing interface.
  • Performance involves continuums of interaction, covering perhaps the scope of controls with respect to the parameter space of the artwork, or gestural content, particularly directness of expressive detail.
  • Whilst the traditional haptic rate timing deviations of expressivity in instrumental music are not approximated in code, why repeat the past? No doubt the writing of code and expression of thought will develop its own nuances and customs.

TidalCyclesとSuperColliderの連携 – 改訂版

TidalCycles 0.8からは、SuperColliderをベースにしたSuperDirtが標準の音響生成エンジンとなりました。そのため、以前は少し面倒だったSuperColliderで独自に作成した楽器(Synth)との連携が簡単になりました。

以下のチュートリアルは、SuperDirtのGithubリポジトリ内にあるチュートリアルをベースにしています。

セットアップ

以降のサンプルを動かすには、TidalCycles 0.8のセットアップが完了している必要があります。セットアップの手順は下記を参照してください。

基本 – 440Hzのサイン波

まず、シンプルなサンプルを作成してみましょう。440Hzのサイン波を生成するシンプルな楽器を定義します。

これを、Tidalから演奏するには、SuperDirtを起動した状態で以下のように呼び出します。

「sound」省略して「s」だけでも大丈夫です。

Tidal向けに定義されたSynthdefの特徴として、最終出力で、Out.ar(…) ではなく OffsetOut.ar(…) を使用していることに気付きます。これは、Tidalで複雑なリズムを生成する際に、できるだけ正確なタイミングでトリガーされるための工夫です。また、最終出力で、DirtPan.ar(…) を使用しています。これは、Tidalで設定したPanの指定を反映するためのものです。ただし、現状ではまだ反映されていません。また、現在の状態では音がずっと持続してしまい、リズムの切れ目が不明確です。

定位(Pan)と持続時間(Sustain)を設定

もう少し改良して、定位(pan)と音の持続時間(sustain)を設定できるようにしてみましょう。以下のようにSynthdefを修正します。

引数に、sustainとpanが追加されました。設定したsustainの値でエンベロープを生成しています。またpanの値をDirtPan.ar()に指定しています。

では、以下のようにTidalから演奏してみましょう。

左右交互に、0.2秒の長さで音が鳴るようになりました。

音程を設定

次に音程を指定できるようにしましょう。以下のように修正します。

Tidalからは、「n (またはnote)」という指定で音程を設定できます。nが9の時、A5(ピアノの中心のラ)の音程になります。例えば以下のようにして音程を指定します。

エンベロープを変更

エンベロープのカーブを調整することで、音の表情が変化します。例えば、よりパーカッシブなエンベロープに変更してみましょう。

持続時間を調整します。

応用

あとは、SuperColliderの様々なUGens(ユニットジェネレイター)を使用して複雑な音を生成していくことが可能です。例えば、Roland TR-808風のバスドラム。

これを、Tidalから演奏します。

さらに、先程の”testsynth”と同時に鳴らしてみましょう。

さらに、juxや、gapなどで操作してみます。

徐々に複雑なリズムが生成されるようになりました。様々な工夫でオリジナルな表現が可能となりそうです!


TidalCycles 0.8 リリース

TidalCyclesが0.8にアップデートして、いろいろな点で更新がありました。新機能をざっと解説します。

名称

これまでの名称は、「Tidal」でしたが、正式名称は「TidalCycles」、その省略形として「Tidal」と呼ぶということになりました。TidalCycles (or Tidal for short) おそらく、音楽配信サイトと名称が被るからだと思われます…

標準の音響生成エンジンがSuperDirtに

これまでのバージョンは、音を生成するエンジンとしてDirtという独自のプログラムを使用していたのですが、ver 0.8からは、SuperColliderをベースにしたSuperDirtの使用が標準となりました。ただし、以前の”classic” Dirtも併用することは可能です。

インストールが簡略化

SuperDirtが標準になったことから、インストールが大幅に簡略化されました。以下の環境を整備します。

Git

SuperDirtを使用する際に、Git(バージョン管理システム)が必要となります。OS Xであれば、Homebrewからインストール可能です。

Haskell + TidalCycles

OS Xであれば、homebrewを使用して簡単にインストール可能です。

あとは、Haskellのパッケージ管理システムのcabalを使用してTidalCyclesのライブラリをインストールします。

で完了です。

Atom

https://atom.io/からダウンロードしてインストールします。

インストールが完了したら、メニューから edit > settings > install でPackageのインストールを表示して、「Tydalcycles」で検索します。すると以下のプラグインが表示されますので、インストールします。

SuperCollider

SuperColliderのGithubから3.7以降のバージョンをインストールします。

SuperDirtのインストールと起動

SuperDirtのインストールはSuperCollider内から行います。まずSuperColliderを起動して、以下のコマンドを入力して選択した状態にして、command+enterで実行します。

Dirtのサンプルファイルを大量にダウンロードするので、時間がかかります。気長に待ちましょう。以下のメッセージがコンソールに表示されれば完了です。

ここで、全てのライブラリーを再度コンパイルする必要があるため、SuperColliderを再起動します。再起動したら、以下のコマンドを入力して、選択してcommand+enterで実行します。

コンソールに以下のメッセージが表示されたら、SuperDirtの起動が完了です。

Atomを起動して、メニューから、Packages > TidalCycles > Boot TidalCycles を選択してTidalを起動します。あとは、以下のようにテストのコードを入力して、音が出れば完了です!

SuperColliderとの連携が簡単に

SuperDirtの導入により、SuperColliderとの連携が大幅に簡略化されました。これは別稿にまとめます。


Tidalでライブコーディング! – 応用編 : SuperColliderとの連携

注意!! : TidalCycles 0.8からSuperDirtが標準となり、SuperColliderとの連携も大幅に簡略化されました。新しいバージョンでの連携方法は下記を参照してください。

前回の「Tidalでライブコーディング! – 実践編」に引き続いて、応用編です。

Tidalは、基本はDirtというサンプルファイルを再生する専用のプログラムでサンプルを再生しています。しかし、TidalにはOSC (Open Sound Control) を送出する機能があります。このOSC機能を利用することで、SuperColliderやMax/MSP、Pdなど様々な外部の音源を使用してTidalで作成したパターンを再生することが可能です。

今回は、TidalをSuperColliderを連携してみます。

基本: 簡単なサンプル

まずは簡単なサンプルで試してみます。Sin波を生成する楽器をSuperCollider側に作成します。

ここで1つ注意すべき点は、Tidalから演奏する楽器は一度鳴らし始めると自動的に停止することはありません。ですので、あらかじめエンベロープを設定しておき、一定の時間で音が終了するよう、doneAction:2を設定したエンベロープを適用しておく必要があります。

SynthDefの作成が完了したら、SuperColliderをBootして、作成したSynthDefを実行しておきます。

これに対応するTidal側のプログラムを作成します。まず、SuperColliderで作成した楽器と連携する準備をします。まず楽器 “scsine” を定義して、引数の初期値を設定しています。その上で、SuperColliderに渡すTidal側の変数を定義します。

あとは、変数を使用してパターンを作成していきます。

応用: 2つの楽器を定義して演奏

少し複雑なサンプルをみてみましょう。まず2つの楽器 “schh” と “scbass” を用意します。

この楽器を演奏するためのTidal側のプログラムは以下のようになります。


TidalをWindowsでセットアップする

Window環境でのTidal

Tidalは基本的にはUnixベースの環境を前提としているため、Windowsで動かすには、いろいろ設定が必要です。

TidalをWindowsで動かすために、まずCygwinという、Windowsオペレーティングシステム上で動作するUNIXライクな環境をインストールし、そこに必要なライブラリーをインストールした後、Tidalの環境を構築します。

Cygwinのインストール

下記のリンクからダウンロードします。

  • https://cygwin.com/install.html
  • 64bitOSの場合は、setup-x86_64.exe をダウンロードして実行
  • 32bitOSの場合は、setup-x86.exe をダウンロードして実行

インストーラーでインストールを進めると、途中でパッケージを選択する画面になります。ここで、下記のパッケージをsearchから検索して、表示されたパッケージのバージョン番号をチェックをしてインストールする設定にします。

screenshot_594.png

Portaudioのインストール

Portaudioは、パッケージ化されていないので、ダウンロードして手動でビルドする必要があります。まずPortaudioのダウンロードページに行き、安定板(2016年4月現在はpa_stable_v19_20140130.tgz)をダウンロードします。ダウンロードしたpa_stable_v19_20140130.tgzをCygwinのホームにコピーします。その上で、下記のコマンドでPortaudioをインストールします。

Libioのインストール

OSCをやりとりするためのライブラリーlibioもapt-cygではインストールできません。libioのサイトのDownloadにある最新の安定版(2016年4月現在はliblo 0.28)をダウンロードして、下記の手順でインストールします。

Dirtのインストール

Tidalで使用するサンプラー、Dirtをインストールします。Dirtはgithubからクローンします。

ダウンロードしたら、ビルドします。

Haskellのインストール

Tidalのベースとなっているプログラミング言語Haskellをインストールします。まずHaskellのインストールページを開きます。

自動的にWindowsでのインストールのページが表示されます。使用している環境にあわせて、32bit版か62bit版のHaskellのインストーラーをダウンロードします。ダウンロードが完了したら、インストーラーを起動してHaskellをインストールします。

Haskellをインストールしたら、Cygwinを再起動してください。

Tidalのインストール

Cygwinを起動して、下記のコマンドでTidalをインストールします。

これで、完了です!

Atomの設定

Windows版でも、Atomをエディターとして使用可能です。OS X版と同様に、まずAtomをインストールした後、Tidalパッケージを追加します。

TidalパッケージのSettingを開きます。ここでghci.exeへのパスを正しいものに変更します。

  • 例: C:\Program Files\Haskell Platform\7.10.3\bin\ghci.exe

screenshot_596.png

あとは、テストでコードを実行させてみて音が鳴れば、設定完了です!!