2015年1月31日土曜日

カレンダープログラミング プチコンテスト 2014

The calnedar programing petit contest 2014 / Transact-SQL BizBrowser
204年10月、プログラミング生放送勉強会のマスコットキャラクター・プロ生ちゃんがツイッターにこんな投稿をしました。

他の人とかぶらない内容で投稿してみました。
ニッチすぎて採用されませんでしたが。

Transact-SQL (SQL Server 2008 R2)

SQLはデータ操作言語(Data Manupilate Language)です。
プログラミング言語に必要な順次(逐次)処理・分岐処理・繰返し処理は出来ません。
なので純粋なSQLではカレンダーを表示するようなコードは書けません。
SQL ServerのTransact-SQLやOracleのPL/SQLはそれぞれメーカーが独自に開発したSQLライクなプログラミング言語です。
PL/SQLは開発環境をすぐに用意できなかったのと既に他の方が投稿されていたので、Transact-SQLで作ってみました。
テーブルやストアドは使わないので実行に特別な権限は不要だと思います。


Biz/Browser用

Axis SoftのBiz/Browserがどんなところで使われているか把握してませんが誰も応募してないので作ってみました。
JavaScriptがベースなので簡単でした。


関連ブログ

[Java] 文字列がSQL ServerのDateTime型に適合するかチェックする
オープンストリーム・Biz/Browserでアプリ開発

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

2015年1月24日土曜日

Android Studioを使ってみました

Android Studio 1.0
Android Studioは長いことベータ版の公開が続いていましたが、2014年12月に1.0が公開されたので使ってみました。

Android Studioとは

Google公式のアンドロイドアプリケーション開発環境です。IntelliJ IDEAをベースに構築されています。
Eclilpseと比べてAndroid Studioの優位な点はビルド方法の違う複数種類のapkを生成できる点などでしょうか。


環境

・Windows8.1
・Android Studio 1.0


Android Studioのインストール

Android Studioは次のリンク先からダウンロードできます。
http://developer.android.com/sdk/index.html
Windows用exeファイルをダウンロードして実行すればインストールできます。
ですが、個人的にインストーラー形式よりポータブル形式の方が好きなのでリンク先の下の方にある
android-studio-ide-(略)-windows.zip
をダウンロードして解凍して使うことにしました。

ポータブル形式を使う場合はリンク先にあるSDK Tools Onlyもダウンロードする必要があります。
SDK ToolsはEclipse用に使っていたものがそのまま使えました。


Java SE Development Kit 7 (JDK7)のインストール

Android Studioを使うにはJDK7が必要です。
インストールしてない場合はJDK7は次のリンク先からダウンロードします。
http://www.oracle.com/technetwork/jp/java/javase/downloads/jdk7-downloads-1880260.html
ライセンスに同意の上、Accept License Agreement をクリックするとダウンロードできます。
32bitならWindows x86を、64bitならWindows x64をインストールします。


Android Studioの起動

Android Studi本体は解凍したフォルダーの bin の下にあります。
32bit OSならstudio.exe、64bit OSならstudio64.exeかstudio.exeをダブルクリックで起動すると思います。

初回起動時は設定が必要です。
設定をインポートするか聞かれますがインポートする設定ファイルがないので下を選択してOK
Setup WizardはStandardで。
License Agreementはライセンスに同意したら右下のAcceptを選択してFinish。
この後Buiold-toolsの自動ダウンロードで待たされます。 JDK7がインストールされたパスを聞かれたら設定します。
64bit版Windowsに jdk-7u71-windows-x64.exe をインストールしたのなら
C:\Program Files\Java\jdk1.7.0_71
のようなパスになると思います。


Eclipseで作ったプロジェクトをインポートする

Android StudioはEclipseを作ったAndroidアプリのプロジェクトをインポートすることが出来ます。
Welcome画面でImport Non-Android Stuiod Projectをクリックすると出来ます。
ただしインポートしただけで動くEclipseプロジェクトは少なく、ほとんどはGradleの設定を変える必要があるようです。


フォントの設定を変更する

メニューの
File - Settings
を開いて
Editor - Colors & Fonts - Font
の画面を開きます。初期設定は変更できないようなので「Save As...」ボタンをクリックします。

適当なスキーマ名(SCheme name)を設定します。「MySetting」など
これでフォントの種類や大きさを変更できるようになりました。


