Portfolio 2012 - 2016

Page 1

PORTFOLIO

Kenta Haratani


東京大学理科 I 類

工学部建築学科

BIOGRAPHY 1991/04: 東京都生まれ 2007/04 - 2010/03: 攻玉社高等学校 2010/04 - : 東京大学教養学部理科一類入学 2011/10 - : 東京大学工学部建築学科

隈研吾研究室

2010 -B1-

加藤道夫研究室

2011 -B2五月祭パビリオン

2012 -B3-

TEDxUTokyo

2013/04 - 2014/03: 東京大学工学部建築学科隈研吾研究室 2014/04 - : 東京大学大学院工学系研究科建築学専攻加藤道夫研究室修士課程 2015/04 - 2016/03: Takram インターン 2016/09: 東京大学大学院工学系研究科建築学専攻修了

2013 -B4-

Vectorworks/ Rhinoceros/ Grasshopper/ Vray for Rhino/ Cinema4D Photoshop/ Illustrator/ Indesign/ Aftereffects Processing/ Ableton Live/ PostgreSQL

復学

Takram

大学院修了

2014 -M1-

2016/10 - 2017/03: Takram インターン

SKILL

休学

Takram 2015 -M2-

2016 -M3-


STATEMENT POTENTIAL Disconnected Zero VIRTUALITY Two-Faced OTHER PROJECT Luminous Lines SANDscape UNARCHITECTUAL WORKS Ephemera Decomposing Composition Graphics Code Music


STATEMENT


革命 / デザイン / 建築 産業革命によって建築を含めたデザインは大きく変化を遂げた . それは世界に対する主張をより広く人々に媒介する力となった . そのトップダウン型の力は人々という集団の上に位置する建 築の性質と相まって , 世界を近代建築で覆った . 20 世紀後半に起きた情報革命は , それとは異なる性質を持つ . それは双方向の主張を個人スケールで媒介する力を , ソフトウェアにおいて可 能とした . これによってソフトウェアにおいては , モノと人間の権力関係は拮抗した . そして現代のデジタルファブリケーション革命においては , その拮抗がハードウェアにおいても起ころう としている . しかし建築家は依然 , 産業革命で得られた玉座から立ち上がることができない . なぜならば彼らが扱うメディア=建築物はソフトウェアとしての側面が未だ見出されておらず , ま た静止を前提とされたものだからだ . 支配 / 可能性 / ポテンシャル しかし建築物 , とりわけそれを扱ってきた建築家には特有のある強みがある . それはプロダクトやグラフィック , アプリケーションに比較すると , 特段に建築物に含有される支配力に起因する . 建築においてユーザーという言葉は適していない . 人々は建築を好き好んで利用するというよりも , 否応なしに支配されてしまう . 建築の中では人は常に被支配者として , 下の階層に位置づけ られる . これは非常に危険なことである . 一つの建築が建つことで何十年というスパンで人々はそれに適合させられ , 彼らの価値観や人生の可能性は大きく歪曲される . しかし , それを踏まえ たうえで建築は建ってきた . 故に , その責務を背負ってきた建築家はクリエイターの中で最も多く , 世界を支配する経験と蓄積を携えた人種だと私は考える . 建築はかつては世界を変えうる最 も大きなポテンシャルを持つものであった . そして建築家はそれを乗りこなしてきたのだ . オンデマンド / 流転 / 固定 現代において , 世界を支配しているモノはもはや建築ではなくなっている . かつて建築は人間の世界を強く支配していたが , その権力は他のモノに大きく分散してしまった . 空調や水道などの インフラにそれは始まり , かつてはそもそも存在しなかったサイバー・スペースが現実世界に並んで大きく人々を支配し始めた . それらの分散と同時に , ソフトウェアとハードウェアの双方 においてその一つ一つの流動性も高まり , 人々をモノの支配から解放し , 個人個人にオンデマンドなデザインを可能とした . しかし , その流転の先にはどのような未来が待ち受けているのであ ろうか?オンデマンドなモノの獲得の欠点は , 個人でデザインが完結してしまうところにあるように感じる . その集積が世界を形作っているにも関わらず , その根底にあるものは彼ら自身の その瞬間的欲求なのだ . そしてその欲求は先天的に私たちが持つ生理的本能と , 今のこの世界に支配されることによって後天的に植え付けられた価値観に由来する . つまり , 瞬間瞬間の欲求の 充足を繰り返すことは , 世界をより強固に固定することに他ならない . 世界に潜む潜在的な可能性を発掘するためには , 世界そのものをデザインしなければならないのだ . ヴァーチュアリティ / 非建築的メディア / 建築物なき建築家 ここに私は建築家の登場を願ってやまない . 彼らは顕在化している世界を揺らがすヴァーチュアルな世界の一端を , かつて垣間見せてきた人種であるからだ . しかし , 現代においては建築物は もはや武器ではない . 建築物の持つ支配力は他のモノに分散されてしまったからだ . 彼らは新たな武器を手に取らなければならない . それは手中に収まる小さなプロダクトかもしれない . それ は空に漂う光の幻影かもしれない . それは物質から乖離したコミュニケーションそれ自体なのかもしれない . そのような非建築的メディアを扱う建築物なき建築家はもはや現代の建築家とは 異なるものとなるだろう . しかしかつての建築家に近いのは , むしろ彼らのような存在だと私は信じる .


