(^p^)ブログ

いろいろなことがかかれていきます 編入関連の質問はTwitter,@mast15yamachiにて

2018年の厄を清算する

この記事はmastAdvantCalendar(Another)2018の2日目の記事です。

adventar.org

 

去年のアドベントカレンダーでは

AWSでミスって45万の請求が来た話 - (^p^)ブログ

こんなしくじり記事を書いていました。

 

今年は何を書こうかなぁと迷ってたんですが・・・

この一年、自分にとって良くないことがたくさん起きました。

その不幸をネタにしてピエロとなることでそのストレスを紛らわしてきたのですが、それが逆に更なる不幸を呼び寄せているのでは?とも考え、ここでネタにするのは最後にしようと考えました。

すなわちこの記事は「2018年の不幸をお焚き上げして幸せになろうの記事」です。

 

特に皆さんにとって有益な何かがある記事ではないです。ただのポエムです。

あと、話せない不幸もあるので話せるものだけにします。

 

今している音楽の研究の話とか音声処理の話でもしようかとも考えていたのですが、1記事にまとめるにはとても長くなりそうだし、もっと詳しい記事がネットにごろごろあるだろうと思い、やめました。

 

(2017年クリスマス)

・図書館でスマホを盗難される

2018年に入る直前の出来事です。中央図書館で勉強中仮眠をとって起きたらiphoneが充電器ごと消えていました。焦ったぼくはPCからiphoneを探すと、なぜか行った覚えのない春日宿舎辺りに反応が。

音を遠隔で出すなどして威嚇した結果なのか、iphoneは男子トイレの中で見つかりました。しかし、充電器は帰ってきませんでした。ただでさえ浮かれているクリスマスが嫌いなのに盗難被害に遭うなんて「なんてクリスマスだ!」と思わず叫びました。

 

2017年度秋C

 

・左耳が聞こえなくなる

君の名は。アンチの友人と飲んでたとき、ふざけて置いてあったギターでスパークルを弾いたところ思い切り殴られました。当たり所が悪く左耳がしばらく聴こえなくなりました。

 

2018年度春AB

・自転車が盗まれる

たしか駅前の有料駐輪場に自転車を止めていて、買い物を終えたら忽然と自転車がなくなっていました。このとき疲れていてうっかり鍵をかけ忘れていたのでしょうがないと言えばしょうがないとも言えますが、凹みました。

 

・呼んだタクシーがバイクと衝突

自転車を盗まれた翌日のできごとです。落ち込んだ僕は駅から実家まで帰る気力がなく、タクシーで帰ろうと道路でタクシーを呼んだ時、右車線から進路変更したタクシーと高速で突っ込んできたバイクが衝突しました。この2者間の事故とはいえ根本的には僕が原因の事故であってかなり凹みました。

 

・推薦が水に流れる

筑波でよい成績がとれたため院試の推薦をもらうことができました。しかし、僕らの代から編入生は前の在籍校の成績も見る精度に変わり、推薦はなかったことになりました。まぁ当然の話ですが、上げて落とすのやめろよと心の中で思いました。

 

2018年度春C

・自転車が盗まれる(2度目)

春Cの終わり、研究室内中間発表を終えたぼくは春日エリアに自転車を止めプチ帰省をしました。前に自転車を盗まれたこともあり鍵は必ずかけるようにしていました。

帰省を終えてつくばに帰ると・・・

自転車がまた忽然と消えていました。

鍵かかってるのによく盗んだな、ともはや感心してしまいました。

 

2018年度夏休み

・人生最大級の痛風

夏休みのゼミ合宿を終えたあたりから右足が痛み始め、やがて痛風の痛みになりました。過去の経験から「水をたくさん飲んでおけば治るだろ」と高をくくっていたのですが、10日ほど全く治らず、それどころか水の飲みすぎで急性水中毒になり貧血やめまいをおこし、死にかけました。

引越しの予定があったのにも関わらず、延期を余儀なくされました。

 

・院試前日にホワイトボードで殴られて大出血

