2014年6月28日土曜日

プロ生ちゃんをキャラミんで踊らせよう

Pronama-chan kawaii 2
前回 プロ生ちゃんMMDモデルを踊らせよう に続いてプロ生ちゃんMMDモデル使ってみました。
キャラミんというソフトを使ってプロ生ちゃんのMMDモデルを踊らせてみました。


プロ生ちゃんとは

プログラミング生放送のイメージキャラクター・暮井慧(くれいけい)、通称プロ生ちゃんです。
著作権がゆるめのキャラクターです。
詳細はこちらをご覧ください。画像や音声などの素材も公開されています。
http://pronama.azurewebsites.net/pronama/


キャラミんとは

「キャラミん」はAHS株式会社が公開している、音楽プレイヤーソフトです。
音楽ファイルを用意するだけで3Dのキャラクターが音楽に合わせて自動で踊ってくれます。

キャラミんには無料で利用できる「キャラミん OMP」と、有償版の「キャラミん Studio」の2種類があります。
どちらでもMMDのモデルデータをインポートすることができます。
無償版のキャラミんOMPは公式サイトからダウンロードできます。
http://charamin.jp/


無償版・キャラミん OMP

「キャラミん OMP」をインストールして起動します。
標準でインストールされているキャラクターは許斐まい(このみ まい)さんです。
画面右上のボタンをクリックします。
+(プラス記号)のボタンをクリックします。
プロ生ちゃんのpmdファイルを開きます。注意ガキが表示されたOKボタンをクリックします。
すると・・・
でました!プロ生ちゃんです。
あとはMP3などの音楽ファイルキャラミんOMPにドラッグ&ドロップすれば音楽のテンポに合うように自然に踊ってくれます。
動きに合せて髪やネクタイも揺れます。
キャラミんOMPの画面を最小化するとプロ生ちゃんがデスクトップに常駐します。


プロ生ちゃんはキャラミんストアからも無料でダウンロードできる

キャラミんストアからダウンロードしたプロ生ちゃんは、MMDモデルと比べると肌の色などが違った仕上りになってます。 MMD版とストア版を比べてみるのも面白いです。


製品版・キャラミん Studio

有償版の「キャラミん Studio」ではタイムラインごとに振り付けなどを細かく指定できるようになります。
動画ファイルへの出力もできます。


キャラミんの用途は

キャラミんは出来合の振り付けを踊らせることに特化した音楽プレイヤーです。
MMDでは振り付けを自由に作ることが出来ますが、踊らせるには30分の1秒単位でモデルの関節ごとにポーズを指定する必要があります。
MMDでの動画の作成に挫折した人もキャラミんなら簡単に短時間で音楽に合わせてプロ生ちゃんにダンスさせることが出来るます。
キャラミんOMPは観賞用に、キャラミんStudioはCGで動画を作る入門用に使ってみるといいと思います。


キャラミんのバグ?

キャラミんOMPをバージョンアップしても古いバージョンが起動する
キャラミんOMP1.1.4.0はアンインストールしてもファイルが消えません。
C:\Program Files (x86)\Charamin\OMP
をフォルダーごと自分で消してから最新版をインストールしたらバージョンアップできました。

キャラミんStudioを最新版にしたらキャラクターとステージが全部消えた
まず
ファイル - 環境設定
でどこが保存フォルダーに設定されているか確認します。
その後、画面左上のキャラクターやステージのプラス記号のボタンをクリックして保存フォルダーのファイルを指定すると復活します。


関連ブログ

プロ生ちゃんMMDモデルを踊らせよう
OpenGLでプロ生ちゃんをアニメーションさせる
[Android] 壁紙のギザギザ(ジャギー)を直すには
wavファイルの書き出しは要注意 [CUBASE][StudioOne]

以上、参考になれば幸いです。

2014年6月20日金曜日

プロ生ちゃんMMDモデルを踊らせよう

How to make MMD-Characters to dance
プロ生ちゃんのMMDモデルが公開されたので早速使ってみました。
こちらからダウンロードできます。
http://3d.nicovideo.jp/works/td8608


プロ生ちゃんとは

