DTMセール情報を集めるプログラムを作った話
DTMプラグインのセール情報をまとめているWebサイトからセール情報を収集し、結果を表示するプログラムをPythonで作った話です。
背景
DTMerにとって三度の飯よりも大事なのが、プラグインやサンプルパックのセール情報です。ちょうどブラックフライデーも近づいてきているので、DTMerはセール情報に敏感になる時期じゃないでしょうか。
ありがたいことに、世に溢れているセール情報をまとめてくれているWebサイトは複数あるのですが、
- 各サイトを巡回するのは面倒くさい
→ 複数サイトの情報をまとめて見たい - 自分が興味のないセール情報も多い
→ 自分が興味のあるセール情報だけ見たい(Wavesの情報だけ、ピアノ音源の情報だけ…など)
という需要があるかと思いました。
「それ、スクレイピングとかいうやつやればできると思うんですけど…」
と思ったので や り ま し た 。
概要
セール記事をまとめている複数のWebサイトをスクレイピングし、セール記事を収集します。 以下のWebサイトからセール記事を集めます。
収集したセール記事には以下の処理がおこなわれます。
- タグの自動付与
- セール期間の自動抽出(うまくいかない場合あり)
- 日付順ソート
収集結果はHTMLで出力されるので、Webブラウザでセール情報を閲覧できます。
使ったもの
- Python 3.7.0
- Pythonパッケージ(サードパーティ)
- Requests
HTTPリクエストを投げてHTMLを取得するために使用 - Beautiful Soup 4
取得したHTMLから情報を抽出するために使用
- Requests
作ったもの
最終的にこんな感じで結果を表示するプログラムを作りました。
プログラムはこちら。
使い方
1. プログラムのダウンロード
上記GitHubリンク先のリポジトリをgit clone
するか、ZIPダウンロードするなりでプログラムをダウンロードします。
2. スクレイピング
web_scraper.py
を実行し、スクレイピングをおこないます。-n
オプションで、各サイトからのセール記事取得件数N
を指定できます。スクレイピングするWebサイトの数をM
とすると、N * M
個のセール記事を収集した後、そこから終了済みのセール記事を差し引いたものが最終的な収集結果となります。収集結果はarticles.pickle
へ出力されます。
$ python3 script/web_scraper.py -n 100 > Scraping is started. (Run parallelly) > HTTP GET Request takes 0.353474 [sec] (source : https://computermusic.jp/category/セール/) > HTTP GET Request takes 0.348843 [sec] (source : https://sawayakatrip.com/category/dtm・daw関連記事/sale) > HTTP GET Request takes 0.546751 [sec] (source : https://computermusic.jp/category/%E3%82%BB%E3%83%BC%E3%83%AB/page/2/) ⋮ > HTTP GET Request takes 1.683039 [sec] (source : http://melodealer.com/vstbuzz-bigkick-by-plugin-boutique-50per-off-sale/) > HTTP GET Request takes 1.492022 [sec] (source : http://melodealer.com/vstbuzz-96-off-ultimate-rmx-30k-bundle/) > HTTP GET Request takes 1.583438 [sec] (source : http://melodealer.com/ik-multimedia-20year/) > Scraping finished. Scraping takes 189.67374396324158 [sec] > Results saved to DTMer's-Wallet-Breaker/articles.pickle
3. HTML生成
html_generater.py
を実行し、収集結果を表示するためのHTMLを生成します。生成の際、2.で出力されたarticles.pickle
が必要です。-ob(open browser)
オプションをつけると、生成されたHTMLをWebブラウザで自動で開いてくれます。なお、HTMLファイルはhtml
ディレクトリの下に生成されます。
$ python3 script/html_generater.py -ob
4. Webブラウザで閲覧
3.で-ob
オプションをつけると、全セール記事のページが表示されます。
右側に表示されているタグをクリックすると、タグによる絞り込み結果が表示されます。絞り込みに使ったタグは、セール記事件数の右側に表示されます。("YAMAHA"タグで絞り込みした例↓)
各タグの()内の数字は、そのタグが付与されたセール記事の件数です。
タグ付けについては、tags.txt
に書かれたタグ文字列が読み込まれ、記事のタイトルまたは説明文にタグ文字列が含まれているとそのタグが付与されます。どのタグにもマッチしなかった記事には"None"タグが付与されます。
ユーザによってtags.txt
へ新しいタグを追記することも可能です。
None Ableton Ableton Live Accusonus Addictive Drums Addictive Keys ⋮ ドラム バイオリン ブラックフライデー ベース ボーカル ピアノ
ページのフッターにはスクレイピングしたデータの最終更新日時が表示されます。データが古いと感じたら2.のスクレイピングを再実行しましょう。
感想
大したことはやっていないのですが、大量のセール情報をタグで絞り込み検索できたりするのは割と便利なんじゃないでしょうか。
プログラムについて話すと、HTML出力するコードはかなり泥臭い実装になっちゃったので、Webフレームワークとか使うともっとスマートにできるのかもしれません。(素人並感)
あとはWebサーバだの使ってデプロイすればちゃんとしたWebアプリとしても動かせそうだけど、そんな気力はありませんでした。(無能並感)
最後に
一人でも多くのDTMerの破産をお祈り申し上げます。
Pythonで楽器音の比較をしようとした話
とある事情で2つの楽器音波形の比較をやりたくなったので、Pythonで色々試してみたメモです。
やりたいこと
使ったもの
比較方法
2つの波形から特徴量を抽出し、特徴量同士の差分(距離)を計算、差分が小さければ「同じ」、大きければ「違う」とみなします。
今回試した特徴量は以下の3つです。
- 振幅スペクトル
- 振幅スペクトル(セントロイド)
- 意味合いとしては1.と同じだけど、こっちは各フレームの振幅スペクトルのセントロイド(重心)を比較する
- librosaのリファレンスを見てたら振幅スペクトルのセントロイド抽出ができるとわかったので使ってみた(てきとう)
- [時間フレーム数] の一次元配列になり、1.と比べて比較数が少ないので計算量で優位
- MFCC(メル周波数ケプストラム係数)
- 波形からMFCCを抽出し、各フレームのMFCC列を比較する
- MFCCは音声認識でよく使われる特徴量で、ここでは波形同士の音色の特性を比較するみたいな意味合いになると思う(よくわかってない)
- [時間フレーム数] × [MFCC次元数] の二次元配列になる
比較する波形同士はフレーム数が互いに異なる場合が多いです。したがって、系列長が異なるデータ同士の比較が可能なDTW(動的時間短縮)という手法を用いて波形を比較します。少し詳しい話をすると、特徴量のユークリッド距離を各点のコストとし、累積距離を0.0〜1.0に正規化してこれを波形同士の類似度とします。
プログラム
wavファイルからそれぞれの特徴量を抽出し、DTWで類似度を計算するスクリプトを作りました。
github.com
実験
Studio One 3でピアノのサンプル音をいくつか録音し、比較をおこないます。録音したサンプルは以下の5つです。
- 音高C3、4分音符の長さで鳴らしたピアノ音(比較基準)
- 1.と同じ条件で、1.とは別に録音
- 1.と同じ条件で、発音時刻を1秒遅らせた
- 1.の条件の長さのみ2分音符に変更して鳴らしたもの
- 1.と同じ条件で、リバーブをかけた
期待する結果としては、1.〜4.で類似度が高くなり、5.で類似度が低くなってくれればOKです。
結果
各ペアの類似度を示します。
比較ペア | 振幅スペクトル |
振幅スペクトル (セントロイド) |
MFCC |
---|---|---|---|
1 , 1 |
1.000 |
1.000 |
1.000 |
1 , 2 |
1.000 |
0.986 |
1.000 |
1 , 3 |
0.795 |
0.949 |
0.832 |
1 , 4 |
0.995 |
0.905 |
0.983 |
1 , 5 |
0.973 |
0.784 |
0.917 |
総合的に見ると振幅スペクトル(セントロイド)が強そうです。5.との比較で類似度が下がっているので、期待した結果と言えます。一方で、長さが異なる音との比較では振幅スペクトルとMFCCが割とロバストなのかなあとも思われます。あとは閾値をうまいこと設定してやれば、ひとまずは識別ができそうな感じです。
最後に
超簡単に信号処理やオーディオ分析ができるlibrosaは神。
Vintage Organsのパンの揺らぎを消す方法
解決したいこと
Native Instrumentsのオルガン音源「Vintage Organs」を使っていたら、音色にパンの揺らぎが起きて気持ち悪かったのでこれをなんとかしたかった。
Vintage Organsには「ROTOR」というエフェクトがあって、これをONにするとレスリースピーカ君迫真のコーラス効果が得られてクッソ気持ちいい。というかロックなオルガンをやりたい場合は必須のエフェクトだと思う。
ただ、これをやると以下のような効果が生じる。
- 音量に揺らぎが生じる
- パンに揺らぎが生じる
1.は個人的にまだいいとして、2.については音色のパンがR-Lチャンネル間をぎゅるぎゅる動いて気になってしゃーない。白玉とか長い音符を弾いてみるとパンの揺らぎがよくわかる。
ちなみにハモンドオルガンについては以下のURLの解説がわかりやすくてほんとすこ。
www.suzuki-music.co.jp
使用ソフトウェア・プラグイン
- Vintage Organs:Native Instrumentsのオルガン音源。ハモンドオルガンの名器「B3」をはじめとする様々なモデルを搭載している。
- KONTAKT PLAYER 5:Native Instrumentsの無償サンプルプレイヤー。同社のKOMPLETE製品の音源なんかを鳴らすために必要なプラグイン。
解決方法
ググって調べてたらNative Instrumentsのユーザフォーラムにたどり着き、同社の社員らしき人がイケメンな回答をしているのを発見出来た。
www.native-instruments.com
社員ニキ「音源の後ろにステレオエンハンサーを挿して、パラメータいじってモノラルに近づけるとパンの揺らぎが消せるゾ」
はぇ~すっごいわかりやすい…。
じゃけん実践しましょうね。
手順としては
- KONTAKT PLAYER 5にVintage Organsを読み込み、好きなように音作りをする。
- PLAYER上部の「Output」タブ(ミキサーのアイコン)をクリック、PLAYER下部に出力端子の情報が出る。
- st.1の1段目をクリックし、「Effects」->「Stereo Modeller」を選択。「Spread」を下げまくって「mono」にするとモノラル化される。
- st.1の2段目をクリックし、「Effects」->「Stereo Modeller」を選択。3.でモノラル化した音源をステレオに戻すため、「Pseudo Stereo」ボタンをクリック。これによりモノラル音源が擬似的にステレオ化される。あとは「Spread」をお好みで調整すればOK。
以上でパンの揺らぎが消えた音が手に入るはず。
耳で聴いた感じでは揺らぎはかなり抑えられている気がしました。(小並)
最後に
いかがだったでしょうか。
KONTAKT PLAYER 5の中で作業が完結しているし、悪くない解決方法なんじゃないかと思います。
JavaでのMIDIシーケンスの作り方メモ
JavaのプログラムでMIDIシーケンスを作りたかったんだけど、思いの外手こずったので作り方のメモです。
やりたいこと
使うAPI(というかクラス)とか
Sequencer | シーケンスの再生・停止等を担当するクラス。(プレーヤー) |
---|---|
Sequence | シーケンスを表すクラス。(楽譜) |
ShortMessage | ステータスバイトとデータバイトから構成されるMIDIメッセージのクラス。 |
MidiEvent | ShortMessageのインスタンスを基に作られるMIDIイベントのクラス。 |
コード例
簡単なMIDIイベント群によるシーケンスの生成・再生・停止を行うクラス。
import javax.sound.midi.MidiEvent; import javax.sound.midi.MidiSystem; import javax.sound.midi.Sequence; import javax.sound.midi.Sequencer; import javax.sound.midi.ShortMessage; public class JavaMidiSequence { private Sequencer sequencer; private Sequence sequence; public JavaMidiSequence() { try { sequencer = MidiSystem.getSequencer(); sequencer.open(); sequence = new Sequence(Sequence.PRQ, 480); sequence.createTrack(); sequencer.setSequence(sequence); } catch(Exception e) { e.printStackTrace(); } } /** * プログラムチェンジとノートオン/オフから構成されるMIDIイベントを追加 */ public void addNote(int channel, int progNumber, int noteNumber, int position, int duration) { try { // プログラムチェンジイベント生成 ShortMessage progChange = new ShortMessage(); progChange.setMessage(ShortMessage.PROGRAM_CHANGE, channel - 1, progNumber - 1, 0); MidiEvent progChangeEvent = new MidiEvent(progChange, position); // ノートオンイベント生成 ShortMessage noteOn = new ShortMessage(); noteOn.setMessage(ShortMessage.NOTE_ON, channel - 1, noteNumber, velocity); MidiEvent noteOnEvent = new MidiEvent(noteOn, position); // ノートオフイベント生成 ShortMessage noteOff = new ShortMessage(); noteOff.setMessage(ShortMessage.NOTE_OFF, channel - 1, noteNumber, 0); MidiEvent noteOffEvent = new MidiEvent(noteOff, position + duration); // イベント群をシーケンスへ追加 sequence.getTracks()[0].add(progChangeEvent); sequence.getTracks()[0].add(noteOnEvent); sequence.getTracks()[0].add(noteOffEvent); } catch(Exception e) { e.printStackTrace(); } } /** * シーケンスを再生 */ public void play() { try { sequencer.start(); } catch(Exception e) { e.printStackTrace(); } } /** * シーケンスを停止 */ public void stop() { if(sequencer.isRunning()) { sequencer.stop(); } sequencer.setTickPosition(0); } /** * シーケンサを閉じる */ public void close() { sequencer.close(); } }
ポイント
大事なのは以下のメソッド。各引数の意味は次の通り。
channel | 音色を割り振るチャンネル。1~16の整数値。 |
---|---|
progNumber | General MIDIの音色マップに示される楽器の番号。1~128の整数値。 |
noteNumber | 音程番号。0~127の整数値。 |
position | ノートオン(ノートの発音)が発生する時刻。整数値。 |
duration | ノートの発音時間長。整数値。 |
/** * プログラムチェンジとノートオン/オフから構成されるMIDIイベントを追加 */ public void addNote(int channel, int progNumber, int noteNumber, int position, int duration) { try { // プログラムチェンジイベント生成 ShortMessage progChange = new ShortMessage(); progChange.setMessage(ShortMessage.PROGRAM_CHANGE, channel - 1, progNumber - 1, 0); MidiEvent progChangeEvent = new MidiEvent(progChange, position); // ノートオンイベント生成 ShortMessage noteOn = new ShortMessage(); noteOn.setMessage(ShortMessage.NOTE_ON, channel - 1, noteNumber, velocity); MidiEvent noteOnEvent = new MidiEvent(noteOn, position); // ノートオフイベント生成 ShortMessage noteOff = new ShortMessage(); noteOff.setMessage(ShortMessage.NOTE_OFF, channel - 1, noteNumber, 0); MidiEvent noteOffEvent = new MidiEvent(noteOff, position + duration); // イベント群をシーケンスへ追加 sequence.getTracks()[0].add(progChangeEvent); sequence.getTracks()[0].add(noteOnEvent); sequence.getTracks()[0].add(noteOffEvent); } catch(Exception e) { e.printStackTrace(); } }
最初、複数楽器の割り当ては「トラック」に対して行うんだと勘違いしてたんですけど、どうやら「トラック」ではなく「チャンネル」に割り当てるのが正解らしいですね。
プログラムチェンジイベントを生成する際に、チャンネル番号に対応する任意の楽器番号を指定すれば良いっぽい。
ドラムスはチャンネル番号に9を指定すれば楽器番号はどうでもいいらしい。
チャンネル番号と楽器番号を指定したらあとはガシガシとノートオン/オフイベントを追加しまくる。
(例) ピアノ、オルガン、エレキギター、ベース、ドラムスを鳴らしたい場合 progChange.setMessage(ShortMessage.PROGRAM_CHANGE, 0, 0, 0); // Acoustic Piano progChange.setMessage(ShortMessage.PROGRAM_CHANGE, 1, 16, 0); // Drawbar Organ progChange.setMessage(ShortMessage.PROGRAM_CHANGE, 2, 30, 0); // Distortion Guitar progChange.setMessage(ShortMessage.PROGRAM_CHANGE, 3, 33, 0); // Electric Bass (finger) progChange.setMessage(ShortMessage.PROGRAM_CHANGE, 9, 0, 0); // Drums
Sylenth1でSupersawな音作り
シンセサイザー音源Sylenth1でSupersaw風のスタブ音作りをしてみたので、自分用に作り方メモです。
参考音源
NU_Panさん(@NU_Pan)-「G.T.T.F」
ミクさんのDrum&Bass楽曲です。メロディとか音色とか盛り上がり方とか、何もかもが自分好みで大好きな曲です。この曲のサビ等で鳴っている、バッキングのSupersaw音色がカッコよかったので、同じ音色作りにトライしました。
※音色作りのコツを色々とNU_Panさんに教えていただきました、ありがとうございました。また、音作りにあたってNU_Panさんのブログ記事も大いに参考にさせていただきました。
nu-pan.hatenablog.com
使用ソフトウェア・プラグイン
- SONAR X1 PRODUCER EXPANDED:Cakewalk製のDAW。全日本よく落ちるDAW代表。でも重いプラグインをマシマシしなければ特段落ちたりせずに普通に動く気がする。MIDI打ち込みの操作性が良く、付属音源の種類もアコースティック系・ダンスミュージック系のそれぞれにそれなりに対応出来る感じ。
- Sylenth1:有名な減算方式シンセサイザー音源。4基のオシレータがあってSupersawの音色作りとかが得意らしい。UIやパラメータがわかりやすくていじりやすい。
- Modern Exciter:フリーのエフェクトプラグイン、エキサイターその1。高域を目立たせて音色を輝かせるエフェクト。
- La Petite Excite:フリーのエフェクトプラグイン、エキサイターその2。
- ColourEQ:フリーのエフェクトプラグイン、パラメトリックイコライザ。ピーキングが4バンド分とローカット・ハイカットが搭載されているが、ローカット・ハイカットをそれぞれピーキングに変更して最大6バンドにすることも可能。
- A1StereoControl:フリーのエフェクトプラグイン、ステレオエンハンサー。
- REFLEKTOR:Native Instrumentsのリバーブプラグイン。とにかく色々な種類のリバーブが入っていて便利。
ルーティング
音作り
大事そうなところだけ簡単にメモ。
- Part Aのオシレータ2基にそれぞれノコギリ波を選択。それぞれDETUNEを約4.0、FINEを約2.0に設定。VOICESについてはOSC A1を2、OSC A2を4に設定している。Supersaw系のプリセットを見るとこのVOICESが7とか8とかになっていることが多いけど、今回の場合はそれだと音色が発散してしまって芯がぼやけてしまうので小さめの値にしている。
- Part Bのオシレータ1基にノコギリ波を選択。高域の味付け役にするため、OCTAVEは+2に設定。DETUNE、FINEの設定はPart Aと同じ。VOICESは6に設定しているが、こちらはむしろ発散気味にさせて広がる感じにしたかったため。あとはあくまで味付けなので、VOLUMEはかなり小さめの1.0に設定。
- フィルタはPart A、B両方ともローパスフィルタ。RESONANCEをつけて高域のジャリジャリ感が目立つようにしている。
- Sylenth1のEQをON。
- Sylenth1のDelayをON。
- Sylenth1のReverbをON。
MODE | 1-Pole | ||
---|---|---|---|
BASS | 3.0 dB | BASS FREQ | 880.0 Hz |
TREBLE | 7.5 dB | TREBLE FREQ | 約1200.0 Hz |
PING PONG | ON | ||||
---|---|---|---|---|---|
DELAY L | 1/8D | DELAY R | 1/16D | ||
LOW CUT | 約200.0 Hz | HIGH CUT | 約16000.0 Hz | ||
SMEAR | 0.0 | SPREAD | 50.0 % | ||
FEEDBACK | 50.0 % | WIDTH | 75.0 % | DRY/WET | 50.0 % |
PRE DELAY | 0.0 ms | DAMP | 10.0 | ||
---|---|---|---|---|---|
SIZE | 5.0 | WIDTH | 100.0 % | DRY/WET | 40.0 % |
エフェクト設定
エフェクタプラグインを設定していきます。
- Modern Exciter:HIGHを9時方向、BALANCEをMAXに設定。それ以外のパラメータはデフォルトのまま。
- La Petite Excite:HIGHを3.0に設定。それ以外のパラメータはデフォルトのまま。
- ColourEQ:
- A1StereoControl:STEREO WIDTHを200 %に設定。それ以外のパラメータはデフォルトのまま。
- REFLEKTOR
Low Cut | 約300.0 Hz、Q:0.70 |
---|---|
High Cut | 約16000.0 Hz、Q:0.70 |
Band 1 | -1.5 dB、約1250 Hz、Q:0.10、10 %、Type A |
Band 2 | -1.5 dB、約7000 Hz、Q:0.10、10 %、Type A |
† 実 聴 †
G.T.T.Fのサビで鳴っているバッキングをコピーしてテスト。
tmbox.net
発散し過ぎず芯があるSupersawになったかな~って感じです。エキサイターくん迫真の効果で、音に輝きも出てくれました。
最後に
全体的にパラメータの設定とかクッソテキトーです。リバーブとかもエフェクト効果が「これもうわかんねえなあ?」レベルな気がするけど、まあとりあえずかけとくかって感じです。本当はルーティングのインサート最終段にマキシマイザとか挿入するべきかもしれませんが、よくわからないのといいマキシマイザプラグインを持ってないのとで省略。マキシマイザの使い方とかちゃんと勉強しないとですね。
感想
NU_Panさんの音には遠く及びませんが、とりあえず自分的には満足な感じで音作りが出来たので楽しかったです。導入したばかりのSylenth1の練習にもなってよかったよかった。
入院のすゝめ
この記事は TUT Advent Calendar 2015の11日目 の記事です。
初めましての方は初めまして。TUT B4-3系のShun40という者です。
この記事では、僕が他大学院を受験してみて思ったこととかをダラダラと書かせていただきます。そもそもTUT生で他大学院を受けること自体がクッソ珍しいことのようなので、「へぇ~」と思いつつ読んでもらえるとすごく嬉しいです。全体的に主観マシマシな文章ですがよろしくお願いします。
※恐ろしいほどの長文です、すみません。
そもそもなぜ他大学院を選んだのか
まずは僕がTUTではなく他大学の院を選んだ理由を挙げてみます。
- 興味のある研究テーマが他所の大学院にあったから
- もっとレベルの高い大学で勉強や研究をしてみたかったから
- もっと都会な場所にある学校に通いたかったから
- なるべく良い最終学歴が欲しかったから
- TUTの校風に対する反抗心(小声)
1.と2.については自分で言うのもアレですが、至極真面目な理由です。自分のやりたい勉強 or 研究が今の大学では出来ないので他所の院に行く、というのはよくある話です。
3.については文字通りです。(TUT周辺の田舎具合に軽くショックを受け、)もっと都会な土地に行きたいなあと思った次第です。
4.についてはぶっちゃけた本音ですね。しばしば「学歴ロンダリング」とか言われるアレです。学歴については「後々になれば学歴なんて関係なくなる」って話を聞きますし僕もまあそうかなーと思うんですが、それでもやっぱり学歴ってのは一生ついてくるものなわけで、だったら少しでも良い大学を出ておきたいなと思ったのです。
5.はちょっと過激な言い方ですが、やたらと内部院進学を推してくるTUTの風潮に対して「大学院はもっと広い視野で考えて選ばないとダメだと思うんですけど…」って気持ちがあったんです。反抗とか言うと子供っぽいかもしれませんが、他大学院受験を意識するきっかけになったのは確かです。
他大学院受験のメリット・デメリット
【メリット】
- 今よりもレベルの高い大学で自分のやりたい勉強や研究に専念できる
- 大学を変えることで環境も変わり心機一転できる
- ガクレキ・ロンダリング・ワンチャン
【デメリット】
- TUTの内部院進学の推薦が使えない
- 院試に落ちたらそれなりに† 絶 望 †
- (デメリットではないけど)院試対策や好成績維持の努力が必要
メリットはとりあえずいいとして、デメリットについて詳しく書きます。特にTUT生の視点から見たデメリットになります。
まず、TUTの院試を推薦で受験できないっていうのが結構でかいです。TUTでは普通にやってれば普通に推薦をもらえ、推薦を使えば院試は99.999%受かると思います。TUT内部院進学率の高さはこの推薦制度のおかげのようなものです。この推薦を使えないということは、それだけで「院試に落ちる」というリスクが現実的になってくるということです。
「じゃあ院試に受かるよう勉強頑張ればええやん」ってなります。正論です、ぐぬぬ。そもそもセンター試験などと比べると大学院試の倍率は非常に低いので、院試自体が合格しやすい試験ではあります。それでも「試験」は「試験」です。落ちる時は落ちます。特に旧帝大以上のレベルになると院試も普通に難しいと思うので、落ちるのもそれほど珍しいことではなくなってきます。院試に落ちてしまうと
- 第1志望の大学院(研究室)に行けない
- 進路が定まらず、卒業研究などに専念できない
- 場合によっては就職 or 大学院浪人に進路変更
- (年度末ごろにある)2次試験を受ける場合、再び受験料や交通・宿泊費を要する
などなどお腹が痛くなるほどつらいリスクが盛りだくさんです。
要するに「他大学院受験はそれ自体がそこそこリスキーな選択肢である」ということです。こればかりは自分の成績や学力と相談して考えないといけない問題です。
僕の受験体験
堅苦しい話が続いてしまったので、ここで僕の大学院受験の体験記を書いてみたいと思います。(需要ガン無視)
B3 4月
1年目のCastle Of Tenpaku。TUTに入学したての頃の僕は、そのカントリー具合に
「TUTの大学院に進んだらここに4年住むのかぁ…」
とか考えてしまいました。この時に「もうちょっと都会な土地に住みたいなあ」という気持ちが芽生えた気がします。
B3 8月
B3前期の成績が思いの外良かったので、「もしかしたらもうちょい上の大学に行ってもやっていけるかな?」と思い、他大学院を調べ始めました。とりあえず旧帝大やそれに比肩する大学から見てみることにしました。
とりわけ魅力を感じたのは、以前友達と旅行に行ってどちゃくそ楽しかった北海道にある北海道大学です。研究に関しても面白そうなテーマを扱っている研究室があったので、割と真剣に行きたいと思うようになりました。
こうして、とりあえず行きたい大学院の目星はつけることができました。
B4 4月
2年目のCastle Of Tenpaku。研究室に配属され、ぼちぼち進路も考えないとなーという時期です。この時点では他大学とTUT、どちらの院に進むか迷っていました。
B4 5月
5月初めに研究室のボスと進路について話をしました。
僕「実は大学院をどこに行くかまだ決めかねていまして…。」
ボス「それマジ?今の時点で迷っているようじゃ甘いよ。他大学院を目指すなら行きたい研究室まで決めて、どうぞ。」
という具合に叱咤激励をいただきました。一応行きたい大学院とその研究室は目星をつけていたんですが、どうにも踏ん切りがつかなくて研究室見学にも行けていない状況だったんですね。
ボスの助言のおかげで踏ん切りがついたので、目星をつけていた北海道大学(北大)と筑波大学の研究室見学に行くことにしました。特に北大の見学が楽しかったのでちょっと詳しく書きます。
北海道大学の研究室見学
北大には5月上旬に見学に行ってきました。ちょうどゴールデンウィークで宮城県の実家に帰省していた時期だったので、行きは宮城から北海道までフェリー、帰りは北海道から愛知まで飛行機というルートです。
北大はJR札幌駅から徒歩10分程度の場所に位置する大学です。駅からは近いですが、キャンパスの面積がとんでもない広さなので、見学先の研究室まで20分ぐらい歩いた気がします。敷地総面積は日本の大学の中で一番広いらしいです。
研究室見学では先生やラボの方々と研究などの話ができ、非常に有意義で楽しい時間を過ごすことができました。加えて北大見学で思い出深かったのが、札幌で美味しいご飯を食べれたことです。
スープカレー@札幌市内:北大ラボのB4さんがオススメしてくれました
味噌ラーメン@新千歳空港:ぬーぱんさん(@NU_Pan)がオススメしてくれました
雪ミクスカイタウン@新千歳空港:ぬーぱんさん(@NU_Pan)がオススメして(ry
雪ミクスカイタウンは等身大の雪ミクさんが居たりして、何もかもが最高なミクさんショップでした。グッズも充実していて、気付いた時には雪ミクさんTシャツに3千円課金していました。
B4 6~7月
見学の時の思い出深さもあり、第1志望は北大に決めました。北大と筑波大は受験日が被っていたため、第2志望は筑波大ではなく、日程が被っていなかったTUTを受験することにしました。受験料も馬鹿にならないので、ちょっと怖いですが受験はこの2校のみとしました。(国立大学の院試受験料は3万円ぐらい、高すぎィ!)
志望校を決めたらあとはシコシコと勉強するのみです。幸い北大見学時に過去問をいただけたので、それを参考にちまちまと試験対策を進めました。こうして書くとコツコツ勉強をしていたようにも見えますが、危機感のない性格や取り掛かりの遅さなどが手伝い、勉強は全く進みませんでした。
また、北大の院試に必要だったのでTOEICも受験しました。TOEICの方もロクに勉強せず、試験直前に参考書を流し読みする程度の体たらくでしたが、TUT入学時と比べて200点ほどスコアアップすることができ、入試に使える最低限レベルのスコアは取れたかなという感じです。
B4 8月
8月下旬、ついにやってきてしまいました。院 試 本 番です。
北海道大学の院試
北大の院試は2日間の日程で行われました。1日目が筆記試験、2日目が口述試験でした。筆記試験の難易度は昨年度よりも難化しており、僕も含めて周りの受験者の人たちも轟沈していたようでした。1日目の結果はズタボロでしたが、嫌なことは寝たら忘れる鳥頭スキルを駆使して気分を切り替え、2日目の口述試験に臨みました。口述試験では巧いことを喋ろうというよりも、とにかく誠実に先生方からの質問に答えるよう頑張りました。
2日目の口述試験終了後、帰りの飛行機まで時間があったので希望先のラボにお邪魔し、先生やラボの方々とお会いして挨拶をしてきました。また、共に試験を受けたB4さんの誘いで、ラボの大型ディスプレイを使ったスマブラ対戦(for WiiU)で一緒に遊ばせてもらいました。僕はとりあえずロックマンを選んで基本フルボッコにされてただけなんですが、最高に楽しかったおかげで試験の憂鬱や緊張も吹っ飛びました。歓迎してくれたラボの皆さん、本当にありがとうございました。
帰り際には北大キャンパス内のクラーク博士像に合格を祈願してきました。
ちなみに受験の時は大通公園前のホテルに宿泊したんですが、夜にライトアップされたさっぽろテレビ塔がクッソ綺麗でした。また見たいです。
B4 9月
9月上旬、ついにやってきてしまいました。院 試 合 否 発 表です。
試験終了直後こそスマブラ効果のおかげで楽しく豊橋に帰還したわけですが、後になればなるほど落ちている気しかしなくなってくるものです。発表前日とかは緊張のせいで取るもの手につかず状態でした。
そんなわけで胸がドキドキ(心拍数114514)な状態で発表当日を迎えます。発表当日は北大ラボのB4さんに合格者番号掲示の写メをお願いしていました。待機中、とにかく何かに縋りたかった僕は、とりあえず部屋に飾っていたミクさんのフィギュアに跪いて祈りを捧げながらメールが来るのを全力待機していました。
発表時刻から数十分後、iPhone先輩がメール受信を知らせてくれました。B4さんからの写メ付きメールです。僕は光の速さで添付写メを開き、合格者番号の一覧を目視スキャンしました。結果は…
あ り ま し た 。
多少不鮮明ながらも、僕の受験番号がしっかりと書かれていました。念のため114514回見直しをし、見間違いでないことも確認しました。その直後の僕は、ッシャオラアとか叫びながら部屋で喜びの舞を踊っていたような気がします。安堵感と嬉しさが僕を狂わせました。
ちなみにその一週間後ぐらいにわかることですが、TUTの院試にも受かっていました。
こんな感じで、9月の合否発表を以って僕の院試は無事終了しました。
最後に
書きたいことを書いていたらとんでもなく長い文章になってしまいました。
最後に、他大学院受験をちょっとでも考えているTUTの後輩(B1~B3)が居た時のために、アドバイス的なことを書いてみたいと思います。一般的な大学院受験に関しては素晴らしいアドバイス記事が既にたくさんあるので、ここではTUT生が外部大学院を受ける際にしておいた方がいいことを書いてみます。
- 他大学院を受ける場合は、研究室見学(B3の終わり頃)の時点でボスに相談しておくのが吉
- 暇ならTOEICとか資格を取っておくと後々嬉しいかも
- 学校の成績は頑張って好成績をキープしよう
1.ですが、入りたいな~と思っている研究室のボスにはあらかじめ他大学院受験のことをお話ししておきましょう。そうすることで、その先生が他大学院受験に対して寛容である(認めてくれる)かどうかがなんとなくわかると思います。
2.ですが、旧帝大やそれに比肩するレベルの大学院では英語試験の代わりにTOEICやTOEFLの提出を求めてくることが多いです。院試直前になってから焦って受けることのないよう、前以て受けておくとGOODだと思います。また、大学院によっては資格も評価してくれる場合があります。実際、僕が受験した北大も情報処理技術者試験を加点要素として評価してくれたので、高専時代に取得したFEとAPを提出しました。このように資格も役立つケースがあるので、時間がある人は資格取得にチャレンジしてみてもいいかもしれません。
3.ですが、院試では出身大学の成績も「一応」見られます。評価の割合としてはそれほど大きいとは思いませんが、それでも好成績(基本Aとか)は維持しておくべきです。学校の授業を頑張っておけば、院試対策もそれだけ楽になると思います。ちなみに僕は必修科目と選択科目でそれぞれ1個ずつAを取り逃しました。(半ギレ)
最後にとか言いつつまた長くなってしまいました。ブログ自体、書くのが初めてだったので、読みづらい・つまらない記事だったらゴメンナサイ。ではでは。
ありがとうございました
-------------------------------------
次(12日目)の記事の担当はころん君(@Collonville)です。プログラミングやDTMを嗜む素敵な殿方です。どんな面白い記事を書いてくれるのかすごく楽しみですね。(圧力 of 無言)
ところで25日目のやまし君(@tikyuu_heiwa)の記事、「入院のすゝめ ~おかわり~」というタイトルに運命を感じるのは僕だけでしょうか?こちらもきっと面白い記事を書いてくれると思うので、興味のある方は是非是非。