東京にとある用事があり、それを終えた後に友人宅で飲んでいました。

例の君の名は。アンチの友人もいました。

Youtubeを見てたら意図せず前前前世が流れてしまい、それを聞いた彼(もちろん泥酔)が「今すぐク〇音楽止めろ」と僕を100円ショップで売っているホワイトボードで思い切り頭を殴ってきました。その攻撃を防ごうとした際、ホワイトボードの端の部分が左手に刺さり、手全体が血まみれになりました。これ院試前日の出来事です。

 

2018年度秋AB

・中間発表前日にブルースクリーン

中間発表の練習を終え、スライドの手直しをしようと前日まで躍起になっていました。

作業をしてる最中突然PCの動作がおかしくなり、やがてブルースクリーンになってしまいました。

むろん編集中のデータは飛び、泣きながらやり直しました。

 

ここまで

 

ここまで今年の不幸な出来事を書いてはみたのですが、半分くらいは自分に原因があるなと思いました。というのもうっかりが大きな過失につながるパターンで起きた不幸が多かったんですよね。

なので最近はうっかりを防ぎつつ、それでも起きてしまう不幸には「うわー辛っ、でもごはんおいしいしまあいいか」と笑って流せるよう意識して生活をしています。

不幸ばっか見過ぎていると人生楽しくなくなるしね!

というわけで雑になりますがここで記事を結びたいと思います。

 

 

人生とはジェットコースター 

やまを

 

以上です。ありがとうございました。(^p^)

 

研究室選びを考える

 

こんにちは。卒研で死にかけのやまちです。

情報メディア創成学類の3年生は研究室選びの時期になりましたね。

 

皆さんの研究室選びに多少なりとも役に立つよう、研究室選びついて考えたことを記していきたいと思います。

あくまで私個人の意見ですので参考程度に。

 

メ創の研究室配属がどんな風になっているのかは、この記事が非常によく表せているな、と思ったのでこちらに任せます。

実録!血で血を洗う研究室バトル2016 - センスレス

 

ぶっちゃけ、メ創の人恵まれていると思う

んですよ。

というのは研究室面談をしてくれて、バトルがあるとは言えども学生にある程度選択権があるというのはすごく幸せだと思うんです。

 

私が前に在籍した大学では、GPA順に学生をソートして上中下の3グループに分け、そのグループ内でGPAのいいひとの希望を優先し配属していくという方式でした。

 

学科に研究室が14個あったのですが、全てに順位を書かなくてはならず、グループ内下位で第14希望の研究室に配属する人もざらでした。

(私のかつての友人にGPAが140人中30位ほどでそこそこ優秀だった人がいたのですが、いわゆる上グループの下位になり、第10希望の研究室に配属され卒研時にメンタルがボロボロになっていました。「あいつ(指導教員)とは合わない」と遺し外部進学しました。)

 

筑波大では誰かしらの先生が授業で「研究室配属は上司を選べる最後の機会」と言うと思いますが、その機会すら訪れず、合わない上司(指導教員)のもとで1年間精神をすり減らしていく大学生もいます。

 

得られた権利を重々に噛みしめ、後悔のない研究室配属をしてほしいと思っています。

 

どうやって研究室を選べばいいんだろう

さて本題です。

実際自分に合った研究室ってどうやって選べばいいんだろうか、という事ですが、

まず考えるのは自分の進路についてです。

 

当たり前ですが、

自分の進路が就活Or進学かで変わってくると思います。

まず配属の条件として院進学を課していたり、進学予定の学生を優先して採る研究室があります。

 

そうでない研究室でも、

進学前提の卒研と就活前提の卒研はやり方が違ってくると思うので、

卒研向きの研究室と院進向きの研究室が存在するのかなぁと思っています。

 

「この研究室のテーマで、院も含めて3年間がっつり研究したい!ドクターも考えてる!」

「わりとがっつり研究やりたいなぁ。ドクターは行くつもりないけどマスターまで研究したいかも。」