建築の人間に対するその圧倒的な力は , 世界を変えるだけの最も高いポテンシャルである . 住みにくい住宅が建ったとしても , 人間はそれを容易に拒絶することはできず , そのモノに適合し可能性を顕在化させる . また建築は公に剥き出しに建つ . その中にいる人間を支配するのに留まらず , その周囲の人々へもその存在をもって影響を与える . それが集積し都市となり , 世界となる . その世界が新たな可能性を強制的に顕現する .


POTENTIAL


Disconnected Zero - Graduation Project / Hulic Student Design Competition 2014 -

Disconnected Image Collage


光の街があるなどということは嘘だ . 世界が一つのかがり火になるなどということはない . すべての人が自分の火を持ってるだけ , 孤独な自分の火を持っているにすぎない .

J・スタインベック

孤独は内に閉じこもることではない . 孤独を感じるとき , 試みに , 自分の手を伸ばして , じっと見詰めよ . 孤独の感じは急に迫ってくるであろう .

三木清

友情とは名ばかりのものだ . 私はどんな人間も愛さない . 兄弟すら愛さない . 兄のジョセフだけは少し愛している . ただし , それも習慣上からである .

ナポレオン・ボナパルト 孤独とは , 港を離れ , 海を漂うような寂しさではない . 本当の自己を知り , この美しい地球上に存在している間に , 自分たちが何をしようとしているのか , どこに向かおうとしているのを知るためのよい機会なのだ . アン・シャノン・モンロー

脱社会的体験 街の雑踏 , 満員電車 , 溢れんばかりの見知らぬ人々 . しかし彼らは私に干渉しない . 人混みを掻き分けるその感覚は , 鬱蒼とした森をひとり彷徨っているかのようだ . 裸 , それは誰からも干渉されないことを前提とした姿 . 逆説的に , 人は服を脱ぐことで社会から隔絶される .

Home

これらから得られる脱社会的な体験は , 孤独感であるにもかかわらず , 心地よく感じられる .

Society

Individuals

分解される共同体

Society

Home

かつて家族などの親密な関係は , 生きるために互いを必要とするつながりであり , その生活共同体は生きる上での最小単位であった . しかし , 生活に必要な要素が町中に分散し , また , 通信技術の発展に伴い個人としての活動範囲が広がり , 一人でも生きていくことが可能になった現代 . 生活の最小単位は個人となった . しかし依然私たちは家族や友人と常に生活している . その体制と本質の違いによるストレスが愛情や友情を超えたとき , 親密であるはずの人間関係は崩壊する . nLDK モデル

通信技術の普及

30

万人

25 20 15 10 5

山本理顕・上野千鶴子の瓢箪モデル

0 1950

1960

離婚件数の推移

1970

1980

1990

2000

2008


脱社会的個浴場 人間関係が壊れる前に , 人々が家庭を含む全ての社会から脱し , 個人としての自分を謳歌できる場が必要である .

Public

街中の雑踏 , そして入浴 , この二つから得られる心地よい孤独を感じられる , 個浴場を設計する .

Zeroth Place 社会学者レイ・オールデンバーグは都市で生きる人々に必要な場所として

Connected

First Place( 家庭 ), Second Place( 職場・学校 ), Third Place( そのどちらでもない居場所 ) の三つを提示した . Third Place の定義は「くつろげる雰囲気の場で , 仕事や家庭での問題を忘れることができる場」であった .

Private

Third Place を脱社会的な場として捉えると , Third Place も後には一つの社会となってしまうため , 私たちは次の場所 , いわば Fourth Place を求めることになり , その探求は終わることはなくなる . それを解決する場は , 家庭すらをも脱却した , Zeroth Place にあたる , 人々が個人に還元される脱社会的場なのである .

Public, Private, Disconnected Public な状態は脱社会的ではない . そして脱社会的であるとは , Private な状態のことでもない . 例え一つの室に一人でいようとも , そこには , 外界との関係を遮断している , という緊張した関係がそこにはある .

Disconnected

そのため , 私は Public と Private を一括りに Connected と呼ぶ . 真に脱社会的な状態とは , それに相対する Disconnected な状態であり , まさに雑踏や満員電車のような , 周囲が自分に干渉しないことを認識できる状態のことを指す .

0

Zeroth

First

Second

Third...

1

2

3

4


明暗差による一方向的孤独 本設計は三層の建物になっている . 1F 個浴室には 40 個の浴槽が並び , それぞれが温水の壁によって通路と仕切られている . 床照明により , 通路は明るく , 浴槽内暗くなっているため , 通路から浴槽内への視線は反射される . これによって浴槽内の個人は周囲が自分に干渉しないことを認識でき , Disconnected な体験が可能になる . 体験者はその後 , 浴槽内の階段を上り , 2F 着衣室で Private, 3F ギャラリーにて Public へと帰っていく . この個浴場は人々の Zeroth Place となり , 人々はここで個人を発散し , 社会へ戻る .

Water Curtain

Reflect Dark

Light

Disconnected Gimmick

Circulation

Gallery Public Dressing Room Private

Bath Disconnected

Unit Bathterior

×40


Gallery

Baths

1F PLAN

Gallery Entrance

