AquesTalk Picoでしゃべらせるだけ

タイトル通り。ゆっくりボイスで音声合成してくれるLSI「AquesTalk Pico」を買ってみたので、早速しゃべらせてみた。
音声合成LSI - AquesTalk pico LSI

AOUT端子とGNDをスピーカーにつなげばいいだけなんだけど、AOUTってArduinoの出力ピンのどこに対応してるの。。と思っていたら、下記のサイトにまとめられていた。素晴らしい!
なんでも作っちゃう、かも。 とても見やすく分かりやすいArduinoボードのピン配列図

というわけで、ATP3011という型番のモデルだと6番ピンとGNDを使えば良いということがわかった。
こんな感じ。

秋月のステレオミニのDIP化キットを使って取り回しをよくしてみた。
3.5mmステレオミニジャックDIP化キット: 半導体 秋月電子通商 電子部品 ネット通販

これでArduino IDEのシリアル通信のターミナルでローマ字を送るとしゃべってくれる。
初めに「?」を送らないといけないらしい(下記エントリ参照)。改行コードを「CRのみ」にすることも忘れずに。
自由にしゃべるI「音声合成LSI ATP3011F4-PU」を動かしてみた: エアーバリアブル ブログ

デイリーポータルZに載りました&むだなものを作るということについて

前回のエントリデイリーポータルZ賞を受賞したことについて書いた。
賞品の「デイリーポータルZステマしてもらえる権利」が先日ついに形になったので、そのこととそれについて思ったことを書く。

記事になるまで

受賞後の打ち合わせで、DPZが主催する国際GIFアニメアワードの審査員をヘルメットをかぶってやることになった。
もちろん二つ返事で承諾したのだが、そのあと審査員の顔ぶれを見て青くなった。

八谷和彦さん
天久聖一さん
川田十夢さん
林雄司さん
そして、ためふさ(僕)だ。


・・・いやいやいやこれ大丈夫なのか。Wikipediaに名前があるような人たちの中にひとりヘルメットかぶって特攻である。

ひとまずお客さんが入るイベントということなので、アピールすべく改良することにした。

吹いたら回転灯が光る。これで会場の遠いところにいても見えるはず。
制御には秋月のSSRキットを使った。
ソリッド・ステート・リレー(SSR)キット 25A(20A)タイプ: 組み立てキット 秋月電子通商 電子部品 ネット通販
吹いたときにArduinoから信号として5Vを入力して、AC電源を回転灯に流せるようにした。
ものすごく単純な構造だけど、これで100Vも制御出来るようになった!思わぬ副産物。

当日の様子はDPZの記事になっている。
国際GIFアニメアワード2013 優秀作品一挙公開 - デイリーポータルZ:@nifty
ustでも様子を見ることが出来る。
Ustream.tv: ユーザー tokyoculture2: 東京カルチャーカルチャー Ustreamチャンネル, 東京カルチャーカルチャー Ustreamチャンネル. 視聴者参加型...

ustを見てもらうとわかるが、DPZ石川さんに紹介してもらったあとのプレゼンでのデモでいきなり装置が動かなくなった。
本番で良くあることとはいえ、その場で自害もしくは早急に立ち去って旅に出たくなりますねあれ。
当の本人がヘルメットと配線で全く動けない中、急ピッチで直してくれたチームメンバー、感謝してますm(_ _)m


で、記事になった

本当に吹いた景色を記録する装置 - デイリーポータルZ:@nifty

もう感激です。
高校くらいから見ていたサイトで、しかも林さんに記事を書いてもらえるなんて。
さらにDPZのトップに自分の顔が出るなんて!もういくらでも晒してくださいという感じ。

個人的には前回のHackDayで出したFacebookに自動で友達申請する装置が世に公開されたのがとても嬉しい。
あれが今のところ自分の最高傑作だと思っているので。

インタビューのところでものすごく共感出来る記述があった。

もの作りの最大の敵は作ってる最中の「これもしかして面白くないんじゃない?」というささやきである。
振り向いたら石にされるぐらいの声だと思う。

これを見て、あぁ林さんでもそう思っているんだ・・・と半分納得半分驚きだった。
ネタ系はとにかく振り返らずに最後まで走り切るのが大事だと自分でも思っていた。
この共感が得られただけでも自分にとって本当に良かった。

お金を生むわけでもない(むしろ自腹切ってるのでマイナスだ)し、自己満足でしかないものを作るのはものすごくパワーが要る。
だからこそ自己満足なはずのプレゼンや動画でレスポンスがあると面白いしやめられないのだけど。

今後も明後日の方向に突っ走ろうと思わされた記事でした。
林さん、石川さん本当にありがとうございました。

#openhackday でデイリーポータルZ賞を受賞しました

Open Hack Dayとは

ヤフー株式会社の社内イベントとして開催されていた、24時間で開発して90秒で発表するイベントです。
今回オープン開催ということで5人チームで出場し、「吹至多三十六景」という作品でデイリーポータルZ賞を受賞しました。
Hack Day / Hack U - Yahoo! JAPAN

