TechnoTUT 新アルバム「Summery Days」
今所属している音楽サークルのTechno TUTですが、無事に今年度初のアルバムを
公開することができました。
じゃん!!
あぁ、すごい良い。可愛くてかっこいい。
アルバムのテーマは「夏」で、新入生2人と既存部員で4曲集まりました。
みんなの個性がハッキリ出ててなかなかおもしろかったw
今回は任意提出でしたが、10月の技科大祭には全員が提出する予定です。
アルバムはBootCampでBuy NowからName your priceを0にすれば無料でDLできます!
(もちろんお金を払って購入することも)
ちなみに過去アルバムも整理してから順次公開していくのでお楽しみに。
自分が今回作ったazuriteのJ-Coreアレンジですが、Sound Cloudでも確認できます
うん、ダンスミュージック系のトラックメイク慣れてないせいか難しい。。。
あとSpireとSylenth1は神
せっかくなので、このアルバムに関するマスタリングの記事も書こうと思います
最後ですがCD情報も掲載
「Summery Days」
Illust : AIR, Design : ayafmy, Mastering : ころんP
1. 0801 - さんまのこぼね
2. 初夏の夜 - ぽねき
3. azurite(CollonP J-Core Remix) - ころんP
4. 残花 - 武
TUT Advent Calendar19日目
この記事は、TUT Advent Calendar 2016 - Adventarの19日目の予定だった記事です。
どうもこんにちわ、ころんです。
本当は、今やってる研究の話とか何か新しい分野の開拓でもして記事にしようかなと思っていたのですが予想以上に研究が忙しくなりAdCに書くのも忘れてましたw
あと2日目で研究発表をして、卒論を出したら冬コミのアルバムの製作も予定されており、年末まで忙しい日々になります。
何を書こう
何を書こう、、、特に書くこともないですが体調面についてちょっと。
生活習慣には気をつけよう!
知っている人もいますが、自分は不整脈持ってます。よくあるタイプの心室性期外収縮というものです。
原因は、高専時代の生活習慣ですね。プロコンとかでよく徹夜してたせいでいよいよ病気になりました。
生活面には支障はないですが、やっぱり心臓関係の病気は怖いです。
その後の大学でも某イ○○トなウ○○会社のブラックなところでバイトしたり、今は研究で昼夜逆転生活。
なぜかブラックを呼び寄せるようなことばかりですが、さすがにもう辛いですね。
特に自分はストレスを抱えても体調に反映されないんで無理しちゃう傾向があるそうです。
このままだとなんか突然死とかも起こりかねないので、来年度からはもっと自分の体を大事にしようかと思います。
まとめ
ほんと書くことなくてごめんなさいwwwwww
とりあえず自分が言いたいのは
以上!!!
パワー正規化(Power Normalization)について
そろそろ研究もまとめに入らないと理系学生が死んじゃう時期になりましたねw
自分は、イラストの類似検索の研究をしていますがその中でパワー正規化っという聞きなれない用語が出てきたのでまとめてみました。
さまざまな正規化
データの正規化っていろいろあります。
いずれも機械学習においてデータの整合性を取るために大事なものです。
正規化自体、あるルールに基づいて値を変形し使いやすくするという意味だそうです(by Wikipedia)
パワー正規化のルール
パワー正規化も同じように下記のルールに基づいて値を変形します。
(はてブロで数式表示したいんだけどやり方がいまいちわからない)
式を見ると元のデータの符号を保ったままべき乗するというルールになっており、パラメーターaは0~1の範囲で選びます。
0~1の範囲でべき乗することによって元々1より小さい値は大きく、1より大きい値は小さい値になります。
いつ使うの?
パワー正規化は主にスパースベクトル(ほとんど0要素なベクトル)に使うことが多いようです。
画像処理では、自然画像(いわゆる普通の画像)に比べてイラスト画像は使っている色情報が少ないため0要素(0に近い要素)が多くなってしまいます。
音声処理でも似たような単語がありましたが、意味は違うっぽいです。
その中で、普通だったら無視されるような値も、特徴の1つとして捉えるようにしようということをしたくてパワー正規化を行います。
自分の研究の場合、パラメーターaを調整することによって検索性能は6%ぐらい上がりました。
最近ではFisher Vectorを使う手法が増えてますが、その中でもパワー正規化を使うことで精度向上に貢献しています(p31,35)
まとめ
パワー正規化について書かれている記事が全然なかったので簡単にまとめてみました。
あなたの研究もパワー正規化で精度向上!?なんてことも???
MATLABでlibsvmを使用するための手順
研究でSVMを使用したくなったんですけど、どうもMATLAB標準のSVMでは多クラス判定がすごい複雑そうだったのでMATLAB上でlibsvmを使用しました。
OS:Windows 7 Pro 64bit
MATLABバージョン:R2016a(9.0.0.341360)
用意するもの
libsvmをgitからそのまま落として適当なディレクトリに解凍しておきます。
libsvmは多様な言語に対応してくれてるのがうれしい。
MATLAB上での作業
MATLABに先ほどおとしてきたlibsvmのパスとコンパイルを通します。
1.コマンドウィンドウを開き「mex -setup」を入力します。
2.「cd('C:\...\libsvm-master\matlab\')」cdコマンドで落としてたlibsvmのMATLAB
フォルダの中に入ります。
3.「make」でコンパイルします。
4.成功したら「libsvmread.mexw64、libsvmwrite.mexw64、svmpredict.mexw64、
svmtrain.mexw64」の4つのMATLABプラグインが生成されます。
5.最後にcdで入った同じパスを「addpath('C:\...\libsvm-master\matlab\)」で
MATLAB上にパスを通して終了です。
最後にテストコードを書きますが、それはまた後で
「Unity5 + PS Move + PS Eye」 ペアリングから実行までのまとめ
こんにちわ、今抱えてるプロジェクトが3月末までと言われて焦り気味のころんです。
会社の案件でUnityとPS Move、PS Eyeを使ったプロジェクトを進めているのですが、ペアリングから実行するまでかなり手間がかかったので自分のまとめとして記事にしてます。
自分の開発環境はたぶんほとんど最新バージョンで組み合わせているので、このやり方でやればだいたいはうまくいくと思います()
開発環境
以下が今回実行した環境になります。
- OS : Win10 Home 64bit
- RAM : 8GB
- グラボ : GeForceGTX 760
- Unity5.3.3 64bit
PS Moveは2010年と2012年モデルの2つがあるそうですが、今回は2012年モデルのほうを使います。
Amazon.co.jp: PlayStationMove モーションコントローラ: ゲーム
Amazon.co.jp: PlayStationEye: ゲーム
PS Eyeの設定
PS EyeはPS Moveの空間位置推定用の使います。端子がUSBなので一般的なWebカメラとしてすることも可能です。
ですが、使用するためのドライバをCode Laboratorieから有料(2.99$)で購入する必要があります。Vペリカでの支払いもOKでした。
CL - Downloads - Code Laboratories
購入後、指定したメールアドレス宛にDL用のリンクを送られてきますので、落としてインストールします。インストーラー起動後はポンポンっと「Next」を押します。
インストール後、USB端子をパソコンに挿してPS Eyeの設定は完了です。
ちなみに、無料で使えるドライバが一応あるのですが、確実に動きたかったので今回はパスします。使えた方がいれば教えてください
PS Moveの設定
ここからが一番戸惑いました。おそらく、Unity + PS Moveで検索された方は以下のサイトを巡っていると思います。
ウダサンコウボウ: PlayStationMoveをPCかつネットワーク経由で使えるPSMoveServer
UnityでPSMoveを使うときの注意点 - Cross Road
Oculus用操作デバイスの検討(PSMove) - Cross Road
Copenhagen Game Collective – an experimental games collective - Unimove
以上のサイトに乗っているやり方を試しましたが、全部だめでしたね。理由として
- iPiを起動してPS Moveを接続してもそれ以降進まない!
- Motion In JoyでペアリングはできるけどBluetoothアダプタが内部で統一可されてUnityで認識しない!!
- Motion In Joyでペアリングする前にBIOSでドライバ署名を無効にしないといけない!!
- PS Move APIにpsmovepair.exeがない!!(CMakeがあるから自分でやれってことかな)
- なんとかUnityに入れてもエラーエラーエラーエラー
- そもそもPS MoveがBluetooth一覧に表示されない
などなど、いろんな要員が絡んで正直ダメかと思いましたけどできました。
動作するまでの手順は以下のようになります。
- psmovepair.exeとUSBケーブルでつなげたPS Moveを使ってとりあず仮認識
- psmove-pair-win.exeを使ってbluetoothドライバの認識
- magnetometer_calibration.exeでPS Moveのキャリブレーション
- Unityで実行
で、これらのexeファイルをここから落としてきます。
もう~感謝感謝感謝!!!って感じ
Unreal Engineと書いてありますが、必要なexeファイルは関係ないのでまるごと落としてきたほうが良いです。
USBケーブル(Mini Type-B)でPCとPS Moveを接続した状態でpsmovepair.exeを起動します。すると以下のような画面が出ます
説明通りにPS Moveの真ん中にあるPSボタン(PSマークが描かれたボタン)を押すと、SONYと書かれたマークの下にある赤色LEDが点滅します。
しばらくすると消えるので再度PSボタンを押してこれを5,6回繰り返します。
次に、psmove-pair-win.exeを起動します。
ここでBluetoothのペアリングをしますが、以下のように
!!!! Successfully connected device xx:xx:xx:xx:xx:xx !!!!
が出てくるまで、根気よくPSボタンを押してください(10秒押し続けると電源ごと消えるので点滅が消えたころに)
もともとWindows環境でのペアリングはうまくいくときと行かないことが多いので。
ペアリングが完了するとPS MoveのLEDが点灯し続けます。
次にキャリブレーションを行います。
magnetometer_calibration.exeを起動すると以下のように表示されて、PS Moveの先端が光ります。
この状態でPS Moveを様々な方向に向けます。おそらく磁気キャリブレーションを行っているためかと。すると画面上の数値をどんどん増えていくのでどこへ向けても数字が変わらないってところで、PS Moveの中央上にある縦長のボタン(Moveボタン)を押します。
ちなみに自分は287.0が限界でした。
次に、PS Moveを垂直に立てた状態にして、Moveボタンが自分の正面に来るように持っていきます。すると自動的に解析が始まるので、そのままの体勢を維持します。終わると自動的にプログラムを終了します。
解析が始まらない場合は、場所を変えたりしてみてください。
Unityでの実行
ここまでやればほとんど終わりです。PS Move APIをUnity5で動かせるようにしたリポジトリがあるのでそれを落としてきます。
このプロジェクトファイルをそのままUnityで開いて実行します。
「Play」ボタンを押すと
するとPS Moveで動かした姿勢がモデルに反映されます。
カメラが見つかりませんなどのエラーが出た場合はカメラのUSBを1回抜いたり、Unityごと再起動すると直ります。
面倒ですが、パソコンを再起動するたびにこれらのことをしないといけないそうです。
まとめ
以上がUnityとPS Move、PS Eyeを使った環境構築方法です。
これ以外で簡単な方法があれば教えてくださいw
PS Moveを使ってみた感想としては、かなりいい精度トラッキングしてくれます。姿勢検知も問題なく動作しますし、Wii Remoteより断然いいです。
ある程度予想はしていましたけど、ここまでほぼ半日かかりました。
これでやっとプロジェクトを進められます!!
C#やるんならLINQ!!
この記事は TUT Advent Calendar 12日目の記事です!
みなさん、お久しぶりです。
技術ブログとして立ちあげましたが、全然記事書かないまま1年が過ぎました(べ、べつに書くネタがないわけじゃないんだからね
TUTに来て、新しい友達も増えて楽しい日々を送ってますよ。講義も後期から大幅に減ってUnityのアルバイト始めたり、趣味も新しく増えたり。もちろん今年のクリスマスも予定空いてますよ?
C#!!
さてさて、本題に入ります。C#便利ですよね。
プロパティ、ファイル操作、非同期処理、WPF、Azure・・・などなどWindows環境で動くソフトウェアに特化してます。最近ではUnityでも定着してますし、Visual Studioとの連携がよくとれているので自分のお気に入り言語ナンバーワンです。
そんな便利なC#でLINQっていうの知ってますでしょうか??(九州の某アイドルではありませんよ
周りにちょこっと聞いてみましたが、初めて聞いたって人や、知らずに使ってた人などあんまり知られていないのかなと思いましたね。ですので、今回ぜひC#erにこの便利な機能を紹介したいと思い記事を書きました。
では逝きますか!(1919
LINQってそもそもなんぞや??
まずは、そもそもLINQって何者かを紹介します。
LINQはLanguage-Integrated Queryの略で日本語では、統合言語クエリと言われてます。
クエリって何?って思った方。クエリとは「問い合わせる」という意味で、一般的にデータの問い合わせ要求に使われます。一番わかりやすいのがデータベースとかですかね。あるデータベースにあるテーブルから、条件に合うカラムを持ってくる命令を1つの文字列として表現します。例えばこんなの
mealというテーブルから値段が1000円未満の商品名を出す、クエリーの例です。
こういう感じでデータの問い合わせに関する構文を並べるだけです。実はLINQもこれと同じで
っというものです。じゃそのデータって何に対して言っているのかというと、配列・リスト・オブジェクトを指してます。
LINQにもいろいろ種類があります。
- LINQ to Objects(配列、コレクション、任意のオブジェクト)
- LINQ to Entities(Entity Framework経由でのデータベース)
- LINQ to XML(ざむる)
- LINQ to SQL(SQL サーバー)
今回はLINQ to Objectをメインにやっていきます。
何ができるの??
LINQの正体をざっと伝えたところで、何ができるかを紹介します。
LINQは配列やリストに対してデータの問い合わせ・更新などを楽にできるようにしようっというものでした。これらのデータ構造を使うっということは、あるデータを一時的に格納しておき、その要素に対して何か操作を行うってことです。
例えば、整数の入っているリストから5以上の整数リストを新しく欲しい時、こういう感じで書きませんか?
リストを反復構文で回してif文で条件に合う数値を新しいリストに追加しています。
なんか、単純なことをしているだけなのにこんなので10行近くも使っているのが、なんか嫌ではありませんかね?
しかし、LINQを使ってあげると以下のようになります。
結果の表示をもうちょっと変えてみましょう。
なんと、LINQを使ってあげることでここまで省略されました。10行使っていた処理が3行になりましたね。これが
です。
コードをよく見ると反復構造であるforやforeachがありません。LINQを使うことによって書く必要性が無くなったんですね。
初めて見る方にとっては気持ちの悪い書き方であると思います。私もそうでした。しかし簡単な例から学んでいくと自然にこっちの書き方が欲しくなりますよ?(麻薬と一緒だね)
LINQとしてできることは、
です。そのためにLINQでは多くのメソッドが提供されています。
できることは、Sample1-3のような条件検索以外のもたくさんありますが。ここでは主に使うだろうものだけ書いておきます。
LINQを使ってみよう
じゃ、この便利なLINQをどうやって使えばいいのか。簡単です。ソースのusing欄に
これを追加するだけで、使えるようになります。Visual Studioの場合プロジェクトを作成すると自動的に追加されてるはずです。
ちなみに、LINQの処理をして結果を格納するとき返り値はList<T>にはなりません。IEnumerable<T>型になるので注意してください。
Select()
格納している要素1つずつに対して関数を適用して返します。情報数学で言う写像に似ています。
サンプルでは、リストの要素に対して「x * x」という関数を適用して返しています。つまり2乗した数が返ってきます。
格納しているデータに対して加工を行うのは頻繁にあることなんで、覚えておきましょうね。
Where()
Sample1-3で出てきたWhere()です。これは、条件に合う要素をフィルタリングして返すっということをしています。
サンプルでは、リストの要素のうち偶数である数値をフィルタリングして返しています。じゃ、AND演算のように複数条件はできるのか?できます
先ほどの条件に5未満であるを追加しました。これで反復構造中のif文の代わりになります。
Count()
特に説明することはなく、ただ要素数のサイズを取得します。
Sort()
指定した要素でソートします。OrderBy()を使うことによって他クラスにある要素でのソートが可能になります。
サンプルは、Playerクラスを作って要素としてHPと名前を持っています。リストの初期値にPlayerクラスを4つ挿入しておき、HP順とアルファベット順でそれぞれソートを行うものです。
実行結果は以下の通りで、きちんとHP順とアルファベット順でソートできていると分かります。
降順にしたい場合はOrderByDescending()を使います。
その他
結構種類あるので紹介しきれないです。リンクを張っておきますので、各自で調べてみてください。
.Net(VB C#) LINQのメソッド一覧:http://yan-note.blogspot.jp/2015/11/netvb-clinq.html
ちょっと応用
LINQの各メソッドはそれぞれ繋げることができます。例えば、リストにある要素を全て2倍にして14以下である数値が何個あるか調べる場合、
このように
の流れが自然に組めるのもLINQの特徴の1つです。
遅延評価
本当ここがLINQの一番大事なところなんですが、正直もう書く気力がありませんのでまた別の記事に書きたいと思います。
まとめ
LINQはコレクションに対してデータの操作を簡単に記述できるようにするためのものです。そのおかげで、生産性やコードの可読性がぐぅんと上がります。
使うことができるメソッドが大量にあるので暇なときに調べてみると使えそうなものがヒットするかも。
明日はドイツの鳥で有名なあしゅりーさんの「座標で見る"TUT大学構内のレッドブル自販機100選"」です!。
Unity5でボールの跳ね返り!
先日、Unity 5がリリースされましたね!
私も2年前にプロコンの時にお世話になりました。そのせいで、しばらくUnity拒絶症にかかって、触っていなかったのですがせっかくのリリース。
流行に乗ろうではないか!!
Unityの機能を久しぶりに見ると、効果音・BGM編集用のミキサーがついてたり
Unity - Upgrading Unity 4 Audio Part 1: Mixers and Effects
64bitに対応したりといろいろ新機能が増えていました。まだUnityをフルで活用できないけど、いつかはストアにリリースしたいですね。
ってことで早速インストールしましょ。
無料のPersonal版を選択。なんか製品発表の時にスプラッシュ画面をつけてて、前年度の収入が何$以下なら無料版の機能制限が撤廃して使えるみたいな話し聞きましたけど、よく分かってないです。
さくさくっとインストールしたら起動しましょ。
おーなんか、前よりかっこよくなってる。右上のNew Projectを選択
適当にプロジェクト名を「BouncingBall」にしてCreate project。
起動画面。画面の構成自体は前と変わっていないようです。
Unity入門(2)- Unityの画面構成 | Developers.IO
今回の目標は、ボールを上から床に向けて自然落下させて遊んでみることなので、まずはゲームオブジェクトのボールと床を作ります。
・床の作成
左上のメニューからGameObject->3D Object->Cubeを選択。
するとこんな感じに立方体が作成されます。
今回は床にしたいってことで、赤枠にあるTransformでScaleをいじります。
x = 20,y = 0.2,z = 1にするといい具合の床が完成。Positionも分かりやすいようにx = y = z = 0にしました。
・ボールの作成
GameObject->3D Object->Sphereを選択。すると床同様にシーン画面に球体が表示されます。Potisionをx = 0,y = 10,z = 0にします。
ボールを落とした時にz軸が床と合っていないと、そのままスルーしちゃいますので気をつけて。
・カメラの調整
ではでは、早速実行してみましょう。シーン画面の上にあるプレーボタンをクリック。
あれ?ボールはどこ????
実際ボールは存在していますが、たまたまカメラに見えていないだけです。なので、実際のプレイ画面のシーンを見るにはカメラの位置をいじってあげないといけません。
プレーボタンを再度押して編集に戻して、シーン画面にあるカメラっぽいオブジェクトをクリックしてください。
すると左下にCamera Previewが表示されます。これが実際にカメラが見ている風景なので全体像が見えるようにPositionを調整します。
今回だとx = 0,y = 5,z = -10ぐらいですかね。再度プレーボタンを押すと。
うん!いい感じになりました。
・ボールを落下させる
さて、このままではボールは落ちてきません。オブジェクトを配置しただけではただの置物なので、落下させるにはボールに物理シミュレーションを適用させなければいけません。そこでUnityには、Rigidbodyっというのがあります。
これを追加するだけで、なんと自動的に物理運動の制御をやってくれます!!
しかも空気抵抗やトルクによる空気抵抗、質量により変化もパラメータをいじるだけでおまかせ。
シーン画面でボールを選択して、左側のInspector画面下にあるAdd ComponentからPhysics->Rigidbodyを選択。
各パラメータの説明をすると
Mass:オブジェクトの質量
Drag:オブジェクトが受ける空気抵抗
Angular Drag:回転により受ける空気抵抗
Use Gravity:重力を適用させるか
Is kinematic:物理シミュレーションは適用されないが、スクリプト制御のみで動くことができる
Interpolate:フレームの補完などの設定
Collosion Detection:高速に動くオブジェクトですり抜け防止を行う
今回は重力さえあればいいので、Use Gravityにチェックをいれるだけでいいです。プレーにしてちゃんと落ちるか確かめましょう。
落ちたな(確信)
・ボールに跳ね返りをつける
ボールも無事落下したので、今度は跳ね返りをつけます。
Unityには、先ほどあったRigidbody以外にも様々な物理シミュレーション用の項目があります。
メニューからAssets->Create->Physic Matrialを選択。
これは物理特性マテリアルと言われており、摩擦や跳ね返り係数の調整ができます
各パラメーターの説明めんどいんで、上記の公式マニュアルを読んでくださいw
跳ね返り係数をいじるのでInspector画面にあるBouncinessをいじります。
デフォルトだと跳ね返り係数が0なので全く跳ね返りませんよね。
ころんさん!跳ね返り係数分かりません!って方はこちらへ↓
だいたい0.99ぐらいにするといい具合に反発してくれます。いろいろいじってみると面白いですよ。
数値の設定をしたらAssetsフォルダにある物理特性マテリアルをドラッグ&ドロップでCubeに適用させます。CubeのInspectorのBox Colider->Materialからも設定できます。
適用し、プレーを押すとボールが跳ね返ってくれるのが確認できると思います!
・まとめ
今回は、ボールに物理シミュレーションを適用させて簡単な跳ね返りシミュレーターを作りました。まだまだUnityには面白い機能が盛りだくさんなので、今後も自分のプロジェクトを進めながらまとめて行こうと思います。
これからも進化し続けるUnityに期待しましょう!!