プログラミング生放送のイメージキャラクター・暮井慧(くれいけい)、通称プロ生ちゃんです。
著作権がゆるめのキャラクターです。
詳細はこちらをご覧ください。画像や音声などの素材も公開されています。
http://pronama.azurewebsites.net/2014/06/20/kurei-kei-3d-model-release/


MMDとは

3Dモデルのキャラクターを踊らせるためのフリーソフトです。
正式名称のMikuMikuDanceを略してMMDと呼んでいます。
30分の1秒ごとにモデルにポーズ(姿勢)を指定します。
時系列順にポーズを指定すると、指定されたポーズから次のポーズまで自動的になめらかに動作する仕組みです。
多数の有志によりMMDで使えるキャラクターや背景が公開されています。
MMD本体はこちらで公開されています。
http://www.geocities.jp/higuchuu4/


今回の動作環境

・MikuMikuDance_v910x64.zip
・64bit版 Windows8
・NVIDIA GeForce 610M グラフィックス


DirectX9のインストール

DirectX9.0c エンドユーザー・ランタイムが必要です。
Windows8は標準ではDirectX9.0cがインストールされてません。
マイクロソフトダウンロードセンターで検索し、インストールしてください。
http://www.microsoft.com/ja-jp/download/details.aspx?id=35


MMDのインストール

MMDはzipファイルで公開されてます。
今回はCドライブにmmdというフォルダーを作りそこに解凍しました。
USBメモリーなどにインストールすれば別のPCへMMDを移しやすいと思います。
MikuMikuDance.exe をダブルクリックするとMMDが起動します。


プロ生ちゃんモデルのインストール

MMDを解凍したフォルダーの
UserFile\Model
に プロ生ちゃん という新規フォルダーを作ってそこに解凍たファイルを保存しました。


プロ生ちゃんモデルを読込

MikuMikuDance.exe をダブルクリックするとMMDが起動させます。
画面右下付近の「読込」ボタンをクリックします。

モデルデータのファイルを開くための画面が表示されるので、Modelフォルダーのプロ生ちゃんフォルダーを開きます。
今回はプロ生ちゃん.pmdを開きました。
拡張子違いで同じ名前のファイルがありますが、最新のMMDならどちらでも開けるはずです。

これでプロ生ちゃんが表示されるはずです。


モデルデータの挙動がおかしい場合

プロ生ちゃんモデルは問題ないと思いますが、モデルデータによっては髪の毛やスカートが暴れるように乱れることがあります。
その場合は
物理演算 - 床
をオフにすると正常になることがあります。


モーション(振り付け)データの読込

画面右下訃音のモデル操作がプロ生ちゃんになっていることを確認してください。

ファイルメニューのモーションデータ読込を開きます。
このバージョンのMMDはモーションデータが付属しないようです。
有志が公開しているモーションデータをダウンロードします。
VPVP wikiというサイトで公開されている
gisupekeさん作成の「MMDでぽっぴっぽー(一番なんとか)」をダウンロードしました。
http://www6.atwiki.jp/vpvpwiki/pages/367.html zipファイルでダウンロードしたらMMDをインストールしたフォルダーの
UserFile - Motion
に解凍します。
今回はpoppipo.vmdというファイルを開きました。

ファイルメニューのモーションデータ読込を開きpoppipo.vmdを読み込みます。
こういうダイアログが表示されますがOKボタンをクリックします。


再生する

では踊って貰います。
画面右下の再生ボタンをクリックします。
これで踊らせることが出来ました。


もっと豪華な動画にするには

今回はプロ生ちゃんを出来合のモーションで踊らせてみました。
有志が公開しているモデルやモーションを使えばさらに豪華な動画が作れるでしょう。
下の画像はプロ生ちゃんと東京モード学園のハル(左)とおぼろ式ちとせ(右)を一緒に踊らせてみた画像です。
根気さえあれば自分でモーションを作ることもできるし、モデルデータを改造したり新しいモデルデータを作ることもできます。
ただし著作権と使用許諾のリスペクトをお忘れなく。

このエントリーをはてなブックマークに追加


関連ブログ

プロ生ちゃんをキャラミんで踊らせよう
OpenGLでプロ生ちゃんをアニメーションさせる
[Android] 壁紙のギザギザ(ジャギー)を直すには
wavファイルの書き出しは要注意 [CUBASE][StudioOne]

以上、参考になれば幸いです。

2014年6月14日土曜日