作品についての資料

HackDayサイトの紹介ページ:http://yhacks.jp/hackday/works/1/6
ustのアーカイブ(37:10頃から):http://www.ustream.tv/recorded/29378431
プレゼンが超早口&滑舌が悪いのですが、是非ご覧いただければと。
当日発表した資料:http://www.slideshare.net/stamefusa/open-hack-day-japan

何が出来るのかと仕組みについて

吹いてしまったときの映像を記録し表示することで、本当に面白いものを集めることが出来るシステムです。

まず吹いたかどうか判定するモジュールをかぶります。

口元には風力発電キットがついていて、吹いてしまうとプロペラが回って電圧が発生します。
これをArduinoで検知すると、ホストであるRaspberry Piへ信号を送り、ヘルメットにつけたwebカメラの映像をサーバへpostします。
Raspberry Piではwebカメラの映像を3秒間バッファリングしていて、プロペラが回るとそれをトリガとしてサーバへ送っています。
サーバではまずブラウザ表示用にgifアニメへ変換します。
またサーバ-ブラウザ間はWebSocketで構成されているので、吹いたら最新のgifアニメがプッシュで一覧に追加されるようになっています。

ブラウザではこのように36個のgifアニメを表示しています。

また同時にmp4にも変換しており、youtubeに投稿するようにしています。
http://www.youtube.com/channel/UCFlRfeJq1cMuBpHM-aKQLQQ

感想など

むだなものを作っていたら、デイリーポータルZ賞をいただいてしまいました。
「狙うならこの賞しかない」と思っていたのでとても嬉しく、光栄に思っています。
こういうむだなものが評価されたり、許容されたりする開発イベントはOpen Hack Dayならではでないでしょうか。
また、社外の人が参加されたのも大いに刺激になりました。
アプリ開発の漫画を書きました!」とかはオープンマインドで作られた素晴らしい作品だと思っています。

開発においては全体のディレクション(こういうとなんかかっこいいですね)とArduino風力発電キットの部分、youtubeに動画を投げるところを担当しました。
もうちょっとインターネット感溢れる開発も出来なければならないですね・・・。

作品についてはかなりプレゼンでの見栄えを重視したのでこういう構成になりましたが、ブラウザをgifアニメで埋め尽くすという見せ方は色々と応用が効くのではと思っています。
特にプッシュでどんどん映像が追加されてくる、というのは例えばイベントでの利用などこれまでのPC上での用途以外にも使えるのではないかと考えています。

まぁ、とにかく僕のモットーとして面白いモノが作れたということが一番です。
毎度バカバカしいモノをノリノリで一緒に開発してくれるチームの皆に感謝しています。

また、今回の運営はパーフェクトだと思いました。事務局の皆さん本当にありがとうございます。
次回の開催を心待ちにしています!

社畜になった乙女工作部で展示したものの説明と解説と感想

はじめに

12/1、2と日本科学未来館でおこなわれたMaker Faire Tokyo 2012に市原えつこ(@moja_etsuko)、クガナオミ(@kuga703)と「社畜になった乙女工作部」として出展してきました。
まず社畜でもないしもちろん乙女でもないので自分の中でも突っ込みどころが満載なのですが、「工作」担当ということで許してもらえればと思います笑

ステレオタイプな会社をネタにした作品を作ったので、それらのご紹介をしたいと思います。

kinect謝罪

kinectの前でお辞儀をすると謝罪音声がスピーカーから流れます。
腰の曲がった角度を計算していて、実は素早くお辞儀すると異なる音声が流れるようになっていました(当日は人が多すぎて難しかったのですが)。
言語はprocessing、kinectを動作させるためにNITE+openNI+simple-openniを使っています(こちらのエントリをどうぞ。)

動作中の様子は下記のようになっています。

本音がわかる、ARお茶汲み

湯のみの中にARマーカーが貼ってあり、カメラにかざすとOLが給湯室でお茶をどのように入れていたかの動画が流れ始めます。
知りたくなかった本音がわかってしまう作品となっています。
ARマーカーを使ったものの多くが3DのCGを重畳するシステムだと思うのですが、これはマーカーそのものに動画を描画することで現実世界のモノが動画プレイヤーとなるような体験が出来て開発中もなかなか面白かったです。
これも言語はprocessingで、ARマーカーのライブラリにはNyARToolkitを使っています(こちらのエントリが参考になるかもしれません)。

動作中の様子はこんな感じ。

シュレッダー内蔵名刺入れ

最後はこれです。
名刺入れの中にシュレッダーを内蔵し、名刺をもらったその場で裁断することが出来ます。

↑これを四角くぶった切りました。
正直これが一番反応が良く、これだけは開発してなかったので僕としては喜んでいいのか悪いのかという感じでした笑

こんな感じで裁断します(kinect謝罪が誤作動しまくっております)。

MFT2012の感想

