2012年2月25日土曜日

[Cubase] Mystic・Prologue・Spectorの同時発音数の設定方法

How to make Mystic, Prologue, Spector change the number of voices

Cubaseにはシンセサイザーがたくさん付属しています。
なぜかMystic・Prologue・Spectorの3つは同時発音数の設定方法がマニュアルに書いてありません。
初期設定ではモノフォニック(単音)しか鳴らせません。

設定箇所は画面右上(max voices)、コンソールの外側です。
ちなみに画面左上(pitchbend range)でピッチベンド幅が設定できます。2で1音階、12で1オクターブです。

左上がピッチベンド幅、右上が同時発音数
いじっているうちに偶然気がつきました。

同時発音数を2以上に設定した場合はポルタメント効果はなくなります。(このことはマニュアルに書いてあります)

この3つのシンセは音色が個性的なので効果音を作るのに重宝します。
ただしパラメーターが多くて初期状態から音色を作るのは難しいのでプリセットを少し加工して使ってます。
音色をねらって作るのは難しいです。

もうすぐSteinbergからPadshopというシンセサイザーが発売される聞いてふと思い出しました。
http://japan.steinberg.net/jp/products/vst/padshop/start.html
Padshopも難しそうですが音作りの幅は広そうです。

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

2012年2月18日土曜日

[Android] BitmapクラスのOutOfMemoryErrorを防ぐ #2

How to correct the OutOfMemoryError of Bitmap class #2
前回は画像表示のたびにBitmapFactory.decodeResourceを実行して、表示後にrecycle()メソッドで解放する方法でOutOfMemoryErrorを防ぎました。
この方法は安定して動作しますが、表示のたびにファイルにアクセスしてデコード処理を実行するので効率が悪いような気がします。

そこで他の方法を考えました。
Bitmapクラスは画像を整数の配列に変換する getPixelsメソッド と、整数の配列を画像に戻す setPixelsメソッド があります
画像を配列に変換したり、配列を画像に変換する処理はCPUとメモリー(RAM)の間のデータ転送が主な内容になるはずです。
ファイルアクセスやデコード処理が1回で済むのでもっと効率が上がりそうです。

今回は1024×1024ピクセルの4枚の画像を整数の配列に変換することをを試してみます。
成功すればBitmapFactory.decodeResourceは各画像につき1度しか実行されないので効率が上がるはずです。

Main3
結果
整数の配列の確保(new int[1024 * 1024])でOutOfMemoryErrorが起きてしまいました。
Android1.6と2.1のエミュレーターで確認しました。
Androidのint型は4バイトなのでint[1024 * 1024]の配列は連続した4MBの空きメモリー(RAM)が必要になるわけですが、それを4つも確保するのは難しいようです。
int[1024][1024]の2次元配列を使う方法に直して試みましたがやっぱりOutOfMemoryErrorが起きました。

RAM容量の多い端末で正常動作するかもしれませんが、エミュレーターで動作しない方法なのでお勧めできません。

ちなみにgetPixelsメソッドはJNI(Android-NDK)のOpenGLでポリゴンのテクスチャを貼り付けるときに必須のメソッドです。
http://blog.fujiu.jp/2011/08/android-android-ndk.html

今回はわざと大きい画像や配列を扱ってエラーが出ることを確認しました。
将来のAndroid端末は今以上にRAMの大容量化、画面の高解像度化が予測されます。
Android-SDKやOSも進化して大きいBitmapを扱いやすくなってます。
古い端末でも簡単に扱えるようになったらいいですね。


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

2012年2月11日土曜日

[Android] BitmapクラスのOutOfMemoryErrorを防ぐ

How to correct the OutOfMemoryError of Bitmap class

Android端末は種類が多く、画面解像度も機種ごとに違うので画像の扱いは大きな悩みどころです。
たとえばSurfaceViewに画像を表示する場合、大きめの画像データ(1024×1024ピクセル)を用意して画面解像度に合わせて縮小表示する方法が一番簡単のように思います。
ところが、Androidは大きい画像を下手に扱うと BitmapFactoryクラスが OutOfMemoryError が発生することがよくあります。