[Java] 文字列がSQL ServerのDateTime型に適合するかチェックする

How to validate the DateTime format
Javaには文字列が日付に適合するかを調べるDateFormatクラスがあります。
DateFormatクラスで日付に適合した文字列がSQL ServerのDateTime型に適合できないことがありました。

そこでJavaでSQL ServerのDateTime型の適合するかチェックする機能を作ってみました。

SQL ServerのDateTime型の仕様

・年月日のセパレーターはハイフン(-)
・時分秒のセパレーターはコロン(:)
・年は1753から9999まで
・最小単位は1ミリ秒

年月日のセパレーターはハイフンの他、スラッシュ (/)やピリオド (.) も可能ですが今回はハイフンのみ可とします。
また、扱える最大値は9999-12-31 23:59:59.997でこれを1ミリ秒でも超えると扱えませんが今回は無視します。
他にもSQL ServerのDateTimeに適合するケースは沢山ありますが今回は次の書式を可とします。

YYYY-MM-DD hh:mm:ss.n*
・YYYYは1753~9999の年を表す
・MMは01~12の月を表す
・DDは01~31の日を表す
・hhは00~23の時を表す
・mmは00~59の分を表す
・ssは00~59の秒を表す
・n*は0~999のミリ秒を表す(省略可)


サンプル



なんだか汚いコードになってしまいました。

isDateTimeFormat(String source) メソッドの内容が日付型の適合をチェックする部分です。
staticなmainメソッドから呼ばれるため、isDateTimeFormatメソッドもstaticにしてます。 非staticメソッドから呼び出す場合はstaticにする必要はありません。
日付として適合ならtrue、不適合ならfalseを返します。
はじめにパターンマッチで書式をチェックします。
書式がOKだったら各要素が日付として正しいかチェックします。

関連ブログ