Dressing Rooms

Baths Entrance

Machinary Room

3F PLAN

2F PLAN

SECTION

Exterior Perspective


Public Private

3F Gallery Perspective

Disconnected

2F Dressing Rooms Perspective

1F Baths Perspective


公園におけるプロトタイプ 卒業設計においては , 上記の都市におけるプロトタイプを , 都市における公園という極めて抽象的な敷地において設計した . 公園は , 都市において他の土地との社会的に隔離されている特殊な場所であり , Zeroth Place となるのに最も適した敷地だと考えた . また , 公園においては , Disconnected な場を演出するための造形が可能になり , 人々はより深く , 鮮明な脱社会的体験することができる .


ELEVATION

SECTION


-1F PLAN

1F PLAN


2F PLAN

3F PLAN


情報革命によって , 個人に合わせたオンデマンドなモノ / サービスの提供が是とされる現代 . 私たちの時間感覚として見たときには , もはや静止している既存の建築はいかにして変化するべきか . 無限の可能性を秘めながらも , その変化自体は有限でなければならない . 潜在的な世界を孕んだ , 静止した顕実を人々は生きる .


VIRTUALITY


Two-Faced - Imai Studio 2015-


モノと記号 空間を支配するのは物理的な障害に限らない . 人々の体験を形作る空間の構成要素はモノに限らない . モノの表面に描かれる記号は , その空間を宣言し , 人々の行動を扇動する . 横断歩道や信号はその一つの例だ . 車道と横断歩道はモノとしては一つの地面であるが , 歩行者にとっては川と橋のような違いがある . そして信号の色によって , その橋の存在 / 不在が示される .

記号と潜在性 記号はモノではないため , 固定される必要がない . モノの表面に描かれた記号を流転させることによって , モノに潜在性を持たせることができる . 机に接着された白い立方体を例に挙げよう . 各面にサイコロの 1 6 の面が浮かび上がるとき , 上面の示す数字によってその意味は異な る . 立方体が固定されていても , そこに浮かび上がる記号が変化するだけで , 6 つの意味が 1 つの物体に埋め込まれる .

敷地 : 新虎通り中州 現代におけるオンデマンドな建築への導入として , 固定された建築と , 記号に伴い流転する人流による建築を設計した . 敷地は新橋 - 虎ノ門を繋ぐ新虎通り中ほどの中州とした . ここは横断歩道によってのみ立ち入れる陸の孤島である . この中州へのアプローチとしての横断歩道そのものを設計し , 横断歩道を媒介として人流を制御 , 建築に潜在性を持たせる . 至虎

ノ門

SIT

E

70m 至新


潜在させる二種類の場

解析による検証

日常生活 , あるいは観光における心地の良い街の状態として , 二つのモードを定義する .

敷地は横断歩道二種類の通し方を検討するために , 街路ネットワーク解析を行った .

1. 活気にあふれた賑やかな状態 = ACTIVE   2. 落ち着いた空気の流れる平穏な状態 = CALM

1

2

3

4

飲食店のような ACTIVE の場は適度に高い人口密度を必要とし , 少なすぎるとそれは閑散となる . 本屋のような CALM の場は適度に低い人口密度を必要とし , 多すぎるとそれは喧騒となる . 両者の場は共に , 建築物の物理的な構成だけではなく , そこにいる人々によって顕現される .

横断歩道の潜在性 中州へのアプローチとなる横断歩道を出現 / 消滅させることができたならば , 建築物そのものには触れずに , 間接的に人流を制御し , 空間を変えることができる . 横断歩道は路面に引かれた図的な記号でしかないため , それを光に置き換えることも可能である . 本設計ではそのような横断歩道を想定し , 二つの横断歩道配置パターンを設定する .

ACTIVE

それぞれのパターンから ACTIVE/ CALM の二つのモードを一つの建築に存在させることを意図する . Switch Fixed

3

Space

People Building

CALM

1. 対象地域全体の媒介中心性を求め , 敷地周辺の歩道における人流の比率を算出 . 2. 中洲内部での自由な移動と , 歩道 - 中洲感の横断歩道の自由な配置において , 効率的な経路を導出 . 3. ここから , 中洲内部を通る経路(= ACTIVE モード)と , 通らない経路(= CALM モード)の , 二つを設定した . 4. CALM モードにおいても , 少数の人々が中洲内部へと浸入するように , 立体街路を取り付け , 解析した . 横断歩道(青)

横断歩道(赤)

CALM モードにて 24% の人々が中洲の二階部分を , ACTIVE モードにては , 86% の人々が中洲地上階を通る .


ACTIVE Perspective

CALM Perspective


Exterior Perspective


Cafe

Izakaya

Tea Shop

Restaurant

Bento Shop

Izakaya

Ramen Restaurant

Bakery

Gym

1F PLAN

Cafe

Book Shop

Clothes Shop

Accessories Shop

Gallery

2F PLAN



OTHER PROJECTS


Sandscape - Mayfes Pavillion Project 2014 -


仮設のランドスケープ 本設計では , 東京大学建築学科有志による大学祭のための仮設広場の設計・施工を行った . スポンサーシップとして入手した再生砕石 44t を土嚢袋に詰め , それを用いた仮設のランドスケープを設計した . 仮設にもかかわらず , そのマッシヴさがコンテクストに影響を与える , 地に深く根を張る仮設建築を目指した .