「卒研の単位とれればいーや。そこそこ研究してさっさと社会出よ」

「このテーマ自分に合わないし、もっとやりたい研究は外部の〇〇研でやってるなぁ。院は外部に行こう」

 

まぁいろんなスタイルがあるわけです。

それぞれに合う研究室は違うのかな、と私は思っています。

 

知っておくとよいこと

・週何回ゼミあるか

・ゼミでやること

・研究室内でのイベント(飲み会、ゼミ合宿など)

・希望進路(就活or院進)に対するサポート

・卒研テーマの決め方(自分のやりたいことができる、先生から指定されたテーマの中から選ぶなど)

・配属の選考基準

・研究室の雰囲気

・研究室の先輩(特にM1、自分がB4で配属されたときに必ずいるのでお世話になる)

以上は前述の記事からの引用です。

 

+で私が考える知っておいた方がいいことは

・仮に配属されたときにやっておいたほうがいいこと(知識の前提として)

・雑用の有無

・研究室のコアタイム(そもそもコアタイムがあるかどうかも)

・ゼミの雰囲気

・その研究室の人の発表がどのようになっているか(中間発表を見るとよいかも!?)

 

質問しておくとよさそうなこと

指導教員に対して

・指導のスタイル(どのように学生を指導しているか)

・ほしい学生はどんな学生か

・研究テーマの概要と分野全体の方向性(このテーマは何を目指していて、どんな発展の余地がありますか?みたいに聞けば教えてくれると思う)

・研究室の設備、それを過去にどのように使ったか

・自分の研究に対する姿勢、個人の好き嫌いを話せるだけ話して、その反応(指導教員との相性ってことで)

 

学生に対して

・「ぶっちゃけこの研究室どうですか?」(本音を探る)

・他の研究室の良い噂・悪い噂

・この研究室にした決め手

・もし今他の研究室を選ぶとしたら?

・その人のやってる研究を語ってもらう(聞いててわくわくしたら脈ありです)

 

 

そうして探っていくと、おのずと研究室の特徴がわかってきて、自分に合う研究室がわかってくるようになります。

 

何を優先すべきか

ぶっちゃけいうと私は「指導教員との相性」が第一だと思います。

 

やりたいことかやりたくないことかなんて、その分野の基礎知識をたかが3か月程度学んだ学生に分かるわけない、指導教員が面白さを教えてくれたり、研究してるうちに面白さが見えてくるもんだと私は思っています。(もちろん分野は大事ですが。)

 

逆に、分野に惹かれて研究室を選んだものの、指導教員と合わなくてつぶれるパターンって意外と多いように思います。

 

指導教員の相性は研究生活の良し悪しに大きく作用する要因だと思うので、要チェックしましょう。

 

結びに

 卒業研究は大学生活最後の難関です。皆さんがその難関を一番いい装備(よい研究、よい研究生活)で乗り切れそうな研究室を選べるよう私は祈っています。

 

Maker Faire Tokyo 2018の出展のお手伝いをした話

こんにちは、やまちです。

かなり久々に記事を書きます。

 

この度、チーム「うしかにUX」の一員として8/4,5に開催されたMakerFaireTokyo2018に作品「ハコニワAR」の出展をしました。

 

ブースにお越しいただいた皆様、どうもありがとうございました! 

 

MakerFaireTokyoとは

Maker Faire Tokyo 2018 | Make: Japan

 

日頃から電子工作、ファブリケーション、ロボット、ガジェットなどおもしろプロダクトを作っているMakerたちが一度に集まり作品を展示する、世界的に見ても大規模なものつくりの祭典です。

見るだけではなく、触ったり動かしたりして遊べる、Makerにとっても来場者にとっても楽しくてわくわくするイベントです。

 

とにかく規模がでかい。

何とこのイベント、東京ビッグサイトの西ホール1,2を全面使って展示をしています。出展者の数も多く、(体感、500以上はあったと思う)一通り回るだけでも足がボロボロになりました。笑

 

何を出したの

ハコニワAR

