# FUN ADVENT CALENDAR PART 3 DAY 11
初めまして。初めて記事を書く**nagata**と申します。
この記事は[公立はこだて未来大学 Advent Calendar 2022 part3](https://adventar.org/calendars/7655)の11日の記事です。
まずアドカレのあの奇怪なコメントを見てこの記事を見に来てくださった方へ。
本当にありがとうございます。
例のコメントもう1回書いておきます。
初めて記事を書くかもしれない人 「「不快感をあおるコンテンツ」の「快感をあおるコンテンツ」の部分」 「大学住みのすゝめ」 「週10ラーメン」 「生活習慣をぶっ壊す!!」 「CEROは正しいのか」 「近隣住民の騒音による被害にあっています」 「Cookie Clicker」 「初めてネット記事を書くマン」 「固め濃いめ多めのラーメンは健康にいいのか」 「なぜ自分の血液は美味いのか」 「未来大におけるハンドルネーム」 「Processingで疑似3D(笑)を作ったら褒められた件」 「騒音音楽から見出す、音楽の芸術的表現」 「危険思想」 「【序論】無限に書きたいことが増えるので短くざっくりまとめたい。しかし、極力語りたい事のみここに列挙しているため、ある程度の文字数は書かないと気が済まない。なので今回はこの問題を解決する方法を模索しようと思う。【提案】(1)やはり短いコラムをたくさん用意する。これによる利点はやはり様々な内容を話せることである。しかし欠点として1つ1つが語り足りなくなることが挙げられる。あとで後悔するのは嫌なのでこの方法は除外する。(2)1つピックアップする。利点は1つのみ思う存分に勝たれることである。欠点として「あぁ、、、これも語りたかったな、、、」となることである。これも後悔しそうで嫌なので除外しよう。(3)いろんなコラムを思う存分語る。これですね。時間が足りないとか、記事書くの初めてとか関係ありませんね。【結論】というわけでいっぱい書きたいです(願望)」
まずコメントで挙げていた内容をまとめてみましょう。
* 「「不快感をあおるコンテンツ」の「快感をあおるコンテンツ」の部分」
* 「大学住みのすゝめ」
* 「週10ラーメン」
* 「生活習慣をぶっ壊す!!」
* 「CEROは正しいのか」
* 「近隣住民の騒音による被害にあっています」
* 「Cookie Clicker」
* 「初めてネット記事を書くマン」
* 「固め濃いめ多めのラーメンは健康にいいのか」
* 「なぜ自分の血液は美味いのか」
* 「未来大におけるハンドルネーム」
* 「Processingで疑似3D(笑)を作ったら褒められた件」
* 「騒音音楽から見出す、音楽の芸術的表現」
* 「危険思想」
これは正直その場のノリで考え付いたものを書いただけなのでとても記事にはできません。
なので今回はここから一部を改変して、
0. 自己紹介
1. ~不快感をあおるコンテンツ~の~快感をあおるコンテンツ~の部分
2. 実験音楽から見出す、音楽の芸術的表現
3. 大学住みのすゝめ
4. 週10ラーメン
5. ぜひ遊んでほしいSteamゲー
6. Processingで疑似3D(笑)を作ったら褒められた件
7. 近況&あとがき
この8つの記事をできる限りの時間を使って書こうと思います。
こうやって記事を書くのは初めてなので、文章的におかしかったり、「おい!お前これ記事としてのルール守れてないぞ!」となったりしても、生暖かい目で蔑んでおいてください。
あとこの部分を書いている今現在は午前1時47分で、はこだて未来大学にいます。
なんかMarkdownの書き方ググってたら目次的なもの作れそうだったので作ってみます。
- - -
# 目次
[目次](#目次)
[自己紹介](#自己紹介)
[~不快感をあおるコンテンツ~の~快感をあおるコンテンツ~の部分](#~不快感をあおるコンテンツ~の~快感をあおるコンテンツ~の部分)
[実験音楽から見出す、音楽の芸術的表現](#実験音楽から見出す、音楽の芸術的表現)
[大学住みのすゝめ](#大学住みのすゝめ)
[週10ラーメン](#週10ラーメン)
[ぜひ遊んでほしいSteamゲー](#ぜひ遊んでほしいSteamゲー)
[Processingで疑似3D(笑)を作ったら褒められた件](#Processingで疑似3D(笑)を作ったら褒められた件)
[近況&あとがき](#近況&あとがき)
- - -
# 自己紹介
## nagata
公立はこだて未来大学 学部1年生
2004/01/29生まれ
逆張り陰キャチー牛
趣味は音楽、ドラム、FPS、音ゲー、猫です。
## 好きな音楽
* Rock
* Metal
* Jazz
* Classic
* Hardcore Rock
* Hardcore Techno
* Hardstyle
* Dubstep
* Rawstyle
* Drum'n bass
* House Techno
* GABBA
* Russian Hard Bass
* Speedcore
* Extratone
* Ambient music
* Noise Music
* Breakcore
* Rawstyle
- - -
## やっているFPS
* Call of Duty
* Battle Field
* Over Watch 2
* VALORANT
* APEX
* Rainbow Six Siege
* Dead by Daylight
- - -
## やっている音ゲー
* 太鼓の達人
* CHUNITHM
* SOUND VOLTEX
* WACCA
* DANCERUSH STARDOM
* GROOVE COASTER
* musedash
* Rateno
* Lanota
* D4DJ
* バンドリ!
### ↓↓以下触っているだけの音ゲー↓↓
* beatmania iidx
* maimai
* ONGEKI
* drummania
* nostalgia
* Arcaea
* TAKUMI3
こんな感じです。
まあ見てわかる通り超手広くプレイしてますね。~~その結果上達してないけど。~~
中学生の頃、太鼓の達人でHardcore Techno Musicと出会い、高校からDTMを始めました。
高校のころScratchで~~クソ~~ゲー作ってました。
# ~不快感をあおるコンテンツ~の~快感をあおるコンテンツ~の部分
- - -
## キック
自己紹介で話した通り私はHardcore Technoが好きです。
中でも激しいHardcore Thecnoの**超イカついキック**がとても好きです。(語彙力)
私の言う**超イカついキック**が聞きたい人はぜひDJ MAD DOGのReset[^1]を聴いてください。
この曲の19秒から鳴りだすキックは、**ガバキック**と呼ばれるものです。
このように歪みまくってて、ノイズがかかった音がとても好きです。
**が、当然一般受けはしません。**
昔、一切テクノを聴かない友人の家でこの曲を流した時、**「うるさい」** と言われました。
そもそも、このキックのリリース部分(頭の鈍い音がアタック部分、アタックに続く音がリリース部分)は騒音に近いもので、聴く人を選びます。
**もう選びまくりです。**
そのせいか、一般的に聴かれるTechnoは、ラップで使われるTrapや、K-POPなどで、Hardcore Technoはほとんど聴かれません。
間違いなくHardcore Techno(特にダークで、キックを基調とすればするほど)は**不快感をあおるコンテンツ** でしょう。
自己紹介で列挙した中ではRawstyleと呼ばれるものが特に顕著です。
- - -
## Dubstep
Technoにおいてキックだけが不快感をあおるコンテンツなわけではないです。
Dubstepなども不快感をあおるでしょう。
しかし、Dubstepは中高生によく聞かれています。
それはなぜか。
実はDubstepには**Melodic Dubstep**と呼ばれるものがあります。
これはメロディを基調とした非常に奇麗なDubstepで、世界的に有名なDubstep ComposerのSKRILLEXのBangarang[^2]はこれに当たります。
また~~某サングラスのマイクラおじさんが昔の動画のエンディングで使用していて~~聴きなじみのある、TheFatRatのJackpot[^3]も(少しテンポが速い気がするが)これに当たります。
しかし、Dubstepの中でも特に不快感をあおりやすい曲は私のお気に入りのDubstep専門チャンネル、**Disciple**にたんまりあります。例えばDVEIGHTのDevil Tech[^4]やBainbridgeのSpam[^5]です。
このようにその曲以外でほとんど聴いたことのない音が鳴ったり、不規則なリズムをとったりと、非常にトリッキーで、不快感や不安感をあおる要素が多いです。
- - -
## BPM10000
音楽の教科書などに書かれている速いBPM(Beats Per Minute=一分間の拍数)は120程度で、一般的な音楽でのテンポが速い曲はBPM150~180程度です。(AdoのうっせぇわがBPM178)
そして音楽ゲーム界での速い曲はBPM250~300です。(所説アリ)
しかしこの世にはExtratoneと呼ばれる音楽ジャンルが存在する。
その特徴は何といっても超高速キック。
**BPMは何と驚きの1000以上!**
このジャンルを知らない人が聞くと完全にただのノイズです。
ここに例として日本のSpeedcore ComposerであるKobaryoのBPM10000の楽曲、Windows10000[^6]を置いておきます。
短音のノイズではなく、「ノイズに聞こえる」ということです。
- - -
## 不快感から快感を摂取する
こんだけボロクソに不快であると言っていますが、私にとっては全く不快ではありません。
むしろ快感です。
例えばホラー映画やスプラッター映画が好きな人がいるとします。
その人が映画に求める要素は**怖いもの、グロいもの**を見に来ているわけです。
しかし、それは他の人からしてみれば不快なコンテンツであるわけです。
そんな不快なコンテンツから快感を摂取できる人間が、その**不快なコンテンツ**を好んでいるわけです。
**~~つまり性癖と同じです。~~**
他人から見れば「不快感をあおるコンテンツ」かもしれない。
しかし、自分にとって「快感をあおるコンテンツ」ならOKなのです。
**幸せならOKです。**
ただ万人から受け入れられるわけではないことを念頭に置いて、
**よきHardcore Techno Music ライフを!**
- - -
- - -
# 実験音楽から見出す、音楽の芸術的表現
現代アートと聞いて、あなたは何を思い浮かべますか?
幾何学模様、サイケデリックな彫刻、部屋全体を利用した展示品、芸術へのアンチテーゼ、作者の意図をくみ取るのが難しい、、、
おそらくこんなところでしょう。
実は音楽の世界には、**実験音楽**というものが存在します。
実験音楽のほとんどは前衛的なものです。
実験音楽の超有名どころといえば、**ジョン・ケージの4分33秒**でしょう。
## 4分33秒
4分33秒は全編休符で演奏(?)される音楽です。
けつおけ!という演奏会で披露された4分33秒[^7]で、指揮者は一拍目以降手を下ろしている。
演奏者に至っては何も演奏しない。
この音楽の真意は、布ずれや、観客の咳や、雨の音や、人間がざわつく音などの環境音こそが音楽であるということです。
ケージは沈黙とは無音ではなく「意図しない音が起きている状態」であり、楽音と非楽音には違いがないと主張しています。
近年の音楽のほとんどはポップスで、歌詞に伝えたいことを乗せ歌う。言語以外で自分の主張はあまりしません。
しかし、歌詞という言語ではなく音楽の演奏という非言語で主張することは、文字という言語を連ねて主張せず、アートという非言語で主張することと何ら変わりはありません。
- - -
また、実験音楽には主張を伝える以外でも面白いものがあります。
それは、自作楽器です。
最近ちょこちょこ使われだしているテスラコイルを用いた演奏なんかもそうでしょう。
今回は、私が一番感銘を受けた自作楽器のアーティストを紹介します。
## 中田粥
彼は回路基板を組み上げて演奏するアーティストです。
METROのサイト[^8]を抜粋しますと、(公式サイト[^9]がめちゃめちゃ読みづらかったので)
> 1980年、東京で生まれる。洗足学園音楽大学作曲科卒業。 サーキットベンディングをピアノの内部奏法の延長上にあるものと捉え直し、シンセサイザーやリズムマシンなど電子楽器数台分の剥き出しにされた回路基板を「バグシンセ」「bugsynthesizer」と名付けてリアルタイムにショートさせる方法で演奏や展示を行う。 2013年、東京の実験音楽シーンで活動。2016年、拠点を大阪に移動。現在、アートスペースFIGYAの運営に携わる。
まずピアノの内部奏法とは。ピアノは本来弾くのは鍵盤ですが、ピアノ線を直接弾いたり擦ったりして演奏する手法です。動画を置いておきます[^10]。
これに感銘を受け、電子楽器から回路基板を取り出して、予めはんだ付けをして短絡(ショート)をさせておいたものを組み上げて演奏します。
途中にスチールウールなどの別の金属を挟むこともあります。
これを**バグシンセ**と呼んでいます。
私はこの観客も奏者も予想できないノイズが流れ出す楽器がとても好きです。
自分自身人間の絶叫や音割れしたノイズが好きで、彼の演奏のスタイルがとても好みです。
- - -
先ほどのノイズ関連で今大注目のアーティストがいます。
それが**DJ Myosuke**です。
## DJ Myosuke
説明文を公式ホームページから引用します。
> 激しく歪んだ高速トラックを得意とするHARDCORE DJ/Producer。
レーベル Psycho Filth Records / Japanese Stream Hardcore / FREAKIN WORKS、イベント HARDGATE / Army Of Darkness を有するプロダクション MADCITY 代表。
自身による楽曲リリース、イベント運営の傍ら、国内最大手HARDCOREレーベル HARDCORE TANO*C のメンバー、サブレーベルのプロデューサーとしても活動する他、WACCA、チュウニズム、太鼓の達人、Arcaea他数多くの音楽ゲームへの楽曲提供、 音楽制作誌 サウンド&レコーディング・マガジン での連載を経て音楽制作ソフト FL Studio の国内アーティストへ名を連ねる等、多岐に渡り活躍している。 国内のみならず本場ヨーロッパでのリリース、出演を重ね、ついにDJ Mad Dog率いる Dogfight Records への加入を果たした。
彼は2021年4月ごろからBrutal Decibel[^11]というEPをリリースしています。
Youtubeに投稿されたXFADEの概要欄を見てみましょう。
>「HARDCOREってどこまで音をデカくできるんだろう」をコンセプトにした実験的EP!全トラックフルゲイン!クラブミュージックの常識全部無視!音の暴力を体感せよ!!!
※YouTubeでは14.4dB下げられているので、是非CDやDL、サブスクなどでノーマライズ機能をオフにして聴いてみてください。
はい。
マジでとんでもない音で流れます。
Youtubeの詳細統計情報を見てみると
**Volume / Normalized 100% / 19% (content loudness 14.4dB)**
と表示されます。
これは元の音量の19%の出力で、カットされた音量は14.4dBであることを表しています。
つまり元の音量は約17.8dB
DJ Myosukeの他の楽曲を見てみましょう。
Brutal Decibel 2の「1BPM」[^12]という楽曲だと
**Volume / Normalized 100% / 15% (content loudness 16.6dB)**
太鼓の達人に収録されている「Behemoth (Extended Mix)」[^13]という楽曲の動画だと
**Volume / Normalized 100% / 40% (content loudness 8.0dB)**
他のアーティストの楽曲とも比べてみましょう。
たとえばAdoの「うっせぇわ」[^14]だと
**Volume / Normalized 100% / 36% (content loudness 8.9dB)**
マジでかっこいい Creepy Nutsの「堕天」[^15]だと
**Volume / Normalized 100% / 45% (content loudness 7.0dB)**
チュウニズムのサウンドチームによる個人的神曲、水野健治 VS 大国奏音の「DA'AT -The First Seeker of Souls-」[^16]では
**Volume / Normalized 100% / 92% (content loudness 0.7dB)**
マジの神曲、Aiobahnの「Echoes」[^17]では
**Volume / Normalized 100% / 93% (content loudness 0.7dB)**
図にするとこんな感じ
|SONG NAME|VOLUME PER NORMALIZED|CONTENT LOUDNESS|ORIGINAL VOLUME|
|:--------|:--------------------|:---------------|:--------------|
|Brutal Decibel XFADE|100%/19%|14.4dB|17.8dB|
|1BPM|100%/15%|16.6dB|19.5dB|
|Behemoth (Extended Mix)|100%/40%|8.0dB|13.3dB|
|うっせぇわ|100%/36%|8.9dB|13.9dB|
|堕天|100%/45dB|7.0dB|12.7dB|
|DA'AT -The First Seeker of Souls-|100%/92%|0.7dB|8.75dB|
|Echoes|100%/93%|0.7dB|10dB|
**デカい
いやマジでデカい**
Youtubeの仕様上、ノーマライズの際は曲全体を通しての音量を参照しているので、**最初から最後までクソうるさい**ということです。
いくらノーマライズされているとはいえその音圧はすさまじいものです。
バッキバキに割れたノイズと強烈なキック
ぜひ聞いてみてください。
- - -
- - -
# 大学住みのすゝめ
みなさん一度は思ったことがありませんか?
**大学で寝泊まりできれば1限も出席できるんだけどなぁ**
**課題が終わらないけど課題やり切ったら明日の1限起きれないなぁ**
ありますよね?
そう、あるんですよ。
今回は研究室がないのに大学の椅子などを利用して寝泊まりしている私が、大学の住み方をのコツを書いていこうかと思います。
この記事はまだ研究室を持たないはこだて未来大学生や、2023年に入学予定の新入生や、はこだて未来大学に興味がある人向けの記事です。
## 寝床問題
大学には研究室が存在し、特定の研究室にはソファなどの睡眠をとるのに最適な設備が存在する場合があります。
しかし、私は1年生です。
研究室には配属されておらず、先輩が一緒にいるときにしか利用できません。
では、私が普段どのように寝ているのか。
**椅子を並べて、その上に寝ています。**
オーソドックといえばオーソドックスですね。
はこだて未来大学のほとんどの椅子はキャスター付きの回転椅子で、寝心地はそこそこいいです。
ちなみに、友人であるJ氏は大学に寝袋を持ってくることを検討していました。
冬季に普通の格好で、開けた場所で睡眠をとってしまうと凍死してしまうので、防寒具を用意しましょう。~~私は1敗です。~~
- - -
## 食糧問題
はこだて未来大学の購買は夕方で閉まってしまい、夕飯や夜食を食べるときに買うということができません。
最寄りのコンビニは大学のある山から一度下山しなければアクセスできません。
しかも、深夜には空いていません。
ではどうするか。
そうですね。
**カップ麺ですね。**
はこだて未来大学には給湯室が存在し、24時間開放されているので深夜に腹が減っても食事を摂取することができます。
しかしここで注意しなければならないことがあります。
**給湯室の熱湯の温度は若干低めです。**
つまりカップ麺に書いてある目安時間で作ってしまうと、若干乾麺が混ざっていたり、全体的に硬かったりします。
正直完成してから1分で麺が伸び切るなんてことはないので、気持ち長めに取ってあげましょう。
- - - -
## 早朝
早朝の大学には目覚ましの機能があります。
大体6時ごろに清掃が始まり、掃除機の音で起こしてくれます。
**そして夜間に発生したごみをまとめておくと、清掃時に回収してくれます。**
これは結構うれしいので、レジ袋などにまとめておくといいでしょう。
ちなみに大学の1限は9時からで、割と時間がありますがここで2度寝すると寝坊する可能性があるので気を付けましょう。
- - - -
## 深夜の大学で何をするのか
もちろん大学に泊まるからには寝坊対策以外の意義を持って泊ったほうがいいです。
私が過去に大学で泊まった時何をしていたか、例として挙げておきます。
* レポート課題の消化
* 情報表現基礎のゲーム作成課題
* アニメ鑑賞
* なかやまきんに君のサイゼリア鑑賞
* アドカレ(これ)の記事作成
皆さんも大学に泊まって有意義な時間を送ってみてください。
- - - -
- - - -
# 週10ラーメン
このコラムは一瞬で終わります。
週10でラーメンを食いました。
私のTwitterでは**U~C\:n(うっひょ~カウンター)** というものを付けています。
![U~C](https://i.imgur.com/DfK2oB5.jpg)
こんな感じです。
どうやら6月19日に達成していたようです。
はこだて未来大学には**ミールカード**というものがあります。
500円以下の食事を購入できる回数券のようなものです。
学食にはラーメンがあり、通常のラーメンなら1番大きいサイズで462円です。
ここに私の好きなポテト&コーンサラダ(1食88円)を合わせると、合計で**550円**です。
つまり支払金額は1食あたり**50円**です。
これが悪かったのでしょうか。
週5のラーメン確定です。
これプラス5回ラーメン屋に行くだけで週10達成です。
私は山岡家の**塩ラーメン固め濃いめ多め**が好きで、高頻度で通っています。
ちなみに5月ごろから通いだして、サービス券が現在47枚です。
年内にTシャツ注文目指してます。
**皆さんは決してマネしないでください。
身体に悪いです。**
- - - -
- - - -
# ぜひ遊んでほしいSteamゲー
私はゲームが好きです(突然の告白)
これを書いている前日は夜10時ごろから朝の9時頃までOver Watchをプレイしていました。
そんな私がおすすめをする**Steamゲー**を2つ紹介しようと思います。
ちなみに比較的マイナーどころをついています。
## Cookie Clicker
ごめんなさい。
超有名どころです。
このゲームは2013年にリリースされたブラウザゲームで、2021年に突如としてSteam販売が開始されました。
クッキーをクリックしてクッキーを増やす。オブジェクトを購入して自動でクッキーを増やす。
クリックゲーと増殖ゲーの祖先ともいえるようなゲームです。
**私のプレイ時間は3535時間です。**
まずゲームを始めてみましょう。
![cookie_1](https://i.imgur.com/k8JwJYr.jpg)
クリックしてみると
![Cookie_2](https://i.imgur.com/zEO0NLq.jpg)
クッキーが1つ増えましたね。
やったね。
![Cookie_3](https://i.imgur.com/84VGzOE.jpg)
さらに100個のクッキーを使っておばあちゃんを雇えました。
この世界ではクッキーで人身売買ができるようです。
このようにクッキーを大量に生産してカーソルやおばあちゃんを買うことによって、CpS(Cookie per Second)が増えます。
クッキーを生産してくれるオブジェクトは現在でもアップデートによって増えています。
新しいオブジェクトが何なのかをワクワクしながらクッキーを貯めるのも楽しみの一つなので、念のために折りたたんでおきますが、2022年12月11日現在のオブジェクトを挙げておきます
<details><summary>2022年12月11日現在のオブジェクト</summary>
1. Cursor カーソル
2. Grandma グランマ(ゲーム内でババアとも呼ばれる)
3. Farm 農場
4. Mine 鉱山
5. Factory 工場
6. Bank 銀行
7. Temple 神殿
8. Wizard tower 魔法の塔
9. Sipment 貨物船(どう見ても宇宙船)
10. Alchemy lab 錬金術ラボ
11. Portal ポータル
12. Time machine タイムマシン
13. Antim. condenser 反物質凝縮器
14. Prism プリズム
15. Chancemaker チャンスメーカー
16. Fractal engine フラクタルエンジン
17. Javascript console Javascriptコンソール
18. Idleverse 遊休宇宙
19. Cortex baker コーテックス・ベイカー
</details>
ちなみに私の現在のCpSは**約148.58quindecillion**です。
1 quindecillion = 10 ^ 48
ですので、日本の単位に直すと**148極5800載Cookie per Second**になります。
こうやってインフレするさまを見るのもクッキークリッカーの楽しみです。
最後にエフェクトを全部付けた状態の私のSteam画面を張っておこうと思います。
先に述べた通りネタバレを含むので折りたたんでおきます。
<details><summary>Cookie Clicker</summary>
![Cookie_4](https://i.imgur.com/z7ETjPG.jpg)
</details>
先の数式でLatexを利用していないのは、編集画面のコードに着色されなくなったからです。
許してください~~何でもしますから~~。
[Cookie clicker](https://store.steampowered.com/app/1454400/Cookie_Clicker/)
税込み520円
- - - -
## Overdungeon
こちらはクラフトピアというアヌビスを奴隷にすることができるゲームの制作者が制作したゲームです。
緑の悪魔と呼ばれているYoutuberが、今アップデートを1番望んでいるゲームでもあります。
ゲームジャンルはローグライク、タワーディフェンス、カードゲームです。
1番の特徴はその自由度です。
この自由度というのは、3DSの遊戯王(決められたデッキしか使えない)とマスターデュエル(デッキを自由に組める)の差どころではありません。
カードの使用回数制限がありません。
出撃可能なユニット数に制限がありません。
ユニットの強化回数の制限がありません。
1撃や1ターンのダメージ天井はありません。
手札の枚数上限はありません。
レリックと呼ばれる恒久的な強化品でデメリットをメリットに変えたり、さらなるユニットの配置も可能です。
こういった感じで、超自由です。
言葉だけじゃ魅力は伝わらないのでプレイ動画を見てみてください。
[91,728,973個の何かを召喚してゲームを破壊しながら勝利するオーバーダンジョン](https://youtu.be/NgJEOZKjwf8)
ちなみにこのゲーム、エフェクトが最適化されていないせいかユニット数が増えすぎると平気で10FPSをきります。
先ほどの動画を投稿した人が**RTX4090**を購入してこのゲームを動かしたところユニット数1000を超えたあたりでFPSが10をきっていました。
私のPCはRTX3080を積んでいるのですが600ユニット付近でFPSが10をきりました。
ぜひ遊べるベンチマークとして遊んでみてください。
[Overdungeon](https://store.steampowered.com/app/919370/Overdungeon/)
税込み1480円
- - - -
- - - -
# Processingで疑似3D(笑)を作ったら褒められた件
前期の必修科目に情報表現入門というものがあり、課題としてProcessingでのアプリ制作が課せられました。
Processingは実行ウィンドウに線の描画などが可能で、高校のころスクラッチでクソゲーを作っていた私としては、画像を使わずにすべて線や図形で描画しようと考えました。
そこで考え付いたのが、3D迷路と.exeの融合です。
- - - -
## .exe
.exeというのは有名ゲームなどの海賊版を偽って作られたホラーゲームの1種です。
普段そのゲームからは見ることができないグロテスクな描写や、ウィルスまがいの動作が売りです。
ニコニコ大百科を引用すると、
> 主な定義は冒頭の通りだが、基本的には海外で制作されているものが多く、内容は主に人気なゲーム(例として『スーパーマリオブラザーズ』や『ソニック・ザ・ヘッジホッグ』など)のクローンや、アニメ(海外で言うところの『マイリトルポニー』など)の二次創作で、かつホラーゲームであることが多い。
さらに言えば、プレイヤーに対して悪意に満ちた演出や動作を行うことも特徴。プレイヤーの否応なしにフルスクリーンで起動し、原作の雰囲気をブチ壊しにするような陰鬱な雰囲気を演出してスプラッタ表現をこれでもかと多用、そして唐突な叫び声とともに衝撃的な画像を表示するのが大体のお約束である。そればかりか、唐突にゲーム自体が終了したかと思えば実はバックグラウンドプロセスを密かに残すことがあり、そのまま大量のファイル(画像やテキスト)のコピーを生成したり、強制的にOSをシャットダウンさせたりとウイルス紛いの挙動をすることも少なくない。ものによっては突然CDドライブを開けさせるような古典的でお茶目な驚かせ方をすることもある。
ホラー作品としてはかなり安直で、上記のようなスプラッタ表現、ジャンプスケア(驚かせ)演出の多様もさることながら、「本来の主人公(あるいは健全な存在だったメインキャラクター)が殺戮者と化し、ほかの登場人物から憎悪・恐怖されている」という改変設定がやたらと多用される傾向にある。クローンゲームであることからバグが発生しているかのように演出して恐怖を煽ることも多い。
ただし、上記のような特徴を多く併せ持つexeゲームというのはあくまでも典型的なものに過ぎず、変化球としてフルスクリーンにならないものもあれば、オリジナルの作品もある。多くの人が同じようなゲームを作ることによるパターン化が大きく、そうしたものを好まないプレイヤーは自分の好みに合うものを玉石混合の中から探して遊ぶしかない。
有名な作品:Sonic.exe
- - - -
## コードの概要
まず正面のみ通行可能な時に表示させたい画面がこれです。
![maze1](https://i.imgur.com/Pm5mIW6.png)
前に進行するということは両脇の線が外側にフェードアウトし、正面の線が外側に動き現在の両脇の線まで移動し、床の線が下側に降りてくればいいわけです。
なので、すべての線の両端のx座標y座標が任意の秒数かけて次の状態に遷移してくれるように書きます。
また、すべての方向が行き止まり、左のみ通行可能、左右のみ通行可能、右のみ通行可能とすべて作っていては非常に面倒くさいです。
なので、左が通れるかどうか、正面が通れるかどうか、右が通れるかどうかに分けて、1連の流れにしてくれるコードに突っ込んであげました。
ちなみにプログラミング自体の歴は浅いので、多分最適な書き方じゃないです。
~~まぁそれを言い出したらProcessingのライブラリに3Dモデルをいじるものもありますしお寿司。~~
- - - -
## 出来上がったものがこちらです
なんかコードの記述がうまくいってくれないのですっごい汚いコードを張ります。
読みにくいと思うので、左のところから次のところに行ってもらっても構いません。
### ワープポイントコード前駅
~~~
float effecttime=0;
int memovephase=0;
int rectphase=0;
float passweight=30;
float passtime=60;
float passtimerate=360.0/passtime;
float show_corner_time=80;
float new_zero_time=(passtime+passweight-show_corner_time);
//block_around_me_now[];//front left back right
//block_around_me_next[]//front left back right
void memoveanimetion_floor() {
if (memovephase<=2) {
if (block_around_me_now[0]!='x'&&block_around_me_now[0]!='g') {
fill(50);
stroke(50);
quad(width/16*2, height, width/16*14, height, width/16*10, height/16*8, width/16*6, height/16*8);//地面
fill(255);
stroke(255);
line(width/16*2, height, width/16*6, height/16*8);//基礎ライン左
line(width/16*14, height, width/16*10, height/16*8);//基礎ライン右
line(width/16*2, height, width/16*2, 0);//基礎ライン左手前
line(width/16*14, height, width/16*14, 0);//基礎ライン右手前
line(width/16*6, height/16*8, width/16*10, height/16*8);//基礎ライン奥
line(width/16*6, height/16*8, width/16*6, 0);//基礎壁ライン左奥
line(width/16*10, height/16*8, width/16*10, 0);//基礎壁ライン右奥
} else if (block_around_me_now[0]=='x'||block_around_me_now[0]=='g') {
fill(50);
stroke(50);
quad(width/16*2, height, width/16*14, height,
width/16*6-(effecttime-passweight-show_corner_time)* passtimerate, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate),
width/16*10+(effecttime-passweight-show_corner_time)* passtimerate, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate));//地面
fill(255);
stroke(255);
line(width/16*2, height,
width/16*10+(effecttime-passweight-show_corner_time)* passtimerate, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate) );
//基礎ライン左
line(width/16*14, height,
width/16*6-(effecttime-passweight-show_corner_time)* passtimerate, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate));
//基礎ライン右
line(width/16*2, height, width/16*2, 0);//基礎ライン左手前
line(width/16*14, height, width/16*14, 0);//基礎ライン右手前
line(width/16*6-(effecttime-passweight-show_corner_time)* passtimerate, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate),
width/16*10+(effecttime-passweight-show_corner_time)* passtimerate, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate));
//基礎ライン奥
}
} else if (memovephase>=3) {
if (block_around_me_next[0]!='x') {
fill(50);
stroke(50);
quad(width/16*2, height, width/16*14, height, width/16*10, height/16*8, width/16*6, height/16*8);//地面
fill(255);
stroke(255);
line(width/16*2, height, width/16*6, height/16*8);//基礎ライン左
line(width/16*14, height, width/16*10, height/16*8);//基礎ライン右
line(width/16*2, height, width/16*2, 0);//基礎ライン左手前
line(width/16*14, height, width/16*14, 0);//基礎ライン右手前
line(width/16*6, height/16*8, width/16*10, height/16*8);//基礎ライン奥
line(width/16*6, height/16*8, width/16*6, 0);//基礎壁ライン左奥
line(width/16*10, height/16*8, width/16*10, 0);//基礎壁ライン右奥
} else if (block_around_me_next[0]=='x') {
fill(50);
stroke(50);
quad(width/16*2, height, width/16*14, height,
width/16*10+(effecttime-passweight-new_zero_time)* passtimerate, height/16*8+((effecttime-passweight-new_zero_time)*1.25* passtimerate),
width/16*6-(effecttime-passweight-new_zero_time)* passtimerate, height/16*8+((effecttime-passweight-new_zero_time)*1.25* passtimerate)
);//地面
fill(255);
stroke(255);
line(width/16*2, height,
width/16*6-(effecttime-passweight-new_zero_time)* passtimerate, height/16*8+((effecttime-passweight-new_zero_time)*1.25* passtimerate));
//基礎ライン左
line(width/16*14, height,
width/16*10+(effecttime-passweight-new_zero_time)* passtimerate, height/16*8+((effecttime-passweight-new_zero_time)*1.25* passtimerate));
//基礎ライン右
line(width/16*2, height, width/16*2, 0);//基礎ライン左手前
line(width/16*14, height, width/16*14, 0);//基礎ライン右手前
line(width/16*6-(effecttime-passweight-new_zero_time)* passtimerate, height/16*8+((effecttime-passweight-new_zero_time)*1.25* passtimerate),
width/16*10+(effecttime-passweight-new_zero_time)* passtimerate, height/16*8+((effecttime-passweight-new_zero_time)*1.25* passtimerate));
//基礎ライン奥
}
}
}
void memoveanimetion_left() {
switch (memovephase) {
case 0:
fill(255);
stroke(255);
line(width/16*6-(effecttime-passweight+show_corner_time)* passtimerate, height/16*8+((effecttime-passweight+show_corner_time)* passtimerate*1.25),
width/16*6-(effecttime-passweight+show_corner_time)* passtimerate, 0);//leftsecondwallline
if (block_around_me_now[1]!='x'&&block_around_me_now[0]!='g') {
line(width/16*2, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate),
width/16*6-(effecttime-passweight+show_corner_time)* passtimerate, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate));//leftfloorline
fill(50);
noStroke();
triangle(width/16*2+1, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate)+3,
width/16*6-(effecttime-passweight-show_corner_time)* passtimerate-1, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate)+3,
width/16*2+1, height+2);
}
break;
case 1:
fill(255);
stroke(255);
line(width/16*6-(effecttime-passweight+show_corner_time)* passtimerate, height/16*8+((effecttime-passweight+show_corner_time)* passtimerate*1.25),
width/16*6-(effecttime-passweight+show_corner_time)* passtimerate, 0);//leftsecondwallline
if (block_around_me_now[1]!='x') {
line(width/16*2, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate),
width/16*6-(effecttime-passweight+show_corner_time)* passtimerate, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate));//leftfloorline
fill(50);
noStroke();
triangle(width/16*2+1, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate)+3,
width/16*6-(effecttime-passweight-show_corner_time)* passtimerate-1, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate)+3,
width/16*2+1, height+3);
}
break;
case 2:
if (block_around_me_next[1]!='x') {
fill(255);
stroke(255);
line(width/16*6-(effecttime-new_zero_time)* passtimerate, height/16*8+((effecttime-new_zero_time)*1.25* passtimerate),
width/16*6-(effecttime-new_zero_time)* passtimerate, 0);//leftwallline
line(width/16*6-(effecttime-new_zero_time)* passtimerate, height/16*8,
width/16*6, height/16*8);//leftfloorline
fill(50);
noStroke();
triangle(width/16*6-(effecttime-new_zero_time)* passtimerate+1, height/16*8+((effecttime-new_zero_time)*1.25* passtimerate)+3,
width/16*6-(effecttime-new_zero_time)* passtimerate+1, height/16*8+3, width/16*6+1, height/16*8+3);//leftfloorline
}
break;
case 3:
fill(255);
stroke(255);
line(width/16*6-(effecttime-passweight-new_zero_time)* passtimerate, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25),
width/16*6-(effecttime-passweight-new_zero_time)* passtimerate, 0);//leftsecondfallline
if (block_around_me_next[1]!='x') {
line(width/16*6-(effecttime-new_zero_time)* passtimerate, height/16*8+((effecttime-new_zero_time)*1.25* passtimerate),
width/16*6-(effecttime-new_zero_time)* passtimerate, 0);//leftwallline
line(width/16*6-(effecttime-new_zero_time)* passtimerate, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25),
width/16*6-(effecttime-passweight-new_zero_time)* passtimerate, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25));//leftfloorline
fill(50);
noStroke();
triangle(width/16*6-(effecttime-new_zero_time)* passtimerate+1, height/16*8+((effecttime-new_zero_time)*1.25* passtimerate)+3,
width/16*6-(effecttime-passweight-new_zero_time)* passtimerate+1, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25)+3,
width/16*6-(effecttime-new_zero_time)* passtimerate+1, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25)+3);
}
break;
case 4:
fill(255);
stroke(255);
line(width/16*6-(effecttime-passweight-new_zero_time)* passtimerate, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25),
width/16*6-(effecttime-passweight-new_zero_time)* passtimerate, 0);//leftsecondfallline
if (block_around_me_next[1]!='x') {
line(width/16*2, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25),
width/16*6-(effecttime-passweight-new_zero_time)* passtimerate, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25));//leftfloorline
fill(50);
noStroke();
triangle(width/16*2+1, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25)+3,
width/16*6-(effecttime-passweight-passweight-new_zero_time)* passtimerate+1, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25)+3,
width/16*2+1, height+3);
}
break;
}
}
void memoveanimetion_right() {
switch (memovephase) {
case 0:
fill(255);
stroke(255);
line(width/16*10+(effecttime-passweight+show_corner_time)* passtimerate, height/16*8+((effecttime-passweight+show_corner_time)* passtimerate*1.25),
width/16*10+(effecttime-passweight+show_corner_time)* passtimerate, 0);//rightsecondwallline
if (block_around_me_now[3]!='x'&&block_around_me_now[0]!='g') {
line(width/16*14, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate),
width/16*10+(effecttime-passweight+show_corner_time)* passtimerate, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate));//rightfloorline
fill(50);
noStroke();
triangle(width/16*14-1, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate)+3,
width/16*10+(effecttime-passweight-show_corner_time)* passtimerate+1, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate)+3,
width/16*14-1, height+2);
}
break;
case 1:
fill(255);
stroke(255);
line(width/16*10+(effecttime-passweight+show_corner_time)* passtimerate, height/16*8+((effecttime-passweight+show_corner_time)* passtimerate*1.25),
width/16*10+(effecttime-passweight+show_corner_time)* passtimerate, 0);//rightsecondwallline
if (block_around_me_now[3]!='x') {
line(width/16*14, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate),
width/16*10+(effecttime-passweight+show_corner_time)* passtimerate, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate));//rightfloorline
fill(50);
noStroke();
triangle(width/16*14-1, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate)+3,
width/16*10+(effecttime-passweight-show_corner_time)* passtimerate+1, height/16*8-((passweight-effecttime-show_corner_time)*1.25* passtimerate)+3,
width/16*14-1, height+3);
}
break;
case 2:
fill(255);
stroke(255);
if (block_around_me_next[3]!='x') {
line(width/16*10+(effecttime-new_zero_time)* passtimerate, height/16*8+((effecttime-new_zero_time)*1.25* passtimerate),
width/16*10+(effecttime-new_zero_time)* passtimerate, 0);//rightwallline
line(width/16*10+(effecttime-new_zero_time)* passtimerate, height/16*8,
width/16*10, height/16*8);//rightfloorline
fill(50);
noStroke();
triangle(width/16*10+(effecttime-new_zero_time)* passtimerate-1, height/16*8+((effecttime-new_zero_time)*1.25* passtimerate+3),
width/16*10+(effecttime-new_zero_time)* passtimerate-1, height/16*8+3, width/16*10+1, height/16*8+3);//rightfloorline
}
break;
case 3:
fill(255);
stroke(255);
line(width/16*10+(effecttime-passweight-new_zero_time)* passtimerate, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25),
width/16*10+(effecttime-passweight-new_zero_time)* passtimerate, 0);//rightsecondwallline
if (block_around_me_next[3]!='x') {
line(width/16*10+(effecttime-new_zero_time)* passtimerate, height/16*8+((effecttime-new_zero_time)*1.25* passtimerate),
width/16*10+(effecttime-new_zero_time)* passtimerate, 0);//rightwallline
line(width/16*10+(effecttime-new_zero_time)* passtimerate, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25),
width/16*10+(effecttime-passweight-new_zero_time)* passtimerate, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25));//rightfloorline
fill(50);
noStroke();
triangle(width/16*10+(effecttime-new_zero_time)* passtimerate-1, height/16*8+((effecttime-new_zero_time)*1.25* passtimerate+3),
width/16*6-(effecttime-passweight-new_zero_time)* passtimerate-1, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25)+3,
width/16*10+(effecttime-new_zero_time)* passtimerate-1, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25)+3);
}
break;
case 4:
fill(255);
stroke(255);
line(width/16*10+(effecttime-passweight-new_zero_time)* passtimerate, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25),
width/16*10+(effecttime-passweight-new_zero_time)* passtimerate, 0);//rightsecondwallline
if (block_around_me_next[3]!='x') {
line(width/16*14, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25),
width/16*10+(effecttime-passweight-new_zero_time)* passtimerate, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25));//rightfloorline
fill(50);
noStroke();
triangle(width/16*14-1, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25)+3,
width/16*10+(effecttime-passweight-new_zero_time)* passtimerate-1, height/16*8+((effecttime-passweight-new_zero_time)* passtimerate*1.25)+3,
width/16*14-1, height+3);
}
break;
}
}
void memoveanimetion_time() {
effecttime++;
if (effecttime==passtime+passweight-show_corner_time) {
footstep.play(0);
memovephase=2;
}
if (effecttime-new_zero_time==passweight)memovephase=3;
if (effecttime-new_zero_time==passtime)memovephase=4;
if (effecttime==passtime+passweight+1) {
footstep.pause();
effecttime=0;
animetiontime=0;
memovephase=0;
block_around_me_now_save();
}
}
void memoveanimetion() {
if (effectnumber<7||effectnumber==10||effectnumber==666) {
memoveanimetion_floor();
strokeWeight(1);
noStroke();
if (effecttime<passtime+passweight-show_corner_time) {
memoveanimetion_left();
memoveanimetion_right();
if (memovephase>0)memoveanimetion_time();
}
if (effecttime>=passtime+passweight-show_corner_time) {
memoveanimetion_left();
memoveanimetion_right();
if (memovephase>0)memoveanimetion_time();
}
} else {
memoveanimetion_floor_after_six();
strokeWeight(1);
noStroke();
if (effecttime<passtime+passweight-show_corner_time) {
memoveanimetion_left_after_six();
memoveanimetion_right_after_six();
if (memovephase>0)memoveanimetion_time();
}
if (effecttime>=passtime+passweight-show_corner_time) {
memoveanimetion_left_after_six();
memoveanimetion_right_after_six();
if (memovephase>0)memoveanimetion_time();
}
}
}
~~~
### ワープポイントコード後駅
まぁこういった感じでそれっぽい3D書いて提出したら、思ったよりも生徒から好評を得られて、とてもうれしかったです。
- - - -
## ほんへの動画上げておきました
2次配布が可能か不明なので、全編プレイした動画を張っておきます。ぜひ見ておいてください。
~~あとチャンネル登録お願いします。~~
_人人人人人人人人人_
[MAZE.exe_Youtube](https://youtu.be/nheufryxDEE)
 ̄Y\^Y\^Y\^Y\^Y\^Y\^Y\^Y ̄
ずれてる
- - - -
- - - -
# 近況&あとがき
ぐおおおおおおおおおおおおおおおおおお現在2022年12月11日22時23分
遅刻です。
全力で謝っておきます。
## 近況報告
最近はOver Watch 2ばかりやってますね。
CoDMW2買ったはいいけどフラッシュばかり飛んできて画面チカチカしてやる気なくなりそうです。
シグマとジャンクラットとゼニヤッタ使ってます。
## 宣伝
音楽作ってたりYoutubeやったりTwitterやってます。
Youtubeのチャンネル登録よろしくお願いします。
[侵略者_dorapon-Youtube](https://www.youtube.com/channel/UCSbEn2xcMe0wvmF36G22dIQ)
[侵略者-Twitter](https://twitter.com/gomieshizumu)
[nagata-Twitter](https://twitter.com/nagatakun_real)
[My Favorite Music list](https://t.co/RAYWwJqbSa)
[My Music](https://t.co/bMLT4QiaFw)
## あとがき
初めて記事を書かせていただきました。
こうやって文章を他人に公開することは今までなかったので貴重な経験でした。
次回も存在すると思うので是非参加させていただきます。
次は期日守ります!!!!!
明日の記事は
* ツナチキンさんの「【令和最新版】弊学の大学生協パソコンが凄い【新入生必見】」
* 楓さんの「趣味Aか趣味Bかsurfaceについて書くと思います」
* ゆんゆんさんの「みたらハマるガチャガチャの話!あとサークルも作った」です!
ありがとうございました!
[^1]:[Reset-DJ_MAD_DOG](https://music.youtube.com/watch?v=MPmLy_fROYo&feature=share)
[^2]:[Bangarang-SKRILLEX](https://music.youtube.com/watch?v=YJVmu6yttiw&feature=share)
[^3]:[Jackpot-TheFatRat](https://music.youtube.com/watch?v=kL8CyVqzmkc&feature=share)
[^4]:[Devil_Tech^DVEIGHT](https://music.youtube.com/watch?v=kOj5rZoxzqo&feature=share)
[^5]:[Spam-Bainbridge](https://music.youtube.com/watch?v=P9Wc_1XrkbQ&feature=share)
[^6]:[Windows10000-Kobaryo](https://music.youtube.com/watch?v=VOzIZBEpdaI&feature=share)
[^7]:[4'33"](https://youtu.be/Oh-o3udImy8)
[^8]:[METRO](https://www.metro.ne.jp/artist-prof/%E4%B8%AD%E7%94%B0%E7%B2%A5/)
[^9]:[公式サイト](http://www.kayunakada.com/)
[^10]:[One_Directio-What_Makes_You_Beautiful_(5_Piano_0Guys,_1_piano)_-_The_Piano_Guys](https://youtu.be/0VqTwnAuHws)
[^11]:[Brutal_Decibel_EP](https://youtu.be/6bjCZClP-wU)
[^12]:[1BPM](https://music.youtube.com/watch?v=Fr7dlVzF4M0&feature=share)
[^13]:[Behemoth(Extended_Mix)](https://music.youtube.com/watch?v=gmiMKz4hF3g&feature=share)
[^14]:[うっせぇわ](https://music.youtube.com/watch?v=Qp3b-RXtz4w&feature=share)
[^15]:[堕天](https://music.youtube.com/watch?v=HRL5Cp_mPeo&feature=share)
[^16]:[DA'AT_-The_First_Seeker_of_Souls-](https://music.youtube.com/watch?v=YAi5YVmACO4&feature=share)
[^17]:[Echoes](https://music.youtube.com/watch?v=wuRyqM_s8Hc&feature=share)