すでに多くの開発者がOutOfMemoryErrorを回避する方法を公開しています。
今更ながらMtkもいくつか方法を考えてみました。

4枚の1024×1024ピクセルの画像を1秒ごとに表示するアプリケーションで説明します。
画像は画面解像度に収まるように拡大縮小表示します。

1024×1024ピクセルのこんな画像を4種類用意します。
それぞれのファイル名はimage1.png、image2.png、image3.png、image4.pngとしました。
Androidのプロジェクトのresフォルダーの下にdrawableフォルダーを作成し、この4つの画像を保存します。

OutOfMemoryErrorが出るサンプルです。Android1.6のエミュレーターで確認しています。
※Android2.1のエミュレーターでは正常に動作しましたが実機ではOutOfMemoryErrorが起こり不安定です。
Main.java(Activity)
※Android1.6以上、パーミッション不要のため、マニフェストは省略します
Android1.6エミュレーターでアプリを実行すると
bmp2 = BitmapFactory.decodeResource ・・・
でOutOfMemoryErrorが発生します。
1024×1024ピクセルの画像(Bitmapのインスタンス)をメモリー(RAM)に置くことができないようです。

次はOutOfMemoryErrorが起きないように修正したサンプルです。
Main2.java(Activity)
Bitmapの表示のたびにファイルからロードし、次のbitmapファイルを開く前にrecycle()メソッドを実行します
表示するたびにファイルにアクセスするのは効率が悪いような気がしますが、Bitmapをメモリー(RAM)に置いておけないのだから仕方ありません。

今回はSurfaceViewを使いました。
GLSurfaceViewでポリゴンにテクスチャを貼り付けるときも GLUtils.texImage2D の直前でBitmapをロードし直後にrecycle()すると安定する思います

次回は他の方法を試してみる予定です。
公開しました http://blog.fujiu.jp/2012/02/android-bitmapoutofmemoryerror-2.html


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

2012年2月4日土曜日

[Java] thisとは #2

What is "this" #2

AndroidアプリケーションのJavaソースにthisを使うことがよくあります。
たとえばToastです。

Main.java(Activity)

ToastクラスのmakeTextメソッドにthisを渡しています。
thisはインスタンス化されたクラス自信です。
このソースはMainクラスの中のthisなので、インスタンス化されたMainクラス自身ということになります。

・なぜmakeTextメソッドにthisを書くのか?
Toastクラスのリファレンスを見てみます。
http://developer.android.com/intl/ja/reference/android/widget/Toast.html
makeTextメソッドの説明にはこう書かれてます。
makeText(Context context, CharSequence text, int duration)
Android-SDKをインストールしたeclipseならマウスをメソッドにホバーするとリファレンスが表示されます。

1壱番目の引数はContextを渡すことになってます。

上のサンプルでmakeTextメソッドに渡したのはContextクラスではなくMainクラスのthisです。
正常に動くけど渡すべきクラスが違うように見えます。

・なぜMainクラスのthisで動くのか?
上のサンプルのMainクラスは次のように定義しています。
public class Main extends Activity
MainクラスはActivityクラスを継承しています。
はActivityクラスのリファレンスを見てみます。
http://developer.android.com/intl/ja/reference/android/app/Activity.html
ここにはこんなことが書かれてます。

java.lang.Object
android.content.Context
android.content.ContextWrapper
android.view.ContextThemeWrapper
android.app.Activity
Activityがどのクラスを継承しているかを説明しています。

ActivityクラスはContextThemeWrapperクラスを継承したサブクラスで
ContextThemeWrapperクラスはContextWrapperクラスを継承したサブクラスで
ContextWrapperクラスはContextクラスを継承したサブクラスです。

つまりMainクラスはContextクラスを継承しているのでContextクラスとして振る舞うことができるのです。
makeTextメソッドに渡したthisはContextクラスを継承したMainクラスだからToastが正常に表示されたわけです。
ServiceクラスもContextクラスを継承しています。
http://developer.android.com/intl/ja/reference/android/app/Service.html
ServiceクラスもでToastを表示するときもmakeTextメソッドにthisを渡します。