「おいてみよう のぞくとなにかがみえるよ」

~ハコニワオブジェクトをおいてバーチャルキャラクターとコミュニケーションする~

一見するとおもちゃの置いてある何の変哲もないただのハコニワ。

バイスのカメラを通して見ると・・・

 

 

f:id:yamatch:20180807001613p:plain

 

キャラクターがあらわれます

 

おもちゃを動かすと、アニメーションがついてきたり、

特定のおもちゃにキャラクターが触れると逃げたり喜んだりおもちゃの影に隠れたりと様々な反応を示します

 

その様子を見て楽しむ、ARを用いた次世代のハコニワおもちゃです。

 

 

会場では、ハコニワオブジェクトを動かしたり、カメラの位置を変えたりというデモを行いました。

予想を上回る方に見ていただき、様々な感想や質問、意見などを頂くことができ、この作品を見つめなおすきっかけとなりました。

 

まだまだオブジェクトも少なくシステムの改善点も山ほどあるので、この作品をじっくり作り上げていきたいと思っています。

 

メンバー

企画・ネットワーク担当:yamada

AR・WEBサイト担当:ぐちこ

ハード担当:はのい a.k.a うし君

コンテンツ・実オブジェクト作成担当:やまち

 

ちょっと裏話

実は僕は最初からのメンバーではありません。

Unity関連のことをバイトでやっている、という話を企画のyamadaに話したら、

5月あたりに「Unityで手伝ってほしい」と声がかかり参加することになりました。

僕は上記の通りコンテンツとしてアニメーションの挙動をつくる担当でした。

Unityで簡単なゲーム作成の経験はあれどキャラクターアニメーションやARについてはほぼ無知で、試作品をつくっては練り直し、つくっては練り直し・・・クソみたいな状態でした。

 

そういった情弱の僕は、「MakerFaireTokyoに出すよ」と聞いた瞬間ひえ~~~ってなりました。

そこから、本格的にどういった動きをするキャラクタがいいか、実物体は何にするかなどを議論しながら作成に勤しんでいました。

どれほど貢献できたかはわかりませんが、「にんにくのやつおもしろ~い」「キャラクターの動きかわいい!」などの感想を直接もらったときは心の中でガッツポーズでした。

 

苦労話

メンバー皆4年生で卒研と同時並行で忙しいことに加え、作業は難航していて、最終的に形の見える作品になったのは出展の3日前でした・・・

 

 

 

 

加えて僕は出展の前日に卒研の研究室内テーマ発表があったので、ほんとうにきつかった。泣

 

 

直前では思考停止し無心になってオブジェクトの一つであるむらさきUNK

どくどくの実ソフトクリームを作っていました。

 

 

 

まあでも当日無事お披露目できたし、子供とかにもよろこんでもらえたから万事オッケーだよね!!

 

以上やで(^p^)

 

余談

〆切前デスマブーストと8/3,4,5と大イベントの連続のせいで今体調を崩しています。

皆さん体にはお気をつけて。

痛風のはなし

お久しぶりです。

筑波に編入してついに1年が経ってしまいました。

前回の執筆以来、研究室のゼミが始まったり、バイトで新しい役目を任されたり、

前の大学のサークルの同期の入籍ラッシュ(!)などさまざまなことがありまして、

とても充実した毎日を過ごしております。

 

今日は僕を苦しめたあいつの話をします。

 

 

Yamatchの奇妙な痛風~ダイヤモンド(尿酸)は砕けない~

 

 

え?その年で痛風

と思う方もいるかもしれませんが、

 

若くても発症する人は発症します。

遺伝やらなんやらの関係でなりやすい人となりにくい人がいるそうです。

 

 

痛風とはどんな病気か

公益財団法人 痛風財団

詳しくはこの↑のリンクを見ていただければわかるのですが、

ざっくりいうと、血液中の「尿酸」という物質の濃度が高くなって結晶化し、

それが関節の痛みを引き起こす病気です。

 