顆粒体モデュール 砂は顆粒体という流体と剛体の中間に位置するため , 土嚢というモデュールの挙動には興味深い性質がみられる . ひとつに , モデュール制作の容易さがある . 砂を土嚢袋に詰めることによるモデュール生成で必要なパラメタは 砂の体積ただ一つである . そして , 同じ体積であれば , 成形後は違う形をしていても , モデュール自体は同じもの となる . そして , 役物も同様に砂の量を変えるのみで生成が可能である .

緊縛による構造補強 一方で土嚢の欠点も存在する . 流体的な性質から , 土嚢の形状は成形後も不安定で , 積み重ねても変形して剥離してしまう傾向がある . それに対する解決案として , 縄による八の字の緊縛を表面近くの土嚢において行った . れにより互いの土嚢同士が互いに滑り落ちを阻害し , 形状も安定させることができた .


PLAN

ELEVATION



Luminous Lines for        Stage Lighting:Daisuke Yano(Tokyo Lighting Design)

Front View


繋げる光 本設計では , 学生が運営するトークセッションイベントである TEDxUTokyo の会場設計・施工を行った . 本イベントでは , グラフィックデザインなど , 他のデザインチームとのデザインの統一が掲げられた . 副題である "en- The Great Wonder" にちなみ , 円 , 波紋 , 回路などのキーワードと共に , 会場とステージ間での光の流れを作り , 知識・見聞の相互交換を象徴するビジュアルを目指した .

Theme Visual by Kazuho Ishida

Arduino

Revolving Light

Revolving Light Gimmick Diagram

群れる流光 高さ 4m の壁を舞台の裾として左右に立ちあげた . それぞれの壁は五枚のレイヤーから成り , 光を流すギミックが仕掛けられている .

10:08

08:90

08:46

07:46

レイヤーの間には機械系のメンバーに制作を依頼したパトライトが横向きに設置され ,

06:46

その光がスリットから漏れて流れる線状の光となる . 回転する光を投影するため , 光の速さと強さは徐々に速く , そして弱くなっていく . それらを Arduino による電子的に制御して光の流れを統率した .

08:17

08:09

07:90

07:46

07:90

07:46

05:76

04:00

00:00

06:46

Timing

Layer Eevation




House of Helixes - Kuma and Obuchi Studio 2013 Toyoda unit -

Skeleton Exterior Perspective


ケタマカビ - Chaetomium ケタマカビは土壌に生息する菌で , 局所的に頂毛と呼ばれるバネ状の菌糸を生やす . 頂毛は木のように養分の吸収と伝達の機能を持つ . また , その形状から , ワインオープナーのように , 周囲の地面にしがみつき , 自らを固定する機能も持つと思われる . 本設計では , このケタマカビを Grasshopper を用いてモデル化し , その造形プロセスを応用して , 極地における簡易住居を設計した .

骨格形成 ケタマカビの頂毛のモデル化により , 任意のサーフェスから , 局所的に螺旋状の線材を生やすことができるようになった . また , それらを毛の届く範囲内で , 地面の特定の範囲へと接地させ , 平面プランを再現できるようにした . 任意のプラン , 開口 , 想定された屋根形状の三つを入力とし , 簡易住居の骨格が決定される .

Inputs

Input1:Plan

Input2:Opening

Input3:Roof

Output

1.Input

2.Axis

3.Helix

4.Skeleton


螺旋状モデュール 螺旋状のモデュールはねじ込むことで , 基礎なしに地面に固定される . モデュール同士も軸方向に回転させながら挿入することで , 互いに絡まり合い , 接合を要さずに躯体として組みあがる . また , 接合されていないため , 改築 , 解体も容易である . 螺旋状のモデュールは鋼管を斜めに切断し , 少しずつずらしながら溶接することで生産する .

Pipe

Cut Skeleton Interior

Weld Screw

Interlock

外部環境による肉付け ケタマカビの頂毛は土にしがみつく機能を持っていたが , 裏を返せばこれは土をつかみとる機能だともいえる . バネ状の鋼管モデュールによる住居の骨格は , 周辺環境をつかみとり , 身にまとい , 自ら肉付けされていく .

Skeleton Interior

+

Skeleton

Stone

Flesh

Environment

Sand

Flower

Ivy

Snow

Concept Model Interior


極地における簡易住居 砂漠 , 雪原 , 密林など , 住居を建てることが困難な地において , この住居は有用である . 特別な道具や重機がなくとも , 螺旋状モデュールをそこに運搬さえできれば , それを人力で組み立てることができ , また状況に応じて改築も可能である . そして , 住居はその過酷な環境を取り込み , 自然に成熟し , 人々の活動拠点となる .

PLAN (Case:Snowfield)

Case1:Snowfield

Case2:Desert

Case3:Jungle

SECTION (Case:Snowfield)



UNARCHITECTURAL WORKS


Ephemera 光で分解される刹那的アナログメディア 光で分解する手紙。これは声のように、その一回性をもって コミュニケーションに緊張を与える。この声は決して記録されない。 ただしその曖昧な残響は二人の間で響き続ける。 記憶と記録、有限と無限、アナログとデジタル、生と不死。