・Contextのサブクラス以外のthis
Android-SDKのApiDemosのRotationVectorDemo.javaにこんなコードがあります。

mSensorManager.registerListener(this, mRotationVectorSensor, 10000);

registerListenerメソッドの第1引数はSensorEventListenerインターフェイスを渡すことになってます。
このMyRendererクラスの定義です。
class MyRenderer implements GLSurfaceView.Renderer, SensorEventListener
MyRenderer クラスはSensorEventListenerインターフェイスを継承しています。
SensorEventListenerインターフェイスを継承したクラスのthisはSensorEventListenerとして振る舞うのでregisterListenerメソッドに渡せば動作するわけです。

前回の [Java] thisとは で書ききれなかったAndroidアプリケーションのソースのthisについての説明でした。

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

2012年1月28日土曜日

[Android] 買ったばかりのスマートフォンが調子悪ければ

How to maintain th Android smartphones
せっかく買ったスマートフォンの動作が遅かったり、アプリケーションがちゃんと動かなければガッカリします。
そんな悩みはちょっとした操作で解消するかもしれません。

1.
本体の更新
docomoの場合、[設定] - [端末情報] に [ソフトウェア更新] や [メジャーアップデート] があります。
auの場合、[設定] - [システム] - [ケータイアップデート]があります。
アップデート可能なら不具合が修正されることがあります。
※端末やOSのバージョンにより表現が異なるかもしれません。
Wi-Fi不可。データ通信が必須なのでパケット料がかかります。

2.
アプリケーションのアップデート
特定のアプリケーションが動作不良を起こす場合はアプリをバージョンアップすると直るかもしれません。

[マーケット] - MENUボタンを押す - [マイアプリ] をタップします。
アップデート可能なアプリがあれば表示されます。
特に不具合が無くても信頼できるブランドのアプリは常に最新版に更新しておいた方がいいと思います。

3.
OSのバージョンアップ
Android OSはバージョンが新しいほど性能がよくなります。
OSのバージョンアップ方法はキャリアや機種ごとに異なるので、公開されているマニュアルをよく読んで操作することをおすすめします。
ただし、バージョンアップによる弊害があっても「自己責任」なのでご注意ください。

参考
LYNX3D (SH-03C) をAndroid2.2にバージョンアップ

Android2.1から2.2へバージョンアップした後の障害

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

2012年1月21日土曜日

[CUBASE] 「突然音が出なくなった」を解決する

How to rehabilitate no sound in Cubase

過去の経験からcubaseの音が突然出なくなった症例と解決方法のまとめです。
「特定の音色だけ音が出ない」とか「特定のプロジェクトの音が全く出ない」といった場合についての内容なので、ハードウェアやソフトウェアは正常であることが条件です
画像はCubase5ですが、Cubase6も同じです。

1.

ミュート[M]・ソロ[S]を設定した

blog.fujiu.jp [CUBASE] 「突然音が出なくなった」を解決する
黄色の[M]ボタンはミュートです。ミュートにしたトラックの音は出ません。
赤の[S]はソロです。ソロに設定すると他のトラックがすべてミュートにされます。
ミュートを解除すれば音が出るようになります。

2.

情報ラインのミュートが設定されている

特定のパートがグレーで表示されている場合は情報ラインのミュートが設定されています。
グレーのパートをクリックして、情報ラインのミュートをクリックすると解除され、音が出るようになります。

3.

出力のバスが設定されていない

[デバイス]-[VSTコネクション]-[出力]を開きます。
オーディオデバイスが未接続になっていれば音が出ません。
条件によりますが、コントロールルームが起動していると未接続しか選択できないことがあります。
(オーディオインターフェイスの出力が1系統しかない場合など)
コントロールルームを無効にするには同じ画面の[スタジオ]を開いてオフにします。
これで[デバイス]-[VSTコネクション]-[出力]の設定ができるようになります。

4.

ミキサーのバスが設定されてない

てプロジェクトを再生するとトラックのレベルメーターが動いているのに、一番右の「Stereo」(マスターチャンネル)のレベルメーターが動かない場合は[デバイス]-[ミキサー 3]を開きます。
ミキサーの左上の「^」の記号をクリックしてルーティングパネルを表示します。
「バスなし」に設定されていたら音が出ませんので、クリックして「Stereo」に設定します。
Mtkは過去に一度だけ全てのチャンネルがバスなしに設定されてしまったことがありました。原因は不明のままです。