その名の通り、「風が吹いても痛い」*1というほどの痛みを引き起こします。

 

仁義なき戦い

実はこれまでに僕は3回ほど痛風発作を経験しています・・・

 

1回目:高2、マレーシアの修学旅行を終えて帰国した後、急に右足首が痛み出し、

家から一番近い、あまり評判は良くない整形外科にかかる。

僕「ひねったわけでもないのに足が痛いんです」

医者「んーよくわかんないけど注射するかww」

 

出会って4秒で足首注射、理不尽に痛みを味わうことになりました。

結局痛風とは診断されず、安静にしてそのまま完治しました。

今思えば、あれは痛風だったなと。

 

2回目:大1、1月~2月ごろ

このころはテスト・課題やサークルのイベント幹事のストレスで弱っていました。

 

そんなある日の夜、またもひねったわけでもないのに右足首が痛み出して、

「どっかぶつけたかな?」ぐらいの軽い認識で、湿布を張って寝ることに。

しかし、その日の深夜2時、足に激痛が走って目が覚めました。

ふつうにしてても痛い。曲げるともっと痛い。体重をかけると骨折なんて屁でもないレベルの激痛が走りました。

 

このときの痛みを形容するとすれば、「2階から飛び降りて、釘の上に全体重をのせて足から着地」といった感じの激痛でした。

それも一瞬ではなく持続して。

人生で初めて痛みで眠ることができないという経験をしました。

 

翌朝、少し遠いが評判のいい整形外科に朝一で駆け込み、

そこで初めて痛風だと診断されました。

 

医者からは、「水分をたくさん取って尿酸の排出を促すこと」「レバー、魚介類、アルコールなどは尿酸値が上がるので控えること」と忠告をもらい、その日から4,5日くらい松葉杖生活を余儀なくされました。

普段普通に歩けることがどんなに幸せなことか、思い知りました。

 

家では、痛みのあまり靴下を履くことすらままならなかったり

部屋から10秒で行けるはずのトイレも、ハイハイで3分くらいかけて行くことを余儀なくされたり

外では、徒歩5分くらいの場所も20分くらいかけないと行けなかったり

大変でした。

 

完治した時の晴れやかさは今でも忘れることはできません。

 

3回目:大2、夏

痛みのことなどすっかり忘れ、生活していました。

この時期僕は尿酸値的に一番アウトな鰹節にドはまりし、ごはん、納豆、サラダ、・・・などあらゆる料理に

鰹節をかけて食べていました。

おまけに、このころはカクテル作りにはまっていて、週3で度数の高い酒を飲酒するという何とも不健康な生活を送っていました。

 

そしてその反動は痛風という形で現れました。

足首が痛み出す前兆から、3時間ほどであの「ハイジャンプ釘着地」の痛みに変わり、痛みで不眠の夜がまた訪れました。

 

また前回と同じ病院にかかり、痛風と診断。

さすがに凝りて、飲酒の頻度を減らし、食生活も見直しました。

 

なお、この時に血液検査もしましたが、その時の尿酸値の値が、男性正常値3.8~7.5mg/dLのところ、僕は9.2mg/dLにまでなっていました。

*2

 

 

なにが言いたいのか

つまりは、若くても健康に気をつけろってことが言いたいです。

痛風と言えばおっさんの病気で、まさか自分がなるとは夢にも思わずに不摂生を続けた結果がこのざまです。

健康的な生活を送ってるつもりでも病気にかかることはありますし、

不摂生な生活を送っているならなおさらです。

 

自分が思いもよらない病気にかかることって全然ありうることなのだと、この経験を通じて感じました。

課題、研究などで忙しい時は来るけれども、基本は体をいたわってあげよう、

そんなスタンスで、どうか苦しむことのないように、ということを伝えたいです。

 

さもなければ、「2階から飛び降りて、釘の上に全体重をのせて足から着地する痛みが持続する」以上の苦しみを味わうことになるかもしれませんよ?

 

 

 

 

ということで今日はポエムでした。

今年から研究始まるので、