エディターに行番号を表示する

メニューの
File - Settings
を開いて
Editor - Appearance
の show Line Numbers をオンにすると表示されます。


エディターにTabを表示する

メニューの
File - Settings
を開いて
Editor - Appearance
の Show whitespacesをオンにすると表示されます。


チュートリアル

下記リンク先にAndroid StudioでAdmobを表示するまでの手順が紹介されてます。
https://developers.google.com/mobile-ads-sdk/docs/admob/android/quick-start
英語ですがEclipseでAndroidアプリを開発したことがあれば分かる内容です。
アプリケーションの初期設定ではパッケージ名ではなくドメイン名を入力するとか、Gradleの設定を変えたら「Sync Project with Gradel Files」をクリックする必要があるなど、Eclipseとの違いが分かります。

Projectウィンドウのドロップダウンメニューで表示内容をAndroidにしないとマニフェスト(AndroidManifest.xml)が表示されないのは使いにくいですね。
マニフェストはプロジェクトウィンドウ左上をクリックしてAndroidを選択してここ

build.gradel はプロジェクトウィンドウ左上をクリックしてProjectを選択してここここか、Gradle Scriptsの下


ファイルがごっそり消える現象

Android Studioのインストールフォルダーにサブフォルダーを作ってプロジェクトを保存したら、Android Studioをアップデートした時にプロジェクトがサブフォルダーごと消えました。
アップデート時に不要なファイルがフォルダー内にあると自動的に消すようです。
そもそもプログラムフォルダーにデータを保存するのはいいことではありません。


Eclipseとの違い

ごく一部ですがEclipseと比べて戸惑った点を挙げてみました。
  • マニフェストのxmlファイルを編集するためのGUIがないらしい
  • minSdkVersionの設定変更はマニフェストとbuild.gradleの両方を買える必要がある
  • GUIのレイアウトエディターは表示するウィジットをEditModeで実行しているようで、ApplicationContextを使うメソッド(getResourcesなど)を呼び出すウィジットのサブクラスは
    The following classes could not be instantiated
    というエラー扱いになる
など



関連ブログ

[Android] Google Play Services APIを使うアプリが動かなくなった
[Android] Unable to execute dex でアプリが起動しなくなった

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

2015年1月17日土曜日

[Android] Google Play Services APIを使うアプリが動かなくなった

java.lang.NoClassDefFoundError: com.google.android.gms.ads.AdView
Could not find class com.google.android.gms.ads.AdView

今まで動作していた開発中のアプリがSDKを最新版に更新しただけで動作しなくなってしまいました。
2014年6月にAndroid SDKとAndroid Developer Toolsを最新版にして以来、Google Play Services APIを使ったアプリが全て実行時エラーを起こすようになりました。


環境

・Windows 7 / 8 / 8.1
・Eclipse Indigo / Juno / Kepler / Luna


動作しなくなったソースコード

Google Mobile Ads SDK スタート ガイド https://developers.google.com/mobile-ads-sdk/docs/?hl=ja の手順通りに作ったアプリを実行すると

adView = new AdView(this);

のところで次のようなエラーが起きます。
※Androidのバージョンや端末によってはエラーの内容が異なることがあるようです。



結論

Android Studioでビルドしたら正常に実行できるようになりました。
エラーを起こさない方法は引き続き調べますが、これを機会にAndroid Studioに乗り換えることにしました。


Eclipseで試したけどダメだったこと

プログラマー向けの質問投稿サイトStack Overflowなどを参考に色々試しました。
次のうちどれかを適用したら動くようになったという報告がいくつかあるのですが自分の環境ではすべてダメでした。
  • Android SDK Build-tools Rev.20以降をインスト-する→EclipseがExceptionWithContextを起こしてビルドできない
  • プロジェクトのlibsフォルダーにgoogle-play-service_lib.jarをコピーする
  • ビルドパスにgoogle-play-service_lib.jarを指定し順序及びエクスポートにgoogle-play...をチェックする
  • ワークスペースを初期化する
  • EclipseとAndroid SDKを再インストールする
  • 新しいEclipse (indigoやluna)に乗り換える
  • Ant1.9.4をインストールしてEclipse付属のAntを使わない設定にする
  • プロジェクト・ビルド・ターゲットをGoogle APIsに変更する
  • 仮想デバイスマネージャーでエミュレーターを作り直す
  • Google開発者サービスがインストールされている実機で動かしてみる
  • 下のフォルダーを削除ししてEclipseとAndroid SDKを初期化する
    %USERPROFILE%\.android
    %USERPROFILE%\.eclipse
