![]() ![]() ![]()
|
BREW C++ ライブラリ & GUI フレームワーク : SophiaFramework 3.0 |
![]() |
Tip |
|---|---|
IMedia インターフェイスは抽象インターフェイスであり、 再生するメディアのフォーマットおよび実装により、 実際にサポートされている API やパラメータは異なります。 現在サポートされている API やパラメータに関する詳細な情報はありません。 | |
SFBMedia 派生クラスのオブジェクトを作成し、 メディアを再生します。
#include <SophiaFramework.hpp>
#include "MediaSample.bid"
//
// MediaSample アプリケーション クラス
//
SFMTYPEDEFCLASS(MediaSample)
class MediaSample : public SFRApplication
{
private:
SFBMediaSmp _media;
AEEMediaData _mdata;
public:
static SFCInvokerPtr ructorConst() { return new MediaSample; }
private:
MediaSample(Void);
// コピー操作を防ぐために隠蔽します。
MediaSample(MediaSampleConstRef);
MediaSampleConstRef operator = (ConstMediaSampleRef);
// アプリ開始ハンドラ
Void OnAppStart(Void);
static Bool OnAppStartEntry(SFXEventConstRef event, VoidPtr data)
{ MediaSamplePtr(data)->OnAppStart(); return true; }
// アプリ終了ハンドラ
Void OnAppStop(Void);
static Bool OnAppStopEntry(SFXEventConstRef event, VoidPtr data)
{ MediaSamplePtr(data)->OnAppStop(); return true; }
};
// BREW アプリケーションの起動コードです。
SFCInvokerSPP SFCApplet::Boot(AEECLSID id)
{
if (id == AEECLSID_MEDIASAMPLE)
{
return MediaSample::ructorConst;
}
else
{
return null;
}
}
// コンストラクタ
MediaSample::MediaSample(Void)
{
// イベント ハンドラを登録します。
RegisterHandler(SFEVT_APP_START, HANDLER_BEFORE, OnAppStartEntry, this);
RegisterHandler(SFEVT_APP_STOP, HANDLER_BEFORE, OnAppStopEntry, this);
// メディア データを初期化します。
_mdata.pData = null;
}
// アプリ開始ハンドラ
Void MediaSample::OnAppStart(Void)
{
// SFBMedia 派生オブジェクト (SFBMediaMIDI) を使用してメディアを再生します。
SFBShellSmp shell = SFBShell::GetInstance();
const char* filename = "sample.mid";
_media = SFBMediaMIDI::NewInstance();
if (_media != null) {
// メディアデータを設定します。
_mdata.clsData = MMD_FILE_NAME;
_mdata.pData = STRDUP(filename);
_mdata.dwSize = 0;
_media->SetMediaData(&_mdata);
// メディアを再生します。
_media->Play();
}
}
// アプリ終了ハンドラ
Void MediaSample::OnAppStop(Void)
{
// メディア データの破棄
if (_mdata.pData != null) {
FREE(_mdata.pData);
}
}
| コールバックの不具合 | |
| バグ | BREW エミュレータ 2.0.1.5 |
BREW SDK 上、IMEDIA_SetMuteCtl や IMEDIA_SetAudioDevice を行った場合、 コールバック時に渡される MM_CMD_SETMEDIAPARM の値が MM_PARM_VOLUME で渡される不具合があります。
| サスペンド時のオブジェクトのリリースについて | |
| バグ | A5304T |
SMAF 再生中、他のアプリを起動しようとすると (一発起動キー or ISHELL_StartApplet)、 再生中のアプリケーションに対して EVT_APP_SUSPEND がかかります。このとき、 再生をストップして IMEDIA オブジェクトを解放するのが正しい動作ですが、 SMAF 再生エンジンの不具合により、この操作 (オブジェクトの解放)を行うと端末にリセットがかかることがあります。 これに対処するには、以下のようにコーディングしてください。
基本的なシーケンスは以下の通りです。
EVT_APP_SUSPENDを受信。
イベント ハンドラ内で、IMEDIA_Stop をコール。
イベント ハンドラでは true を返してサスペンドする。
IMEDIA_Stop のコールバックが呼ばれたら、このコールバック内で IMEDIA_Release をコールして IMedia オブジェクトを解放する。
EVT_APP_SUSPEND で直ちに IMedia オブジェクトを解放するのではなく、 IMEDIA_Stop のコールバック関数内で解放を行うのがポイントです。
以下に、簡単なサンプルを示します。
// サスペンド時のイベントハンドラ
case EVT_APP_SUSPEND:
if (pMe->pMedia != null)
{
pMe->bSuspend = true;
IMEDIA_Stop(pMe->pMedia);
}
return true;
// IMEDIA_Stop のコールバック
MediaStopCB(....)
{
if (pMe->bSuspend)
{
// サスペンド処理中なら、IMedia オブジェクトを解放
IMEDIA_Release(pMe->pMedia);
pMe->bSuspend = false;
}
return;
}
| IMedia オブジェクトの解放処理について | |
| Tips | BREW SDK 2.1 以降の実機及び SDK |
2.1 において、IMedia の動作に以下の変更が加えられました。
これらの変更に伴い、「サスペンド時のオブジェクトのリリースについて」で述べたような、 「IMEDIA_Stop に対するコールバックを待った後にIMEDIA_Release()をコールする」解放処理は不要となるばかりでなく、 そのような処理自体行えなくなりました。
2.1 端末においては、IMedia を解放する必要がある場合は、 IMEDIA_Stop コール後、即 IMEDIA_Release をコールしてください。
| MMD_ISOURCE | |
| Tips | BREW SDK 2.1 以前の SDK |
MMD_ISOURCE は SDK でサポートされません。 実機でのサポートは実装依存になります。
| 各 API、パラメータのサポートについて | |
| Tips | すべて |
IMEDIA インタフェースは抽象インタフェースであり、 再生するメディアのフォーマット及び実装により、 実際にサポートされている API やパラメータは異なります。 現在サポートしている API/パラメータについての詳細なリストはありません。
| SetParam, GetParam | |
| ドキュメント エラー | BREW API リファレンス 2.0.1.5 |
IMEDIA_SetParam/GetParam の各パラメータの説明文中、 フォーマットが崩れて意味不明な個所があります。正しくは以下の通りです。
| nParamID | 操作 | 説明 | p1 | p2 |
|---|---|---|---|---|
| MM_PARM_AUDIO_PATH | 取得/設定 | メディアパス | MM_APATH_XXX | (p1=MM_APATH_LOCAL_RINGER の時のみ) SilentTimerMS。繰り返し再生時のトラック間の 無音時間を定める (ミリ秒単位)。O に設定された場合、繰り返しを行わない。 |
| MM_PARM_TICK_TIME | 取得/設定 | MM_TICK_UPDATE の周期 | デフォルトは 1000 (ミリ秒単位)。0 にセットすると、 MM_TICK_UPDATE イベントは発生しない。 |
| IMEDIA_SetTickTime | |
| バグ | BREW エミュレータ 2.0.1.5 |
この API は、SDK 上で正常に動作しません。
| MM_PARM_MUTE | |
| ドキュメントエラー | BREW API リファレンス 2.0.1.5 |
IMEDIA_GetMediaParm()/SetMediaParm() では、 このパラメータは「0 でミュート、1 でアンミュート」とありますが、これは誤りです。 IMEDIA_SetMuteCtl() の記述が正しく、「1 でミュート、0 でアンミュート」となります。
| パブリック関数 | |
|---|---|
| SFCError |
EnableChannelShare(
Bool enable
)
メディアの排他的な再生を有効/無効に設定します。
|
| SFCError |
EnableFrameCallback(
Bool enable
)
フレーム コールバックの設定を有効/無効にします。
|
| SFCError |
FastForward(
SInt32 time
)
現在位置から指定された時間だけ早送りします。
メディアは現在の状態を保持します。
|
| SFCError |
GetClassID(
AEECLSID* clsid
)
SFBMedia オブジェクトの Class ID を取得します。
|
| AEECLSID |
GetClassID( Void )
SFBMedia オブジェクトの Class ID を取得します。
|
| SFCError |
GetFrame(
SFBBitmapSmpPtr frame
)
現在のフレームを SFBBitmap オブジェクトとして取得します。
|
| SFCError |
GetMediaData(
AEEMediaData* data
)
メディア データを取得します。
|
| SFCError |
GetMediaParm(
SInt32 id
, SInt32Ptr param1
, SInt32Ptr param2
)
メディア パラメータを取得します。
|
| SFCError |
GetRect(
SFXRectanglePtr imgRect
, SFXRectanglePtr textRect
)
宛先の画像長方形とテキスト長方形を取得します。
|
| SInt32 |
GetState(
BoolPtr stateChanging
)
SFBMedia オブジェクトの現在の状態を返します。
|
| SFCError |
GetTotalTime( Void )
SFBMedia オブジェクトの合計再生時間を返します。
|
| SFCError |
GetVolume(
UInt16Ptr volume
)
現在の再生/記録のボリュームを取得します。
|
| UInt16 |
GetVolume( Void )
現在の再生/記録のボリュームを取得します。
|
| SFCError |
IsChannelShare(
BoolPtr enable
)
現在のチャンネル共有の設定を取得します。
|
| SFCError |
IsFrameCallback(
BoolPtr enable
)
現在のフレーム コールバックの設定を取得します。
|
| static SFBMediaSmp |
NewInstance( Void ) SFBMedia クラスのインスタンスを取得します。
|
| SFCError |
Pause( Void )
メディアの再生を一時停止します。
|
| SFCError |
Play( Void )
メディアの再生を開始します。
|
| SFCError |
Record( Void )
メディアの記録を開始します。
|
| SFCError |
RegisterNotify(
PFNMEDIANOTIFY notify
, VoidPtr data = null
)
コールバック通知関数を登録します。
|
| SFCError |
Resume( Void )
現在の位置からメディアの再生を再開します。
|
| SFCError |
Rewind(
SInt32 time
)
現在の位置から指定した時間だけメディアを巻き戻します。
メディアは現在の状態を保持します。
|
| SFCError |
Seek(
AEEMediaSeek seek
, SInt32 time
)
メディアの位置をシークします。
メディアは現在の状態を保持します。
|
| SFCError |
SeekFrame(
AEEMediaSeek seek
, SInt32 frames
)
シーク参照とフレーム数を基にしてメディアをシークします。
通常、このAPIはフレームを基にしてシークするビデオフォーマットに使用します。
メディアは現在の状態を保持します。
|
| SFCError |
SetAudioDevice(
AEESoundDevice device
)
SFBMedia オブジェクトで使用するオーディオデバイスを設定します。
|
| SFCError |
SetAudioPath(
SInt32 path
, UInt32 pause
)
メディアの再生/記録に使用するオーディオパスを設定します。
|
| SFCError |
SetMediaData(
AEEMediaData* data
)
メディアデータを設定し、メディアをレディ状態にします。
|
| SFCError |
SetMediaParm(
SInt32 id
, SInt32 param1
, SInt32 param2
)
メディア パラメータを設定します。
|
| SFCError |
SetMuteCtl(
Bool mute
)
現在のオーディオパスにミュートを設定/解除します。
|
| SFCError |
SetPan(
UInt16 pan
)
左右のチャネルの相対ボリューム (パン) を指定します。
|
| SFCError |
SetRect(
SFXRectanglePtr imgRect
, SFXRectanglePtr textRect
)
宛先の画像長方形とテキスト長方形を設定します。
|
| SFCError |
SetTickTime(
UInt32 tick
)
メディアの再生/記録時に、アプリケーションに送信される MM_TICK_UPDATE イベントの周期を設定します。
|
| SFCError |
SetVolume(
UInt16 volume
)
再生/記録のボリュームを設定します。
|
| SFCError |
Stop( Void )
メディアの再生/記録を停止します。
|
| SFCError |
QueryInterface(
AEECLSID clsid
, VoidHandle handle
)
(SFBQuery から継承)
QueryInterface( AEECLSID clsid , SFBBaseSmpPtr handle ) (SFBQuery から継承) このオブジェクトからの別の API を問い合わせます。
|
| SFBBaseSmp |
QueryInterface(
AEECLSID clsid
)
(SFBQuery から継承)
このオブジェクトからの別の API を問い合わせます。
|
| Void |
Self(
AEECLSID clsidReq
, SFBQuerySmpPtr clone
, AEECLSID clsidImp
)
(SFBQuery から継承)
オブジェクトを単一インタフェースで実装する際に使用します。
|
| SFBQuerySmp |
Self(
AEECLSID clsidReq
, AEECLSID clsidImp
)
(SFBQuery から継承)
オブジェクトを単一インタフェースで実装する際に使用します。
|
この関数は、BREW 2.1 以降でのみ使用可能です。
BREW API IMEDIA_EnableChannelShare
この関数は、BREW 2.1 以降でのみ使用可能です。
BREW API IMEDIA_EnableFrameCallback
[ public ] SFCError GetClassID( AEECLSID* clsid // クラス ID を受け取る領域を指すポインタ );
[ public ] AEECLSID GetClassID(Void);
[ public ] SFCError GetFrame( SFBBitmapSmpPtr frame // SFBBitmap オブジェクトを受け取る領域を指すポインタ );
この関数は、BREW 2.1 以降でのみ使用可能です。
BREW API IMEDIA_EnableFrameCallback
[ public ] SFCError GetMediaData( AEEMediaData* data // メディア データを受け取る領域を指すポインタ );
BREW API IMEDIA_GetMediaData | AEEMediaData | SFBMedia::GetMediaParm | SFBMedia::GetMediaData | SFBMedia::SetMediaParm
[ public ] SFCError GetMediaParm( SInt32 id // パラメータ ID SInt32Ptr param1 // 第 1 パラメータを受け取る領域を指すポインタ SInt32Ptr param2 // 第 2 パラメータを受け取る領域を指すポインタ );
[ public ] SFCError GetRect( SFXRectanglePtr imgRect // 宛先の画像長方形を受け取る領域を指すポインタ SFXRectanglePtr textRect // 宛先のテキスト長方形を受け取る領域を指すポインタ );
BREW API IMEDIA_GetRect | SFBMedia::Play | SFBMedia::Record | SFBMedia::SetMediaParm | SFBMedia::GetMediaParm
[ public ] SFCError GetTotalTime(Void);
[ public ] SFCError GetVolume( UInt16Ptr volume // ボリュームを受け取る領域を指すポインタ );
[ public ] UInt16 GetVolume(Void);
BREW API IMEDIA_GetVolume | SFBMedia::SetAudioPath | SFBMedia::SetMuteCtl | SFBMedia::SetVolume | SFBMedia::SetPan | SFBMedia::SetMediaParm | SFBMedia::GetMediaParm | SFBMedia::SetAudioDevice
この関数は、BREW 2.1 以降でのみ使用可能です。
BREW API IMEDIA_IsChannelShare
この関数は、BREW 2.1 以降でのみ使用可能です。
BREW API IMEDIA_IsFrameCallback
[ public, static ] SFBMediaSmp NewInstance(Void);
[ public ] SFCError Pause(Void);
[ public ] SFCError Play(Void);
BREW API IMEDIA_Play | SFBMedia::FastForward | SFBMedia::Pause | SFBMedia::Record | SFBMedia::Resume | SFBMedia::Rewind | SFBMedia::Seek | SFBMedia::Stop | AEEMediaCmdNotify
[ public ] SFCError Record(Void);
BREW API IMEDIA_Record | SFBMedia::FastForward | SFBMedia::Pause | SFBMedia::Play | SFBMedia::Resume | SFBMedia::Rewind | SFBMedia::Seek | SFBMedia::Stop | AEEMediaCmdNotify | AEEMediaData
[ public ] SFCError RegisterNotify( PFNMEDIANOTIFY notify // コールバック関数 VoidPtr data = null // ユーザーデータ );
[ public ] SFCError Resume(Void);
[←] キーが押された場合に、サウンドを 10 秒戻します。
// クラスのメンバ変数として宣言します。
SFBMediaSmp _media;
AEEMediaData _mdata;
----------------------------------------------------------------------
// 関数内のローカル変数として宣言します。
SFBShellSmp shell = SFBShell::GetInstance();
const char* filename = "test.qcp";
// IMediaQCP インターフェイスを取得して、メディアデータを設定します。
_media = SFBMediaQCP::NewInstance();
if (_media != null) {
// AEEMediaData 構造体にメディアデータを設定します。
_mdata.clsData = MMD_FILE_NAME;
_mdata.pData = STRDUP(filename);
_mdata.dwSize = 0;
// メディアデータを設定します。
_media->SetMediaData(&_mdata);
// オーディオ デバイスを設定します。
_media->SetAudioDevice(AEE_SOUND_DEVICE_CURRENT);
// サウンドを再生します。
_media->Play();
}
----------------------------------------------------------------------
// [←] キーが押された場合に、
// サウンドを 10 秒戻します。
if (key == AVK_LEFT) {
if (_media != null) {
// 巻き戻しをします。(10 秒)
_media->Rewind(10000);
}
}
BREW API IMEDIA_Resume | SFBMedia::FastForward | SFBMedia::Seek | SFBMedia::Play | AEEMediaCmdNotify
[ public ] SFCError Seek( AEEMediaSeek seek // シーク参照 SInt32 time // 時間 (ミリ秒) );
[ public ] SFCError SeekFrame( AEEMediaSeek seek // シーク参照 SInt32 frames // フレーム数 );
この関数は、BREW 2.1 以降でのみ使用可能です。
BREW API IMEDIA_SeekFrame
[ public ] SFCError SetAudioDevice( AEESoundDevice device // オーディオデバイス );
BREW API IMEDIA_SetAudioDevice | AEESoundDevice | SFBMedia::SetAudioPath | SFBMedia::SetMuteCtl | SFBMedia::SetVolume | SFBMedia::GetVolume | SFBMedia::SetPan | SFBMedia::SetMediaParm | SFBMedia::GetMediaParm
BREW API IMEDIA_SetAudioPath | SFBMedia::SetMuteCtl | SFBMedia::SetVolume | SFBMedia::GetVolume | SFBMedia::SetPan | SFBMedia::SetMediaParm | SFBMedia::GetMediaParm | SFBMedia::SetAudioDevice
[ public ] SFCError SetMediaData( AEEMediaData* data // メディアデータ );
BREW API IMEDIA_SetMediaData | SFBMedia::GetMediaData | SFBMedia::GetMediaParm | SFBMedia::SetMediaParm
[ public ] SFCError SetMediaParm( SInt32 id // パラメータ ID SInt32 param1 // 第 1 パラメータ SInt32 param2 // 第 2 パラメータ );
BREW API IMEDIA_SetMuteCtl | SFBMedia::SetAudioPath | SFBMedia::SetVolume | SFBMedia::GetVolume | SFBMedia::SetPan | SFBMedia::SetMediaParm | SFBMedia::GetMediaParm | SFBMedia::SetAudioDevice
BREW API IMEDIA_SetPan | SFBMedia::SetAudioPath | SFBMedia::SetMuteCtl | SFBMedia::SetVolume | SFBMedia::GetVolume | SFBMedia::SetMediaParm | SFBMedia::GetMediaParm | SFBMedia::SetAudioDevice
[ public ] SFCError SetRect( SFXRectanglePtr imgRect // 宛先の画像長方形 SFXRectanglePtr textRect // 宛先のテキスト長方形 );
BREW API IMEDIA_SetRect | AEERect | SFBMedia::Play | SFBMedia::Record | SFBMedia::SetMediaParm | SFBMedia::GetMediaParm
BREW API IMEDIA_SetTickTime | SFBMedia::Play | SFBMedia::Record | SFBMedia::SetMediaParm | SFBMedia::GetMediaParm
BREW API IMEDIA_SetVolume | SFBMedia::SetAudioDevice | SFBMedia::SetAudioPath | SFBMedia::SetMuteCtl | SFBMedia::GetVolume | SFBMedia::SetPan | SFBMedia::SetMediaParm | SFBMedia::GetMediaParm
[ public ] SFCError Stop(Void);
|
Copyright (C) 2002 - 2009 Sophia Cradle, Inc. All Rights Reserved. |
![]() ![]() ![]()
|