[Java] SwingのUIを無限ループで更新するには
[Android] PrintStream#printfの最適化(SDK r08でのエラーを別の方法で解決する)
[Android] Javaのstaticクラスから非sataticメソッドを呼び出すには
[Blender] obj2opengl.plをJava用に改造する
[Windows8][Android] EclipseをXP互換モードで起動する理由(Can't bind to local 8600 for debugger)
[Android] Activityに時計を表示する(Activityの非同期更新)
[Android] アナログ時計のアプリを作ってみました
[Android] ストップウォッチアプリを作ってみました
[Android] 方位センサーを使ってコンパスアプリを作る
[Android] OpenGLの簡易画像ビュアーにSDカード内の画像を表示する
[Android] Android-SDKでやってはいけないこと


以上、参考になれば幸いです。

2014年6月13日金曜日

[Application] ザ・数唱のアンドロイダー公式動画が公開されました

アンドロイダー様 https://androider.jp/ にて制作されたザ・数唱の紹介動画がYoutubeにて公開されました。

短期記憶力が勝負の数字記憶ゲーム ザ・数唱

アプリを紹介しているのは「アイドル社員種ちゃん」の宮元 詩乃さんです。
宮元 詩乃さんのFacebookはこちら
https://www.facebook.com/shino.tane.miyamoto

ありがとうございます!

ザ・数唱 / Digit span PLAY はGoogle Playから無料でダウンロードできます。
※ダウンロード前に エンドユーザーライセンス契約(EULA)プライバシーポリシー を必ずお読みください。
https://play.google.com/store/apps/details?id=jjp.fujiu.digitspan

ザ・数唱 / Digit span PLAY の詳細はこちらからご覧いただけます。
http://www.fujiu.jp/AndroidApp/app010_digitspan.shtml

Digit span PLAY is the game.
You should input the numbers that the navigator read out.
Make your working memory excel.
Don't make memos.
Navigators :
HATSUNE MIKU (English, Japanese)
LUO TIANYI (Chinese)
SeeU (Korean)
YUDUKI YUKARI (German)

數字跨度 (Digit span PLAY) 是游戏。
你应该输入的数字,导航器读出。
别拿备忘录。
向导 :
洛天依 (中文)
初音未来 (日语、英语)
SeeU (韩语)
YUDUKI YUKARI(德语)

수반복 (Digit span PLAY) 은 게임이다
당신은 네비게이터가 읽어 해당 입력 번호를해야합니다
메모를 작성하지 마십시오
안내인 :
시유 (한국어)
하츠네 미쿠 (일본어, 영어)
루오 티엔 (중국어)
유즈키 유카리(독일어)

使用したMMDモデル
Lat式 初音ミク、Tda式 初音ミク、ままま式 SeeU、ケミリア式 洛天依、キオ式結月ゆかり
Copyright (C) CRYPTON FUTURE MEDIA, INC. All Rights Reserved.
Copyrignt (C) SBSARTECH. All rights reserved.
Copyright (C) 上海禾念信息科技有限公司 All rights reserved.
Copyright (C) AHS Co. Ltd. All rights reserved.

2014年6月7日土曜日

[Java] SwingのUIを無限ループで更新するには

How to update the UI in an Infinite loop
SwingはJavaのGUIアプリケーションの開発及び実行環境です。
Javaでアプリ開発できるAndroidに比べるとUI(画面)更新にだいぶ違いがあるので悩んだところをまとめてみました。

開発環境

・32bit Windows7
・Eclipse 3.5
・その他Eclipse用日本語化プラグイン、Jstyleなど


Swing用プラグインのインストール

EclipseでSwingを利用するにあたりSwing Designerというプラグインをインストールしました。
ヘルプ - 新規ソフトウェアのインストール
を開き、作業対象に
http://download.eclipse.org/windowbuilder/WB/release/R201309271200/4.3/
と入力し
Swing Designer
WindowBuilder Engine
の2つをインストールしました。

Swing Designerの他にもVisual Swingというプラグインも公開されているようです。


Swing用プロジェクトの作成

簡単な例としてデジタル時計を作ってみます。
新規にJava プロジェクトを作成します。
JFlameのサブクラスを作成します。
JFlameにLabelを一つ追加しました。

約1秒間隔でLabelに現在時刻を表示することを目標にします。


悪い例



コンパイルエラーはありません。
ですが実行しても何も変化しないか、実行時エラーが出たりすると思います。
コンストラクターで無限ループしてるのでコンストラクターが終わりません。
停止させるにはデバッグウィンドウの終了ボタンをクリックしてください。
もし正常に動作するように見えてもこのまま使ってはいけません。


Swingでの約束事

・ループ処理は新しいスレッドで処理する
・UI更新はSwingUtilities.invokeLater(Runnable doRun)で処理する

上の例ではループ処理とUI更新処理を同じスレッドで実行しています。
約束事を守ってないのでUI更新が保証されません。
ちなみに今回のループ処理のようなスレッドをワーカースレッド、UI更新処理のためのスレッドをイベントディスパッチスレッドと呼ぶようです。
イベントディスパッチスレッドで処理したい内容を SwingUtilities.invokeLaterの中に書きます。
UI更新はSwingUtilities.invokeLaterで処理する必要があります。


修正した結果



これで正常に動作しました。
今回は使いませんでしたが、UI更新をイベントディスパッチスレッドの最後に処理する SwingUtilities.invokeAndWait(Runnable doRun) というメソッドもあります。


まとめ

実際に無限ループを処理することはあまりないと思います。
なので今回のサンプルは実用性がありません。

ですが、Webサーバーやデータベースサーバーにアクセスしてユーザーを待たせるようなSwingアプリケーションを作るときは
・サーバーへのアクセスは新しいスレッドで処理する
・UI更新は SwingUtilities.invokeLater で処理する
・SwingUtilities.invokeLater の中でUI更新以外の処理をさせない
という設計にするといいと思います。



関連ブログ

[Android] PrintStream#printfの最適化(SDK r08でのエラーを別の方法で解決する)
[Android] Javaのstaticクラスから非sataticメソッドを呼び出すには
[Blender] obj2opengl.plをJava用に改造する
[Windows8][Android] EclipseをXP互換モードで起動する理由(Can't bind to local 8600 for debugger)
[Android] Activityに時計を表示する(Activityの非同期更新)
[Android] アナログ時計のアプリを作ってみました
[Android] ストップウォッチアプリを作ってみました
[Android] 方位センサーを使ってコンパスアプリを作る
[Android] OpenGLの簡易画像ビュアーにSDカード内の画像を表示する
[Android] Android-SDKでやってはいけないこと


以上、参考になれば幸いです。