他にも色々試しましたが何をやってもエラーが起きました。


Google APIsが必要らしい

原因を調べるうちに動作環境が昔と変化している点がありました。
Adding SDK Packages のページ
http://developer.android.com/sdk/installing/adding-packages.html
によると、
Note: Google Play services APIs are not available on all Android-powered devices,
but are available on all devices with Google Play Store.
To use these APIs in the Android emulator,
you must also install the the Google APIs system image from the latest Android X.X directory in the SDK Manager.
とあります。
どうやらはGoogle APIsをインストールしないと動作しなくなったようです。


特定のAndroidエミュレーターでは動かなくなったらしい

もう一つ変化している点がありました。
Adding SDK Packages のページでは
To use these APIs in the Android emulator,
you must also install the the Google APIs system image from the latest Android X.X directory in the SDK Manager.
とあります。

Setting Up Google Play Servicesのページ
https://developer.android.com/google/play-services/setup.html?hl=ja
によると、
The Android emulator with an AVD that runs the Google APIs platform based on Android 4.2.2 or higher.
とあります。
Android SDK付属のAVD ManagerではAndroidエミュレーターを作ることが出来ますが、Target NameやAPI Levelなど様々な組み合わせを指定する必要があります。
どうやらAPI Levelが17以上のGoogle APIsのエミュレーターでしか動作しなくなったようです。


2014年12月にバージョン1.0.0が公開されたAndroid StudioではGoogle Play Services AIPを使ってエラーなく動作させることが出来ました。
「ウチのEclipseはGoogle Play Services APIでエラーは出ない」という開発者もいらっしゃるかと思いますが、Android自体が変化し続けているのでEclipseからAndriod Studioに乗り換えることにしました。


関連ブログ

[Ecipse] Unable to execute dex でアプリが起動しなくなった
[Ecipse] マニフェストに表示される警告(黄色三角のエクスクラメーションマーク)
[Android] アプリからツイートするとハッシュタグが消える(URLエンコード漏れ)
[Unity3D] Visual Studio Community 2013を日本語化してUnityアプリを作る

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

2015年1月10日土曜日

[Unity3D] ゲーム画面をキャプチャしてMovie Studioで動画に編集する

How to capture screenshot pictures with Unity.
Unityで作ったアプリの画面をキャプチャして動画を作るために調べたことをまとめました。
この方法は音声のキャプチャが出来ません。

環境

・Windows8.1
・Unity 4.5.5f1
・Movie Studio 12 Platinum

Unityの画像ファイルに保存するメソッドを使う

Unityはスクリーンショットをpng形式の画像ファイルに保存する Application.CaptureScreenshot というメソッドがあります。
http://docs.unity3d.com/ScriptReference/Application.CaptureScreenshot.html
このメソッドを使って実行中のゲームの全フレームを画像ファイルに保存するC#スクリプトを作りました。
保存先に同じ名前のファイルがあると上書きされるのでファイル名に連番を付けます。
画像ファイルは Dドライブの \captures というフォルダーに保存することにします。
他のフォルダーに保存する場合はソースを修正してください。
1秒に何枚の画像を保存したかをフレームレートとしてConsoleに表示します。

以下ソースです。
CaptureScreens.cs


このスクリプトをシーン内のカメラにアタッチさせます。

この状態でゲームを実行すると全てのフレームのスクリーンショットが画像ファイルに保存されます。
スクリーンショットを保存しながらだと動作速度が落ちるので、画像ファイルの保存用にRAMディスクを作った方がいいと思います。

目的のスクリーンショットが撮れたらカメラにアタッチしたスクリプトのチェックを外すかRemoveしてスクリプトを無効化してください。


Movie Studioで画像ファイルを動画に変換する

Movie Studioで静止画をつなげて一つの動画を作ります。
Consoleによると1秒当たり17フレームでした。
今回は最初の170枚の画像で10秒分の動画を作ることにします。

※もっと簡単な方法がありましたので下に追記しました

エクスプローラーで先頭から170番目までの画像ファイルをまとめて選択してMovie Studioのビデオトラックにドラッグ&ドロップします。