5.

マルチティンバーのVSTインストゥルメントの出力が無効になっている

VSTインストゥルメントはルーティングごとの出力が有効になっていないと音が出ません。
たとえば、VSTインストゥルメントにGroove Agent Oneを選択しPlayページのOutputパラ-メータを2に設定した場合、「GAOne 2 [Stereo]」を有効にしないと音が出ません。
ルーティングが何番目か分からない場合、上の画面の赤丸の「全出力を有効化」を設定すると音が出ます。


音が出なくなる原因は、うっかりミュートしてしまうことが多いです。
マウスでクリックしてしまうこともあれば、ショートカットキーを押してしまうこともあります。


関連ブログ

[CUBASE] グループチャンネルとFXチャンネルの違いと使い分け
[CUBASE] スペクトルモニターの精度
[Cubase] Cubase6のバージョンアップのトラブル
[Cubase] Mystic・Prologue・Spectorの同時発音数の設定方法
[VOCALOID] StudioOneFreeでVOCALOIDの声を聞きやすくする

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

2012年1月14日土曜日

[Cubase] Cubase6のバージョンアップのトラブル

Cubase6 problem reports

今更ですがCubaseを5から6にバージョンアップしました。
その際に起きたトラブルと対処方法をまとめました。

1.
Cubase5のHALionOneの音色プリセットが少ない
Cubase5からバージョンアップした場合、Cubase6でHALionOneを使う方法があります。
その設定方法がこちら
http://www.distribution-steinberg.jp/support/faq/entries/cubase_6/cubase_6vst/002150.php
ところがMtkの環境では、どれだけこの設定をやり直しても707音色のうち44音色しか引き継げませんでした。
MediaBayを開き、ローカルハードディスクを再スキャンしたら直りました。
原因はHALionOneの音色プリセットファイルを引き継ぐ前にMediaBayを開いてしまったためみたいです。

2.
32bitのHALion Sonic SEが使えない
Cubase6-64bitをインストールしてからCubase6-32bitをインストールしたら、なぜかCubase6-32bitでHALion Sonic SEが使えませんでした。
インストールDVDの
\Cubase 6 for Windows\Additional Content\VST Sound\HALionSonicSE.msi
をダブルクリックして手動でインストールしたら使えるようになりました。
32bitのHALion Sonic SEがインストールされなかったみたいですが原因は不明です。


3.
新しくなったDeEsser
Cubase5のDeEsserをインサートしたプロジェクトをCubase6で開くとエラーになります。
このままではDeEsserの効果が得られません。
原因はDeEsserがCubase6で新しくなったためでしょうか。ツマミが増えてボタンが無くなってます。

左がCubase5、右がCubase6のDeEsser
せっかくなのでCubase6のDeEsserをインサートし直しました。
GUIがCompresserやMaximizerのようになって、効果が目で確認しやすいです。


4.
ノイズ
ノイズと言っても故障ではありません。
Cubase5は快適に動くのですが、でCubase6ではプロジェクト再生中に「プチプチ」とノイズが入ります。
ASIOドライバーのサンプル数を増やしたらノイズが無くなりました。今までの倍のサンプル数に設定してます。
[デバイス]メニュー - [デバイス設定]を開き、オーディオシステムの下のオーディオインターフェイスのコントロールパネルで設定できます。
Cubase6ではPCの要求スペックが上がったようです。CPUの推奨スペックは箱に明記されていませんが、MtkのPCは貧弱すぎたようです。(CPUクロック3.0GHz×2コア、Windows7)


Cubase6は操作方法は従来と変わりませんが、画面が見やすく変わりました。
HALionSonicSEはいじれるパラメータが増え、プリセットの音色にSuperSAW等も追加されてます。
Windows Vista/7でCubase5を起動するのに必要だった管理者権限がCubase6では不要になった点も大きな変化です。

Cubase5に不満はありませんでしたが、Cubase6にバージョンアップして後悔はありません。

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