カクタスソフトウェア
カクタスソフトウェア
サウンド MIDI マルチメディア アプリケーション

IMediaSeeking

演奏位置の設定・取得のサービスを行います。

作成

    IMediaSeeking       *m_pMS;

    result = m_pGB->QueryInterface(IID_IMediaSeeking, (void **)&m_pMS);
    if (FAILED(result))         throw result;

リリース

    SAFE_RELEASE(m_pMS);

位置の設定

演奏位置の設定には、IMediaSeeking::SetPositions()関数を用います。引数にLONGLONGへのポインターで示される数値とDWORDで示されるフラグの組が2つあります。初めのCurrentで演奏開始位置を、次のStopで停止位置を指定します。

HRESULT SetPositions( 
    LONGLONG    *pCurrent,
    DWORD       dwCurrentFlags,
    LONGLONG    *pStop,
    DWORD       dwStopFlags);

必要に応じてパラメータをセットします。

Current Stop 動作
演奏開始位置を設定する(シーク)
演奏終了位置を設定する
演奏範囲を設定する

通常のシーク動作はCurrentのみ指定し、Stopは指定なしとします。指定なしとするには、ポインターをNULL、フラグをAM_SEEKING_NoPositioningとします。

フラグ 意味
AM_SEEKING_NoPositioning 指定なし
AM_SEEKING_AbsolutePositioning 絶対位置指定
AM_SEEKING_IncrementalPositioning StopはCurrentからの相対位置

コード例

演奏開始位置を設定します。

    REFERENCE_TIME current = シーク位置;

    HRESULT result = m_pMS->SetPositions(
        &current, AM_SEEKING_AbsolutePositioning,
        NULL,     AM_SEEKING_NoPositioning);

演奏停止位置を設定します。

    REFERENCE_TIME stop = 停止位置;

    HRESULT result = m_pMS->SetPositions(
        NULL,  AM_SEEKING_NoPositioning,
        &stop, AM_SEEKING_AbsolutePositioning);
いったん停止位置を設定すると、再度指定するまで設定は有効です。曲の途中に停止位置を設定するとそれ以降は再生できなくなるので注意してください。再度、曲の最後まで演奏するには、曲の長さを停止位置として設定します。

停止位置を解除(再設定)します。

    REFERENCE_TIME duration;
    result = m_pMS->GetDuration(&duration);
    if (FAILED(result))         throw result;
    result = m_pMS->SetPositions(
        NULL, AM_SEEKING_NoPositioning, &duration, AM_SEEKING_AbsolutePositioning);
    if (FAILED(result))         throw result;

演奏範囲を指定します。例では終了位置を相対位置で表現していますが、絶対時刻で指定しても構いません。

    REFERENCE_TIME current = 開始位置;
    REFERENCE_TIME duration = 演奏時間;

    HRESULT result = m_pMS->SetPositions(
        &current,  AM_SEEKING_AbsolutePositioning,
        &duration, AM_SEEKING_IncrementalPositioning);

位置の取得

現在の演奏位置を取得します。

    REFERENCE_TIME current;
    HRESULT result = m_pMS->GetCurrentPosition(&current);
    if (FAILED(result))         throw result;

停止位置を取得します。

    REFERENCE_TIME stop;
    HRESULT result = m_pMS->GetStopPosition(&stop);
    if (FAILED(result))         throw result;

曲の長さを取得します。

    REFERENCE_TIME duration;
    HRESULT result = m_pMS->GetDuration(&duration);
    if (FAILED(result))         throw result;

時刻の単位

デフォルトで時刻の表現にはREFERENCE_TIMEを用います。分解能は100nSecです。REFERENCE_TIMEは以下の様に定義されています。

typedef LONGLONG REFERENCE_TIME;
秒をREFERENCE_TIMEに変換するには10,000,000倍します。

特にウェーブファイルの場合、位置の指定や曲の長さをサンプル数を用いて表現することができます。以下のコマンドを実行すると、以降すべての位置情報はサンプル数で表現されます。

    HRESULT result = m_pMS->SetTimeFormat(&TIME_FORMAT_SAMPLE);
    if (FAILED(result))         throw result;
「wma」、「mp3」などの圧縮ファイルではREFERENCE_TIMEしか利用できません。

ドキュメントの先頭へ

カクタスソフトウェア 技術協力 資料室 資料室の広場 SourceForge.jp お問い合わせ