タイムラインの画像ファイル1枚に5秒が割り当てられますが長すぎるのでストレッチします。
ビデオトラックをマウスでドラッグ操作するかか、Ctrlキー+Aキーで全ての画像ファイルを選択し、
編集 - グループ - 新規作成
でグループ化します。

Ctrlキーを押しながらタイムラインの画像ファイルの右端を左に向かってドラッグします。
タイムラインの画像ファイル1枚の割り当て時間が1秒までストレッチされます。

動画が10秒になるようにストレッチしたいわけですが、Movie Studioは1枚1秒までしかストレッチできないようです。
もっと短くストレッチしたいので
ツール - 新規トラックへのレンダリング
を実行して動画ファイルに変換します。

新しいビデオトラックと動画のイベントが作られるので、イベントの右端をCtrlキーを押しながら左にドラッグしてストレッチします。
Movie Studioは元の長さの4倍から4分の1倍までしかストレッチできないようなので、10秒の動画になるまでストレッチとレンダリングを何度も繰り返します。


もっと簡単な方法がありました

2015年2月23日追記
連続した画像ファイルを動画として取り込む機能がありました。

ファイル - メディアのインポート
を開いて右下の選択項目で
画像シーケンス
を選択します。
先頭の画像ファイルを選んでオープンシーケンスにチェックを入れて最後の画像に最後の画像ファイルの連番を入力します。
※連番のファイルがあれば「最後の画像」は自動で入力されるようです。

この設定で開くボタンをクリックするとプロパティ画面が表示されます。
この画面でフレームレートを設定します。
フレームレートは初期設定のままだと29.970と設定されていますが、今回の動画は1秒に17フレームなので17と入力してOKをクリックします。

プロジェクトメディアに動画のメディアが追加されているのでビデオトラックにドラッグすれば再生できます。


アセットを使う方法

Unityアセットストアで購入できるAVPro Movie Captureを使うとゲーム画面を動画ファイルにキャプチャしてMP4のエンコードまでしてくれるようです。
https://www.assetstore.unity3d.com/jp/#!/content/2670



関連ブログ

[GIMP] GIFアニメーションの作り方
[動画編集] Movie Studio 13 でVSTプラグインを使ってみました
[Unity3D] Visual Studio Community 2013を日本語化してUnityアプリを作る
[Unity3D] 透視投影と平行投影を合成するには[ユニティちゃん]
[Android] 高速Androidエミュレーター・BlueStacks
[Unity] オーディオの音量が小さい
[Unity 3D] Blender could not be found.を解決するには

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

2015年1月3日土曜日

[動画編集] Movie Studio 13 でVSTプラグインを使ってみました

How to use VST effect plugins with Movie Studio
動画編集ソフト Movie Studio 13 Platinum を使ってみました。


なぜMovie Studioを選んだのか

動画編集ソフトはたくさんあり、フリーウェアならAviUtl、有料製品ならAdobe Premiereが人気かと思います。
その中からMovie Studioを選んだ理由は、オーディオトラックにVSTエフェクトプラグインやDirectXプラグインを使うことが出来る点です。
オーディオインターフェイス用規格のASIOにも対応しています。
VSTエフェクトプラグインで音声を加工する操作についてまとめてみました。


環境

・Movie Studio 13 Platinum 64bit版
・Windows8 64bit版


音声の出力レベルを確認する

メインツールバーの詳細ボタンをクリックすると画面右側に音声の出力レベルのメーターが表示されます。
-0.1dBでノーマライズしたオーディオ素材を再生してみると0.0dBを超えるクリッピングが起きました。マスタバスのレベルメーターの上にピーク値が表示されています。
原因は不明ですがデフォルトのイコライザーやコンプレッサーをオフにしてもクリッピングします。
クリッピングが起きると音が歪んでしまうのでクリッピングしないように編集しなければいけません。
ボリュームフェーダーを下げればクリッピングを防げますが、DTM経験者ならマスターバスのフェーダーを下げずにクリッピングを防ぎたいものです。


オーディオをVSTエフェクトで処理する

マスタFXボタンをクリックするとマスターバスにエフェクトプラグインを設定することができます。
クリッピングを防ぐためのエフェクターとしてリミッターをインサートしてみます。