ど  こ 読 に み も 終 存 え 在 る し と な 手 い 紙 。 は し 塵 か と し な 母 っ 親 て の 消 記 え 憶 て だ し け ま に う は 。 確 そ か の に 中 そ に の 書 痕 き 跡 留 が 刻 め ま ら れ れ た た 。 声 は 今 や

け る 。 母 親 宛 だ っ た た め 彼 女 は そ れ を 開 封 し 読 む こ と に し た 。

の  練 日 習 曜 に 日 向 の か 朝 っ 、 た 母 よ 親 う が だ 目 。 を 朝 覚 食 ま の し 準 、 備 リ を ビ し ン て グ い に る 向 と か 、 っ 机 た の 。 上 少 に 年 見 は 知 今 ら 日 ぬ も 便 朝 箋 か を ら 見 部 つ 活

な  る 少 手 年 紙 は が 学 書 校 け 帰 る り ら に し 文 い 具 。 店 で あ る レ タ ー セ ッ ト を 見 つ け た 。 読 み 終 わ る と 読 め な く

ず に い る こ と に も 気 が ひ け る の だ 。

ト  を 小 あ 学 げ 生 る の の と は き 妙 の に よ 気 う 恥 に ず 素 か 直 し に い お し 礼 、 の か 言 と 葉 い を っ 投 て げ 、 か い け く た ら り 反 、 抗 形 期 と と し い て え 残 ど る も プ 何 レ も ゼ せ ン

反 抗 期 真 っ 只 中 の 中 学 三 年 生 の 少 年 は 悩 ん で い る 。 も う す ぐ 母 の 日 だ か ら だ 。

母 と 少 年


1.input object

Decomposing Composition

2.cap

TOP

3.hold down the cap

4.set cutter

RIGHT

FRONT

5.stopper

6.handle and play

一回性の音楽 オブジェから音楽を生成する楽器を考えた . 押出発泡ポリスチレンフォームのオブジェを切断する際にガイドの突起がニクロム線が弾き音を生成する . 奏者はオブジェの作成と , ニクロム線を動かす速度の調整によって作曲・演奏する . 音楽生成器でありながら , 一度演奏をすると , 入力されたオブジェは解体されてしまうため , 再現性は伴わない . 儚い偶然性が音楽を生み , その一回性が視覚的にも現れる .


Graphics

Libeskind's Virtual House Example

Buckyball in GH Self Portait

Kato Lab Logo

Plan T-Shirt and Tree Buttons

諸行無常 T-Shirt and Buttons


Pastpective1

Wriggling Corridor

Pastpective2

Re:Cycle of Creation and Forests Collage (designed by Kei Kaihoh)

Pastpective3


吊られた庭 (collaborator: Kosuke Suehiro)

Kinesthetic Pavillion (Dhillon Marty Community Week 2013)

The Waste Exchange (Dhillon Marty Community Week 2013)

壁の透き間 (collaborator: Kosuke Suehiro)


Synchronicity Harajuku (collaborator: Tatsuya Saeki, Shoto Kato)

Synchronicity Harajuku (collaborator: Tatsuya Saeki, Shoto Kato)

Synchronicity Harajuku (collaborator: Tatsuya Saeki, Shoto Kato)


Code