研究・院試がんばりつつ、健康的に過ごせる一年にしたいぞう!

 

 

余談:痛風になったことで年配の方と痛風ネタで話せるようになった。

タバコはやらないので、共通話題ができたことは武器になったのかも。

代償はデカすぎるけど。

 

 

 

*1:実際には風が吹いてなくても痛い

*2:筑波に編入して某カレーうどん屋に狂っていたころに、少し痛みの兆候が出たときはすぐに食生活・運動不足を改善した。その結果、本格的に痛みを感じることもなかった。

(^p^)のーと:2/2 music21を使って楽譜を分析する

28日チャレンジ2日目は楽譜の分析について書きます。

 

 

1日目にちらっと出したmusic21

music21 Documentation — music21 Documentation

 

を使って楽譜のMIDIデータをいじり楽曲分析します。

 

このライブラリは、Python音楽学をするためのもので、

音楽構造の抽出、変換、編集などができ、それを可視化することで

各種の音楽の分析を行うのに役に立つものです。

 

入力できるフォーマットはMIDIMusicXMLなどの音楽データで、

WAVやMP3などの音響データを扱うことはできません。

 

折角なので、このライブラリを使いつつ

皆さんにもなじみ深い曲をいろいろ分析してみたいと思います。

 

なお今回、題材とする曲は、Musescoreのサイト内でダウンロードできるものから用いました。

 

musescore.com

 

 

Music21をつかおう

・楽譜の読み込み

 

まずは、モジュールに同封されているコーパスから楽譜を読み込みます。

コーパス中の適当な曲を読みだしてみます。

import music21 as m21

#コーパスの利用
piece = m21.corpus.parse("mozart/k545/movement1_exposition.xml")

# 楽譜表示(musescoreやFinaleなどがインストールされていないと動かない、)
piece.show()

f:id:yamatch:20180202015657p:plain

このようにバックエンドとなっている楽譜表示ソフトで楽譜を可視化できます。

 

例として、モーツァルトピアノソナタ16番を読み込んでみました。

さて、この曲に関するいろんな情報をだしてみましょう。

 

・調を調べる

piece.analyze("key")

 <music21.key.Key of C major>

ハ長調のようですね

 

・ピアノロール形式で表示

piece.plot('pianoroll')

f:id:yamatch:20180202022233p:plain

 

こんなかんじでだいたいどんな感じの曲かを俯瞰できます

 

・音高の統計情報

piece.plot('histogram')

f:id:yamatch:20180202022617p:plain

どの音が多いのか楽譜から調べることができます。

 

 

また、ひとつのパートを取り出して分析することもできます。

pieceはそれぞれのパートの演奏情報をリストにしてまとめたオブジェクトだと思ってください。

左手パートの情報を調べてみます。

・左手パート、音のピッチクラス(ドレミの音名が同じものをまとめて集計したもの、高いドも低いドも同じとみなす)の統計情報

piece[2].plot('histogram','pitchclass')

f:id:yamatch:20180202023422p:plain

ファ#が一個だけあるのみで、ほかはほとんどハ長調の音である。

ファ#があるのはどこかさがしてみる。

for m in piece[2].getElementsByClass('Measure'):
    for p in m.pitches:
        if p.name == 'F#':

            print(m.measureNumber)

 12

12小節目のようですね。

表示しましょう。

piece[2][12].show() 

 

f:id:yamatch:20180202220442p:plain

と、こんな感じで取り出しもできます。

 

こんな感じでmusic21を使えばいろいろな音楽分析ができてしまいます。

 

 

いろんなJPOPの楽譜を分析しよう

 

ここで実践、普段聞いている曲の良さの秘密に迫ろう、ということでmusic21を使ってJPOPの楽譜を解析していきます。

 

・JPOPのよさの秘訣は「ヨナ抜き音階」「ニロ抜き音階」

他の国のポピュラーソングにはない傾向として、JPOPは「ヨナ抜き音階」「ニロ抜き音階」と呼ばれる音階で構成されている曲が数多く見られます。

 