プリセットのエフェクトも多数あります。
リミッターという名前のプリセットエフェクトはありませんが、付属のExpressFX ダイナミクスをインサートして圧縮比を∞:1にすればリミッターと同じ効果になると思ったのですが、設定したスレッショルドを遙かに超えることがあるので今回は使いません。
エフェクトプラグインは社外品のVSTを使うことにします。
64bitのVSTエフェクトプラグインならフリーウェアでも使えると思いますが、動画編集にCPUのリソースを割けるようにCPU負荷の低いプラグインを使うと快適だと思います。
今回は社外品のVSTエフェクトプラグイン・EZ MIX 2 LITE(以下EZ MIX)を使ってみました。


EZ MIXでクリッピングを防ぐ

マスタFXボタンをクリックするとプラグインチューザーが表示されるので目的のプラグインを選択します。
EZ MIXは左のツリーのサードバーティやVSTの中にありました。
プリセットからMutiband Masterを選びます。
動画を再生してEZ MIX左下の入力レベルをチェックします。
最初から最後まで再生してレベルメーターの赤ランプが点灯しないように INPUT を下げます。INPUTは上の画像の黒いツマミです。小さいツマミですがものすごく重要です。
点灯した赤ランプはクリックすると消灯します。
赤ランプが点灯したらクリックして消灯させINPUTを下げて動画再生する作業を赤ランプが付かなくなるまで繰り返しチェックします。
今回はINPUTを-1.0dBdBまで下げました。
EZ MIXはシフトキーを押しながらマウスホイールで操作すると0.1dB単位で調整できます
結果、マスタバスの出力上限が0.0dBを超えることがなくなりました。
フェーダーを下げてピークが0.0dBということはVSTエフェクトの位置はフェーダーの後ろのようです。
VSTエフェクトプラグインをマスタバスにインサートしたら、出力レベルはプラグインで調整が必要です。

なお、自分の環境ではクレジットロールを編集すると高確率でフリーズします。
他のソフトが安定動作するPCで使っているにも関わらずです。
フリーズの原因がMovie Studioとプラグインのどちらの問題かを突き詰めるのは困難です。
プラグインは必要最小限で使うことをお勧めします。


旧バージョンとの互換性は?

Movie Studio 13で保存したプロジェクトは旧バージョンのMovie Studio 12では開けませんでした。
体験版を使用する際はご注意ください。


動画の編集の性能は?

Windowsムービーメーカーではできないパン・クロップ(画像や動画を拡大したり上下左右に動かす編集)ができます。
マニュアルを見てもAdobe Premiere Proにあるレンズ補正(レンズディストーション補正)の機能は見当たりません。
調べたところ、ビデオトラックFXの「Sony 球形」をインサートして「量」をマイナスにしたら似たようなことが出来ました。
これをレンズ補正と言い張るのは無理がある気がしますが。
(画像は「マスコットアプリ文化祭2014」のキャラクター達です)
動画編集ソフトを扱うのははじめてなのですが、動画編集の性能はビデオトラックFXによるところが大きいと感じました。


ビデオトラックFXのマニュアルは?

ヘルプを開いて
ビデオ エフェクトの追加 - 特定のプラグインの詳細
に一部の説明が英語で書かれてるのみで、どれを使えば何が出来るのかを網羅したマニュアルは見当たりません。
無数にインストールされているビデオトラックFXが宝の持ち腐れのようです。


ニコニコ動画用のエンコード

ニコニコ動画に投稿する動画は一般ユーザーの場合、総ビットレートが600kbps以内に収まるようにファイルをエンコードすると制限が回避されるようです。
2分弱の動画を下記の設定でエンコードしたら569kbpsでした。
フォーマット Sony AVC/MVC
ビデオ形式 AVC
フレームサイズ 640x360
プロフィール
エントロピーコーディング CABAC
フレームレート 29.970 (NTSC)
ビットレート 256,000
画質はひどく劣化します。下の画像は左がオリジナル、右が上記設定でエンコードした結果です。色まで変わってます。
劣化の少ないwmvファイル等で書き出し、wmvファイルをフリーウェアの「つんでれんこ」でエンコードしたら高画質で600kbpsに収まりました。




関連ブログ

[CUBASE][VOCALOID] Toontrack EZmix 2 Lite を使ってみました
[VSTプラグイン] Navite InstrumentsのSupercharger


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