import ddf.minim.spi.*;import ddf.minim.signals.*;import ddf.minim.*;import ddf.minim.analysis.*;import ddf.minim.ugens.*;import ddf.minim.effects.*;final int BALL_SIZE = 20;final float GRAVITY = 1;final float INIT_SPEED = 0;final float BOUND_RATIO = 0.5;float GAIN;final float GL = 50;final float SCALE_X = 20;final float BOUND_BOOSTX = 0.5;final float BOUND_BOOSTY = 2;final float JUDGE = 20;float[] VER_X;float[] VER_Y;final float STARTY = BALL_SIZE/2;final float STARTX = width/2;final float SPRING = 0.5;int NUMBALLS;int F_NUMBALLS;final int MAXBALLS = 100;float[] VOLUME;float[] pVOLUME;float pTG_SIZE;float pTG_X;float pTG_Y;int BAM;int FRAMECOUNT;final int EXPANTION_T = 30;int TG_COUNT;int HITCOUNT;int TIMELIMIT;float TIME_C;int LV;final int MAXLV = 100;int SCORE;int ADD_SCORE;int ADD_SCORE_LIMIT;int PHASE;int PAUSE;float posx, posy, sx, sy, HUE, TG_X, TG_Y, TG_SIZE, TG_CLR, tg_x, tg_y;int hitornot, bamcount;BALL[] BALLS = new BALL[MAXBALLS];TARGET[]TARGETS = new TARGET[MAXBALLS];Minim minim;AudioInput in ;FFT fft;void setup(){ GAIN = 2; frameRate(60); smooth(); colorMode(HSB,100,100,100,100); strokeCap(SQUARE); NUMBALLS = 0; FRAMECOUNT = 0; TG_COUNT = 0; TIMELIMIT = 240; PHASE = -1; LV = 0; SCORE = 0; ADD_SCORE = ADD_SCORE_LIMIT; size(1200,750); minim = new Minim(this); in = minim. getLineIn(Minim.STEREO, 512); fft = new FFT(in.bufferSize(),in.sampleRate()); VOLUME = new float[fft.specSize()]; pVOLUME = new float[fft.specSize()]; HUE = random(100);}void draw(){ fft.forward(in.mix); VER_X = new float[fft.specSize()]; VER_Y = new float[fft.specSize()]; TG_CLR = HUE + 50; if(TG_CLR > 100)TG_CLR -= 100; for (int i = 0; i<fft.specSize(); i++){

VER_X[i] = map(SCALE_X * i,0,fft.specSize(),0,width);

rect(0,height*(10-i)/10,width,height/10); } if (PHASE == -1){

fill(0,0,100,20);

VER_Y[i] = (height - fft.getBand(i) * GAIN * sqrt(i)) - GL;

rect(0, 0, width, height);

fill(0,0,0,100);

pVOLUME[i] = VOLUME[i];

textAlign(LEFT,CENTER);

textSize(30);

VOLUME[i] = (height - fft.getBand(i) * GAIN * sqrt(i)) - GL; } noStroke(); for(int i = 0; i <= 10; i++){

//fill(HUE,12- 1*i,100,50);

claps, etc.)\n\nYou can change INPUT GAIN by RIGHT & LEFT keys while pausing.\n\nPRESS SPACE KEY TO START", width / 2 - 500, (height - GL) / 2); } if (HITCOUNT == NUMBALLS && PHASE >= 0){

F_NUMBALLS = NUMBALLS; PHASE = 0;

Audioshoot

for (int i = 0; i < NUMBALLS; i++){

TG_COUNT = 0;

posx = width/2; sy = 0;

}

TARGETS[i].HITORNOT = 0;

posy = STARTY;

sx = random(-15,15);

bamcount = 0;

sy = 0;

}else{

posx = BALLS[0].x;

= new TARGET(tg_x, tg_y, hitornot, bamcount, TARGETS);

入力に応じたスペクトラムによってボールを弾き , ターゲットを消していく .

(PHASE == NUMBALLS && TARGETS[i].HITORNOT == 0){

音楽を入力とすると , ビジュアライザーとゲームの中間のようなものとなる .

LV, 10, height - 10); text("BALLS:" + NUMBALLS, 160, height - 10); text("

NUMBALLS * 10; } for (int i = 0; i < NUMBALLS; i++){

background(0, 0, 0);

for (int i = 0; i<fft.specSize()-1; i++){

stroke(0,0,50);

for (int i = 0; i < NUMBALLS; i++){

BALLS[i].x = -1000;

40; i++){

pushMatrix();

10,0,0.75*height/2); random(-15,15);

rotate(2*PI*i/40);

popMatrix();

FRAMECOUNT = 0;

}

strokeWeight(1);

popMatrix();

TG_COUNT = 0;

if (i == 0 || i == 10 || i == 20 || i == 30){

strokeWeight(8); PHASE = 0;

BALL(float posx,float posy,float sx,float sy, int idno, BALL[] o){

stroke(0, 0, 100);

LV = 0;

x = posx;

SCORE = 0;

y = posy;

CLICK HERE TO WATCH DEMO VOLUME[i],SCALE_X)) * BOUND_BOOSTY;

strokeWeight(2);

strokeWeight(3);

RATIO;

vy = sy; }

IDNO = idno;

HITCOUNT = 0;

if(y > height - BALL_SIZE/2 - GL){

vy -= FORCE * sin(atan2(dy,dx));

TG_Y = random(TG_SIZE/2 + TIME_C, height - TG_SIZE/2 - GL - TIME_C);

CLICK HERE TO DOWNLOAD CLR,50,100);

for (int i = 0; i < 40; i++){

(MAXLV - LV) / MAXLV);

pushMatrix();

pTG_Y = TG_Y;

noFill();

if (key == CODED && PHASE == -1){

x += vx;

TG_Y);

rotate(2*PI*i/40);

SCORE += LV * (TIMELIMIT - TG_COUNT);

stroke(TG_CLR, 70, 90, 30*(15 - BAMCOUNT)); if (keyCode == LEFT && GAIN > 1)GAIN -= 1;

} } void poping(){

fill(TG_CLR, 85, 70, 50);

if (i == 0 || i == 10 || i == 20 || i == 30){

fill(0, 0, 100);

if(FRAMECOUNT < EXPANTION_T){

textLeading(60);

noFill();

PHASE += 1;

noFill();

BALL[] BALLS = new BALL[MAXBALLS];

if(x > width - BALL_SIZE/2){ }

strokeWeight(1);

strokeWeight(2);

rect(width / 2 - 115, height - GL / 4, 400 * strokeWeight(20);

stroke(HUE, 70,

text("GAMEOVER\n\n" + "LEVEL:" + LV + "\nBALLS:" + F_

ellipse(0, 0, 0.75*height - 40, 0.75*height - 40);

line(0, 0.75 * height/2 - 15, 0, 0.75 * height/2);

background(0, 0, 0);

BALLS[0].y = STARTY;

y = BALL_SIZE/2;

y = VOLUME[i] - BALL_SIZE/2;

vx = -vx * BOUND_RATIO; vy = -vy * BOUND_RATIO;

}

for (int i = 0; i <

}else line(0,0.75*height/2-

BALLS[0].x = STARTX;

if(x < BALL_SIZE/2){

x = BALL_SIZE;

BALLS[0].vx =

} } void collide_spectrum(){

vx = -vx * BOUND_

for (int i = 0; i<fft.specSize(); i++){

if (vy >= 0) vy = -vy * BOUND_RATIO + (VOLUME[i] - pVOLUME[i]) * cos(atan2(VOLUME[i+1]-

}

} }

noStroke();

float dx = others[i].x - x;

void display(){

strokeWeight(2);

others = o; } void popset(){

float dy = others[i].y - y; stroke(HUE,75,100); if (PAUSE == 0){

float DIST = sqrt(dx*dx + dy*dy);

fill(HUE,100,75);

textAlign(CENTER,CENTER);

textSize(50*(MAXLV-LV)/MAXLV);

line(0, (TG_SIZE + TIME_C) / 2 - TIME_C / 2, 0, (TG_SIZE + TIME_C) / 2);

popMatrix();

}

popMatrix();

if (ADD_SCORE > ADD_SCORE_LIMIT)ADD_SCORE = ADD_SCORE_LIMIT;

ellipse(pTG_X, pTG_Y, pTG_SIZE / 2 + 30 * BAMCOUNT - 60, pTG_SIZE / 2 + 30 * BAMCOUNT -60);

} } void hit(){ HITORNOT = 1;

BAMCOUNT += 1;

}

for (int i = 0; i < NUMBALLS; i++){ }

} }

void bam(){

if (BAMCOUNT == 15){

pushMatrix();

} else{

TIME_C = TG_SIZE/12;

text(LV * (TIMELIMIT - TG_COUNT), TG_X, translate(TG_X, TG_Y);

}else if (i == 5 || i == 15 || i == 25 || i == 35){

stroke(TG_

strokeWeight(1 +

if (dist(BALLS[i].x, BALLS[i].y, TG_X, TG_Y) + JUDGE < TG_SIZE *

if (HITORNOT == 1 && BAMCOUNT <= 15){

HITCOUNT += 1;

} } if (PHASE > -1 && (key =='p' || key == 'P') && TG_COUNT < TIMELIMIT){

float

TG_X = random(TG_SIZE/2 + TIME_C, width

ellipse(TG_X, TG_Y, TG_SIZE * FRAMECOUNT / EXPANTION_T, TG_SIZE * FRAMECOUNT / EXPANTION_T); fill(TG_CLR,50,100);

else if(vx *

if (DIST < BALL_SIZE) {

ellipse(x,y,BALL_SIZE,BALL_SIZE); }}class TARGET{

TG_SIZE = 3 * (MAXLV - LV);

arc(TG_X, TG_Y, TG_SIZE + TIME_C, TG_SIZE + TIME_C, -PI/2, 2 * PI * TG_COUNT/TIMELIMIT - PI/2);

PHASE += 1;

if } }

vertex(SCALE_

TARGET[]TARGETS = new TARGET[MAXBALLS]; }}class BALL{ float x, y, vx, vy; int IDNO; BALL[] others;

x = width - BALL_SIZE/2;

if(y < BALL_SIZE/2){

BAMCOUNT = bamcount;

strokeWeight(2 + (MAXLV - LV) / MAXLV);

}

TARGETS[i].bam();

NEXT BALL:", 290, height - 10); textAlign(RIGHT);

fill(TG_CLR, 100, 100, 50);

textAlign(CENTER,CENTER);

stroke(0,0,50);

}else if (i == 5 || i == 15 || i == 25 || i == 35){

ellipse(TG_X, TG_Y, TG_SIZE, TG_SIZE);

if (PHASE == -1){

}

for (int i = 1; i <= 5; i ++)line(width / 2 + 350 + 30 * i, height - 200, width / 2 + 350 + 30 * i, height - 200 - 15 * i); }

textSize(50);

translate(width/2, height/2);

for (int i = IDNO + 1; i < NUMBALLS; i++) {

}else line(0, (TG_SIZE + TIME_C)/2 - TIME_C / 4, 0, (TG_SIZE + TIME_C) / 2);

if (keyCode == RIGHT && GAIN < 5)GAIN += 1; } if (key == ' '){

BALLS[i].collide_balls();

TARGETS[i].popset(); TARGETS[i].hit();

if (vx * int((VOLUME[i+1] - VOLUME[i])) < 0) vx = -vx + (VOLUME[i] - pVOLUME[i]) * sin(atan2(VOLUME[i+1]-VOLUME[i],SCALE_X)) * BOUND_BOOSTX;

HITORNOT = hitornot;

stroke(TG_CLR, 80, 100);

TARGETS[i].poping();

for (int i = 1; i <= GAIN; i++)line(width / 2 + 350 + 30 * i, height - 200, width / 2 + 350 + 30 * i, height - 200 - 15 * i);

stroke(0,0,0,30); }

others[i].vy += FORCE * sin(atan2(dy,dx));

TG_Y = tg_y;

ADD_SCORE_LIMIT = TIMELIMIT * LV *

ADD_SCORE / ADD_SCORE_LIMIT, - GL / 4); } noFill(); stroke(0, 0, 0); rect(width / 2 - 115, height - GL / 4, 400, - GL / 4);

vy = -vy * BOUND_RATIO;

void collide_balls(){

stroke(TG_CLR, 50, 100);

ADD_SCORE += LV * (TIMELIMIT - TG_COUNT);

strokeWeight(2);

} }

TG_X = tg_x;

strokeWeight(4 * (MAXLV - LV) / MAXLV + 2);

strokeWeight(0);

}

ADD_SCORE = 0;

BALLS[i].collide_spectrum();

if (PHASE < NUMBALLS && PHASE >= 0){

text("SCORE:" + SCORE, width -10, height - 10); if (LV > 0){

pushMatrix();

NUMBALLS = 0;

y += vy;

y = height - BALL_SIZE/2 - GL;

others[i].vx += FORCE * cos(atan2(dy,dx));

strokeWeight(2 * (MAXLV - LV) / MAXLV + 0.5);

line(0, (TG_SIZE + TIME_C) / 2 - TIME_C / 3, 0, (TG_SIZE + TIME_C) / 2);

FRAMECOUNT / EXPANTION_T - BALL_SIZE/2){ TG_X;

vy += GRAVITY;

NUMBALLS += 1; if (PHASE > -1){

sx = 0;

TARGETS[NUMBALLS]

X * i,VER_Y[i]); } vertex(width,height); endShape (CLOSE); fill(0,0,20); noStroke(); textSize(30); textAlign(LEFT); text("LEVEL:" +

if(x >= SCALE_X *i && x < SCALE_X* (i+1) && y > VOLUME[i] - BALL_SIZE/2 && VOLUME[i] > pVOLUME[i]){

float TG_X, TG_Y; int HITORNOT, BAMCOUNT; TARGET[]others; TARGET(float tg_x, float tg_y, int hitornot, int bamcount, TARGET[]o){ - TG_SIZE/2 - GL - TIME_C);

HUE = random(100);

others = o; } void move(){

else vy = vy * BOUND_RATIO + (VOLUME[i] - pVOLUME[i]) * cos(atan2(VOLUME[i+1]-VOLUME[i],SCALE_X)) * BOUND_BOOSTY;

vx -= FORCE * cos(atan2(dy,dx));

}

line(0, 0.75 * height/2 - 20, 0, 0.75 * height/2);

int((VOLUME[i+1] - VOLUME[i])) > 0) vx = vx + (VOLUME[i] - pVOLUME[i]) * sin(atan2(VOLUME[i+1]-VOLUME[i],SCALE_X)) * BOUND_BOOSTX; FORCE = SPRING * (BALL_SIZE - DIST);

BALLS[i].vy = 0;

BALLS[i].display();

arc(width/2, height/2, 0.75*height, 0.75*height, -PI/2, 2 * PI * (TG_COUNT - TIMELIMIT) / TIMELIMIT - PI/2); } if (TG_COUNT >= TIMELIMIT * 2){

ADD_SCORE = ADD_SCORE_LIMIT;

vx = sx;

BALLS[i].vx = 0;

posy = BALLS[0].y;

strokeWeight(2); stroke(0, 0, 75); fill(0, 0, 50); beginShape(); vertex(0,height); for (int i = 0; i < VER_X.length; i++){

100, 100);

line(SCALE_X * i,VER_Y[i],SCALE_X * (i+1),VER_Y[i+1]);

BALLS[i].y = -1000;

LV += 1;

if (NUMBALLS == 0){

tg_y = random(TG_SIZE/2 + TIME_C, height - TG_

textAlign(LEFT, TOP); fill(0,0,100,20); textSize(20); text("P = PAUSE", 5, 5); if (PHASE == -1){

マイクへの発声や , 机を叩くことでの入力をすると , 直感的なゲームとなる .

HITCOUNT = 0;

BALLS[NUMBALLS] = new BALL(posx, posy, sx, sy, NUMBALLS, BALLS);

Processing の練習として , 音の入力により操作するゲームを作った .

NUMBALLS + "\nSCORE:" + SCORE, width/2, height/2);

FRAMECOUNT = 0;

if(ADD_SCORE >= ADD_SCORE_LIMIT && PHASE == 0){

tg_x = random(TG_SIZE/2 + TIME_C, width - TG_SIZE/2 - GL - TIME_C);

BALLS[i].move();

}

PAUSE = 0; } if (PHASE >= 1 && FRAMECOUNT <= EXPANTION_T)FRAMECOUNT += 1; if (PHASE >= 1

&&FRAMECOUNT > EXPANTION_T)TG_COUNT += 1;

SIZE/2 - GL - TIME_C);

if (TG_COUNT > TIMELIMIT){

fill(HUE, 100, 20 - i * 2, 50);

text("HOW TO PLAY\n\n1.If you can use a setereo mixer, you can play by playing some music.\n2.Else, you can play by inputting some sound to microphone.\n (like voice,

HITORNOT = 2;

PAUSE = 1;

pTG_SIZE = TG_SIZE;

BAMCOUNT = 0;

} }}

pTG_X =

void keyPressed(){

PHASE = -1; }}void stop(){ minim.stop(); super.stop();}


Music

Moonset EP

CLICK HERE TO DOWNLOAD

1. Shoe Cuts

7:09

2. You Do Know It

5:58

3. Moonset

5:25

4. Camouflage

7:17

5. Stugio Sekke

4:44

6. Zgiyzpr

4:11


2012 - 2016


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.