ヨナ抜き音階とは、ハ長調(ドレミファソラシド)のうち、「ヨ」4番目のファ、「ナ」7番目のシを抜いた音階です。

ニロ抜き音階はヨナ抜き音階の短調バージョンで、イ短調(ラシドレミファソラ)の「ニ」2番目のシ、「ロ」6番目のファをぬいた短音階です。

 

7音使って作るメロディよりも、ノスタルジックさを出しやすい音階です。

 

実際見てみましょう。

・千本桜

サビが特に顕著でした。

サビの1フレーズ目は38~45小節目なのでそこのメロディパートを抜き出すと、

piece = m21.converter.parse("#千本桜のファイルの場所")

sabi_piece = piece[0].measures(38,45)
sabi_piece.plot("histogram","pitchclass")

f:id:yamatch:20180202225047p:plain

E,B♭の音のみ頻度が少なくなっているのが見てわかると思います。

 

キーを調べると、

print(sabi_piece.analyze("key"))

d minor 

ニ短調(レミファソラシ♭ドレ)の2番目と6番目にあたるこの2音の頻度が明らかに低い、ニロ抜き短音階だ!

 

という感じです。

 

 

中途半端になりましたが、時間オーバーになりそうなので今日はここまで

 

 

 

(^p^)のーと:2/1 pythonで音関連ファイルをあれこれするまとめ

28日チャレンジ1日目は音データの扱いについて書きます。

何番煎じかはわかりませんが、これから音データを処理するにあたり、そもそもファイルを扱えるようにしないといけないな、と思って書いてみます。

 

ほとんどそれぞれのモジュールの基本的なところしか触っていませんが、まあ最初だし、ネタがまだ思いついてないし、今後よく使うだろうねってことで備忘録もかねてやっておきます。

 

音声ファイル

まず、音を音波そのものとして記録する音声ファイルの扱いから。

wav,mp3,aacといったファイルをいろいろやる方法についてまとめてみる。

 

・古くからの方法

自分はこれまでこの方法しか知らなかったので、書きます。

これは古くから伝わる(?)wavファイルの入出力方法です。

wavファイルの取り扱いは、python標準ライブラリのwaveモジュールを使います。

また、そのデータを再生したり録音したりするには、pyaudioというモジュールを使います。

people.csail.mit.edu

 

 

さっそくやってみましょう。

・音声ファイルの読み込み&再生

import wave
import pyaudio

# 音声ファイルを読み込み再生する
CHUNK = 1024
# test.wavを読み込みモードで開く
with wave.open("test.wav","rb") as wf:

# test.wavを再生
p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),#ストリームを読み書きするときのデータ型
channels = wf.getnchannels(),#モノラルかステレオか 1でモノラル2でステレオ
rate = wf.getframerate(),#サンプリング周波数
output=True)#出力モード

data = wf.readframes(CHUNK)

while data != '':
stream.write(data)#ストリームに書き込み
data = wf.readframes(CHUNK)#次のデータを読み込む

stream.stop_stream()
stream.close()
p.terminate()

このプログラムを実行するとtest.wavが再生されます。

 

・音声を録音してwavファイルへ書き込む

import pyaudio
import wave

CHUNK = 1024

#int16型
FORMAT = pyaudio.paInt16

#ステレオ
CHANNELS = 2

#サンプリング周波数44100Hz
RATE = 44100

#5秒間録音
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "hogehoge.wav"

p = pyaudio.PyAudio()

stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)

print("* recording")

frames = []

for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)

print("* done recording")

stream.stop_stream()
stream.close()
p.terminate()

wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()

これでhogehoge.wavという名前の音声ファイルとして5秒間の録音ができます。

 

pyaudioはリアルタイム性に優れたところがあり、スペクトルアナライザとか作れるみたいなので、いつの日か試してみたいですね。

 

ただ、この長さを書くのは正直めんどくせー・・・

再生するのにいちいちチャンネルとかチャンク数とかこっちが書くのかよ。

 