というわけで4つの作品を展示しまして、このうち3つの開発を担当しました。
準備に2ヶ月しかなかったのでなかなか大変でした・・・。
結局技術的に簡単なものを物量でおしていく、というかたちになりましたが、それぞれのストーリーというかコンテンツが好評だったようでなによりでした。

去年はリアルslコマンドという作品でMTM07に出展しましたが、それ以上の人で大変でした。
いろんな方が書かれていますが、もう少しゆとりがある場所だと良かったかなーと思いました。
ただこれが初の有料化ですし、今回で成功してだんだんとスケールアップしていくことを期待しています。
ゆくゆくはコミケと同じくらいの規模に・・・と夢は広がります。
クリス・アンダーソンが「MAKERS」を書いたことでにわかにMake:や3Dプリンタバズワードのようにもてはやされていますが、いちMakerとしてはこれからも「大人になっても楽しめる文化祭」であってほしいと勝手に思っています。

何はともあれ今回もとても楽しいイベントで、運営スタッフの皆様本当にお疲れ様でした!
また会場や懇親会で出会ったMakerの皆さん、また見に来てくださった皆さんもありがとうございました。
これからもむだなものばかり作っていきたいと思います。

processingでkinectを使うメモ

kinectを使う際に、processingがOpenNIを扱えるようになったらしいので使ってみた。
下記のエントリを参考に使えるようになりました。
Mac+Kinect+Processingで遊んでみる - karaage. [からあげとポニーテイル]

まだまだサンプルを走らせたりリファレンスを見た程度だが、ひとまずのメモ書き。
・スケルトン(各関節)の座標はSimpleOpenNI#getJointPositionSkeletonで取ってこれる。
 →これはexampleにあるUser.pdeを参考にすると良い。
・ 取得した関節の座標を描画するには、まずSimpleOpenNI#convertRealWorldToProjectiveで座標系を変換すること。
 →変換後は普通にprocessingの描画関数に放り込める。

openframeworksでしかスケルトンを扱えないかと思っていたが、こんなに簡単に扱えるとは驚き。

[追記]
RGB画像を表示するために、下記のエントリを参考にしました。
simple-openni Tutorial

音声ファイルを再生するには

processingで音声ファイルを再生するには、minimライブラリを使えば良いみたい。
下記のブログを参考にさせていただきました。
Processingのminimライブラリで音楽を停止するとき | Morikuma Works

注意点としては、mp3ファイルを再生する際にIDタグ(タイトルやアルバム名など)が入っているとエラーが出てしまうということ。
wavファイルをmp3にタグ無しで変換するのが良さそう。

MusicShieldのコードを少し読んでみる

microSDを1GBにしたら動いたので、コードを見てみる。
やりたいこととしては、
 ・センサの入力値に合わせて再生する曲を選択する
というのがある。
なので、毎ループごとに呼ばれている箇所を探してそこにセンサの値を読む処理を割りこませる必要がある。

調べてみると、player.cppのAvailableProcessorTime()という関数のdo while文が毎回呼ばれていることがわかった。
また、ここでMusicShieldについているスイッチの入力を見るためのCheckKey()という関数を呼んでいる。
CheckKey()では入力に合わせて音量や選曲の処理を行なっているようなので、ここを参考にすれば良いみたい。
読むと、playingStateという変数をPS_NEXT_SONGにすると次の曲へ、PS_PREVIOUS_SONGにすると前の曲が再生されるようになっている。

今日はひとまずここまで。
センサを読むところを加えて、playingStateの状態を変更してやればあとは勝手にやってくれそうだ。
しかし、任意の曲番号を指定して再生するのはどうする・・・?

[追記]
なんだかまだ全然良くわかってないけど、PlayCurentFile()という関数の最後に曲を流し終わった時の処理を書くとうまくいけそうなことがわかった。
サンプルコードのままだと
 ・1曲再生し終わった時、SDカード内の次の曲を再生する。
という処理になっているが、
 ・1曲再生し終わった時に一時停止し、次に再生する曲はSDカード内の3番目の曲にする。
という処理にしたい場合は下記のように書くと良い。

/* player.cpp */
void PlayCurrentFile()
{
    char c, nFragments;

    /* 中略 */

    SendZerosToVS10xx();

    // After finishing normally default to requesting to play next song        
    //playingState = PS_NEXT_SONG; //サンプルコードだとここがアクティブになっているのでコメントアウト

    // ここに曲を流し終わったときの処理をどうするか書く!
    playingState = PS_NORMAL; // 単曲再生(次の曲へ進まない)
    playStop = 0;                       // 一時停止する(1にするとループ再生)
    currentFile = 3;                   // 次に再生する曲の番号
}

AvailableProcessorTime()でやればいいのか、PlayCurentFile()でやればいいのかわからないが、ひとまず
 ・playingState = PS_NORMALで固定
 ・playStopを0にしたら停止、1にしたら再生しっぱなし
 ・currentFileを再生したいファイル番号にする
というように適宜変更してやれば良さそう。