|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Objectcom.nttdocomo.ui.Audio3D
3D サウンドの制御を行うためのコントローラを定義します。
SMF や MFi などのサウンドデータを再生しながら 3D サウンドの制御を行うためには、
サウンドデータの再生のために必要なリソースと、
3D サウンドの制御に必要なリソースとの両方が必要になります。
サウンドデータの再生のために必要なリソースは
3D サウンドの制御方法には、
サウンドデータに埋め込まれた 3D サウンドイベントによって
3D 環境をコントロールする方法と、
サウンドデータを再生しながらアプリから 3D 環境をコントロールする方法があります。
サウンドデータに埋め込まれた 3D サウンドイベントによって
3D 環境をコントロールする場合は、
明示的にサウンドデータによってコントロールを行うことを指定して
3D サウンドの制御を有効化します。
具体的には、以下のような手順で制御を行います(例外処理などについては省略しています)。
AudioPresenter
オブジェクトによって確保と解放が行われます。
一方、3D サウンドの制御に必要なリソースは、
このクラスのオブジェクトを通してアプリから明示的に確保と解放を行う必要があります。
3D サウンドの制御に使用するリソースを確保する際にはリソース数を指定しますが、
リソース数は仮想音源の数と同じです。
3D サウンドの制御の有効化を行わずに再生した場合、
サウンドデータに埋め込まれた 3D サウンドイベントは無視されます。
MediaSound ms = MediaManager.getSound(url);
ms.use();
AudioPresenter ap = AudioPresenter.getAudioPresenter();
ap.setSound(ms);
Audio3D a3d = ap.getAudio3D();
int resources = Integer.parseInt(ms.getProperty(MediaSound.AUDIO_3D_RESOURCES));
a3d.enable(Audio3D.MODE_CONTROL_BY_DATA, resources);
ap.play();
...
ap.stop();
a3d.disable();
ms.unuse();
サウンドデータを再生しながらアプリから 3D 環境をコントロールする場合は、
明示的にアプリからコントロールを行うことを指定して
3D サウンドの制御を有効化します。
アプリからは、3D 環境を 3D 定位
で指定します。
アプリからコントロールを行う方法で 3D サウンドの制御の有効化を行って再生した場合、
サウンドデータに埋め込まれた 3D サウンドイベントは無視されます。
具体的には、以下のような手順で制御を行います(例外処理などについては省略しています)。
MediaSound ms = MediaManager.getSound(url); ms.use(); AudioPresenter ap = AudioPresenter.getAudioPresenter(); ap. setSound(ms); Audio3D a3d = ap.getAudio3D(); a3d.enable(Audio3D.MODE_CONTROL_BY_APP, 1)); Audio3DLocalization a3dl1 = (3D 定位を表すオブジェクトを生成); a3d.setLocalization(a3dl1); ap.play(); ... Audio3DLocalization a3dl2 = (3D 定位を表すオブジェクトを生成); a3d.setLocalization(a3dl2); ... ap.stop(); a3d.disable(); ms.unuse();
なお、オーディオ・プレゼンタの再生中に 3D サウンドの制御の有効化や無効化を行うことはできません。
3D サウンドの制御を有効化した場合、 制御対象のチャンネルではサウンドデータの中のパンポットなどステレオでの音の定位を指定するイベントは無視され、 全ての音が 3D 空間の中の一点から聴こえるようになります。
AudioPresenter
フィールドの概要 | |
static int |
MODE_CONTROL_BY_APP
アプリケーションから 3D 環境のコントロールを行うことを指定します(= 2)。 |
static int |
MODE_CONTROL_BY_DATA
サウンドデータに埋め込まれた 3D サウンドイベントによる 3D 環境のコントロールを行うことを指定します(= 1)。 |
static int |
SOUND_MOTION_COMPLETE
定位の移動が完了したことを表すイベントです(= 1)。 |
メソッドの概要 | |
void |
disable()
3D サウンドの制御を無効化します。 |
void |
enable(int mode)
3D サウンドの制御を有効化します。 |
void |
enable(int mode,
int resources)
3D サウンドの制御を有効化します。 |
static int |
getFreeResources()
未使用状態の 3D サウンドの制御を行うためのリソース数を取得します。 |
static int |
getResources()
端末が持っている 3D サウンドの制御を行うためのリソース数を取得します。 |
int |
getTimeResolution()
3D 定位の設定に関する時間の解像度を取得します。 |
boolean |
isEnabled()
3D サウンドの制御が有効化されているかどうかを取得します。 |
void |
setListener(Audio3DListener listener)
リスナを登録します。 |
void |
setLocalization(Audio3DLocalization localization)
3D サウンドの制御を行うための 3D 環境のうち、3D 定位を設定します。 |
クラス Object から継承したメソッド |
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
フィールドの詳細 |
public static final int MODE_CONTROL_BY_DATA
public static final int MODE_CONTROL_BY_APP
public static final int SOUND_MOTION_COMPLETE
定位の移動が完了したことを表すイベントです(= 1)。 イベントのパラメータには常に 0 が渡されます。
サウンドデータによって 3D 環境をコントロールする
場合は、
このイベントは発生しません。
アプリケーションから 3D 環境をコントロールする
場合は、
SoundMotion
による定位の移動が完了した時に発生します。
SoundMotion
,
定数フィールド値メソッドの詳細 |
public static int getResources()
端末が持っている 3D サウンドの制御を行うためのリソース数を取得します。 このメソッドは同じ端末では常に同じ値を返します。
public static int getFreeResources()
未使用状態の 3D サウンドの制御を行うためのリソース数を取得します。
public int getTimeResolution()
3D 定位の設定に関する時間の解像度を取得します。
このオブジェクトに対して一度3D 定位を設定
した後、
次に 3D 定位の設定を行うまでの時間間隔として推奨する値を返します。
このメソッドが返す値よりも短い時間間隔で 3D 定位の設定を行った場合、
端末によっては 3D 定位の設定に時間がかかったり、
3D サウンドの処理に負荷がかかったりする場合があります。
public void enable(int mode, int resources)
3D サウンドの制御を有効化します。
3D サウンドの制御のモードとして、 サウンドデータに埋め込まれた 3D サウンドイベントで 3D 環境の制御を行うか、 アプリケーションから 3D 環境の制御を行うかを指定します。 また、3D サウンドの制御のために確保するリソース数を指定します。
MODE_CONTROL_BY_DATA
を指定する場合)
は、
確保するリソース数にはサウンドデータから取得したリソース数を指定します。
サウンドデータが必要とするリソース数と異なる数を指定した場合も、
アプリから指定された数だけリソースを確保して、その範囲で再生を行います。
MODE_CONTROL_BY_APP
を指定する場合)
は、確保するリソース数には 1 を指定します。
このオブジェクトを通して 3D サウンドの制御を行うのに必要以上のリソース数が指定された場合は、
実際には必要な数だけのリソースを確保します。
このメソッドで確保されたリソースは、disable()
が呼ばれるまで確保されたままです。
mode
- 3D サウンドの制御のモードを指定します。
MODE_CONTROL_BY_DATA
または
MODE_CONTROL_BY_APP
のいずれかを指定します。
これらの値以外は不正な値であるとみなされます。resources
- 3D サウンドの制御に使用するリソース数を指定します。
UIException
- サラウンド機能
が明示的に有効に設定されている場合に発生します(ILLEGAL_STATE)。
UIException
- 既に
3D サウンドの制御が有効化されている場合に発生します(ILLEGAL_STATE)。
UIException
- オーディオ・プレゼンタの再生中に
3D 制御の有効化を行おうとした場合に発生します(ILLEGAL_STATE)。
IllegalArgumentException
- 引数 mode に不正な値が指定された場合に発生します。
IllegalArgumentException
- 引数 resources に 0 以下の値が指定された場合に発生します。
UIException
- 3D サウンドの制御に使用するリソースを確保できなかった場合に発生します(NO_RESOURCES)。
public void enable(int mode)
3D サウンドの制御を有効化します。
enable(int, int)
メソッドのコンビニエンスメソッドで、
3D サウンドの制御のモードに応じたリソース数を確保して
3D サウンドの制御を有効化します。
MODE_CONTROL_BY_DATA
が指定された場合は、
オーディオ・プレゼンタに設定されているサウンドデータから
3D サウンドの制御に必要なリソース数
を取り出して、
その数だけのリソースを確保します。
MODE_CONTROL_BY_DATA
が指定された場合は、
サウンドデータが必要とするリソース数
と
未使用状態のリソース数
のうち少ない方の数だけリソースを確保します。
ただし、確保するリソース数が 0 以下の場合は 3D サウンドの制御を有効化しません。
MODE_CONTROL_BY_DATA
が指定された場合に、
オーディオ・プレゼンタにサウンドデータが設定されていない場合は例外が発生します。
MODE_CONTROL_BY_APP
が指定された場合は、
1 つのリソースを確保します。
具体的には、以下の処理を行うことと同等です。 また、以下の処理を行う過程で発生した例外はそのままスローされます。
int resources = 0;
switch (mode) {
case MODE_CONTROL_BY_DATA:
try {
resources = Integer.parseInt(audiopresenter.getMediaResource().getProperty(MediaSound.AUDIO_3D_RESOURCES));
} catch (NumberFormatException nfe) {
}
int freeResources = Audio3D.getFreeResources(); // [DoJa-4.1 (902i) 以降]
if (resources > freeResources) { // [DoJa-4.1 (902i) 以降]
resources = freeResources; // [DoJa-4.1 (902i) 以降]
} // [DoJa-4.1 (902i) 以降]
if (resources <= 0) { // [DoJa-4.1 (902i) 以降]
return; // [DoJa-4.1 (902i) 以降]
} // [DoJa-4.1 (902i) 以降]
break;
case MODE_CONTROL_BY_APP:
resources = 1;
break;
}
enable(mode, resources);
mode
- 3D サウンドの制御のモードを指定します。
MODE_CONTROL_BY_DATA
または
MODE_CONTROL_BY_APP
のいずれかを指定します。
これらの値以外は不正な値であるとみなされます。
NullPointerException
- 引数 mode に MODE_CONTROL_BY_DATA が指定された場合に、
オーディオプレゼンタにメディアサウンドが設定されていなかった場合に発生します。
UIException
- 引数 mode に MODE_CONTROL_BY_DATA が指定された場合に、
オーディオプレゼンタに設定されているメディアサウンドが
use 状態でない場合に発生します(ILLEGAL_STATE)。
UIException
- サラウンド機能
が明示的に有効に設定されている場合に発生します(ILLEGAL_STATE)。
UIException
- 既に
3D サウンドの制御が有効化されている場合に発生します(ILLEGAL_STATE)。
UIException
- オーディオ・プレゼンタの再生中に
3D 制御の有効化を行おうとした場合に発生します(ILLEGAL_STATE)。
IllegalArgumentException
- 引数 mode に不正な値が指定された場合に発生します。
IllegalArgumentException
- [DoJa-4.0 (901i、901iS)]
引数 mode に MODE_CONTROL_BY_DATA が指定された場合に、
サウンドデータが必要とするリソース数が 0 以下の場合に発生します。
UIException
- 3D サウンドの制御に使用するリソースを確保できなかった場合に発生します(NO_RESOURCES)。
public void disable()
3D サウンドの制御を無効化します。 既に 3D サウンドの制御が無効化されている場合は何もしません。
このメソッドでは、enable(int, int)
で確保されたリソースを解放します。
UIException
- オーディオ・プレゼンタの再生中に
3D 制御の無効化を行おうとした場合に発生します(ILLEGAL_STATE)。
public boolean isEnabled()
3D サウンドの制御が有効化されているかどうかを取得します。
public void setListener(Audio- 3D 繧オ繧ヲ繝ウ繝峨