っておもってたら、こんなモジュールを発見しました。

jiaaro/pydub @ GitHub

pydubという最近(といっても4年前)リリースされた、音声ファイルを楽にpythonで再生できるモジュールです。

音声ファイルを再生するなら・・・

import pydub
from pydub import AudioSegment
from pydub.playback import play

song = AudioSegment.from_wav("test.wav")

play(song)

らくちん。ストリームどうこうしなくても楽に書けます。

このpydub、公式ドキュメントを読みつくしてないのですが、

どうやら音声を合成したり、ファイルフォーマットの変換もできるみたいです。

 

楽譜ファイル

音の中でも、構造化された音楽を楽譜として保存する形式。

MIDIが特に有名ですが、MusicXmlなんていうXml形式のフォーマットもあります。

https://ja.wikipedia.org/wiki/MusicXML

タグが音の高さだったり長さだったりする形式のXMLです。

 

Midiファイルを扱うモジュールとしてはmidoかpretty-midiが有名ですかね。

Mido - MIDI Objects for Python — Mido 1.2.8 documentation

pretty_midi — pretty_midi 0.2.8 documentation

 

私は春の実験の最終課題として自動作曲*1をやったのですが、その際に使ったのはpretty-midiなので、今回そっちをつかってやってみます。

 

Midiファイルを読み込み、いじる

import pretty_midi

#Midiファイルの読み込み
midi_data = pretty_midi.PrettyMIDI('test.mid')

#ドラム以外の楽器の音を半音上げる
for instrument in midi_data.instruments:
if not instrument.is_drum:
for note in instrument.notes:
note.pitch += 1
#このデータを新たなmidiファイルに書き込み
midi_data.write("pitch_up_test.mid")

・任意の音でMIDIをつくる

#midiファイルの生成
cello_c_chord = pretty_midi.PrettyMIDI()
#チェロの音色で
cello_program = pretty_midi.instrument_name_to_program('Cello')
cello = pretty_midi.Instrument(program=cello_program)
# ド・ミ・ソの和音
for note_name in ['C5', 'E5', 'G5']:
note_number = pretty_midi.note_name_to_number(note_name)
#ヴェロシティ(音量)を100、0.5秒間鳴らす
note = pretty_midi.Note(
velocity=100, pitch=note_number, start=0, end=.5)
cello.notes.append(note)
cello_c_chord.instruments.append(cello)
#cello-C-chord.midというファイルを生成
cello_c_chord.write('cello-C-chord.mid')

こんな感じでMIDIファイルを自由自在に扱うことができます。

 

midiの再生もpythonでやりてえよ、って人はこのリンク先のコードを試してみればいいんじゃないかと思います(筆者は未検討))

www.daniweb.com

また、midiを分析するmusic21というモジュールもあります。

music21: a Toolkit for Computer-Aided Musicology

使用例については、2月の第1週のどこかで、

僕の春の実験でやったことをもう一回再現しながらやりたいと思います。

 

 

今回は音関連ファイルを処理するpythonのモジュールを紹介してきました。

こんな感じでゆるゆる~っと音処理について毎日いろいろ書いてこうと思います。

 

 

次はなにかものを実際に作ってみようかな。

 

とりあえず溜まってるネタ

  • 沖縄風JPOPを解析しよう(music21、実験でやった)
  • リアルタイムサウンドスペクトルアナライザ
  • 鼻歌認識
  • 音源分離
  • 音関連APIをたたいてみよう
  • 自動作曲再チャレンジ

などなど・・・

 

・・・忙しい2月になりそうだ(|||^p^)

 

 

*1:遺伝的アルゴリズムを使った。曲ではないなにかが生成された

28日チャレンジ

1月は人生で一番進歩がない月だった

 

だから2月に毎日やること

 

・なんらかの技術的記事をブログに書く

Twitterでバズった腹筋

・n-back5分

どこまで続くかわからんけどやってみる

 

音処理やpythonに関する橋にも棒にも引っかからん記事が生成される予定