高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先



QTMTB 48 - SetMovieDefaultDataRef とは

(更新日: 97 年 3 月 14 日)

Q: SetMovieDefaultDataRef 関数のマニュアルを見つけることができません。この関数の働きと使い方を教えてください。

A: SetMovieDefaultDataRef は、Movies.h の中で次のように定義されています。

pascal OSErr SetMovieDefaultDataRef(Movie theMovie, Handle dataRef, OSTypedataRefType);
この関数を使用すると、データをムービーに追加するとき、そのデータが書き込まれる場所を制御することができます。たとえば、ムービーをファイルからロードした場合、デフォルトのデータ参照はムービーをロードしたファイルに初期化されます。次のサンプルプログラムでは、デフォルトのデータ参照がメモリ内のハンドルに設定されます。
     OSErr ConvertGeneralMIDIToSoundTrack (void)
     {
          OSErr                              err = noErr;
          StandardFileReply                  reply;
          short                              refNum;
          long                                logicalEOF;
          Handle                             dataHandle = nil, tempHandle = nil;
          Movie                              theMovie = nil, tempMovie = nil;

          // インポートの対象として General MIDI ファイルを指定する
          StandardGetFilePreview (nil, 0, nil, &reply);
          if (reply.sfGood)
          {
               // データフォークを開き、すべてのデータをハンドルの中に吸い上げる
               err = FSpOpenDF (&reply.sfFile, fsRdPerm, &refNum);
               err = GetEOF (refNum, &logicalEOF);
               dataHandle = NewHandleClear (logicalEOF);
               HLock (dataHandle);
               err = FSRead (refNum, &logicalEOF, *dataHandle);
               HUnlock (dataHandle);
               FSClose (refNum);

               // メモリ内に新しいムービーを作成し、そのデフォルトのデータ参照を
               // ハンドルに設定する
               tempMovie = NewMovie (newMovieActive);
               tempHandle = NewHandleClear (4);
               SetMovieDefaultDataRef (tempMovie, tempHandle,
                    HandleDataHandlerSubType);
               DisposeHandle (tempHandle);

               // ハンドルに格納されたデータをムービーにペーストする
               err = PasteHandleIntoMovie (dataHandle, 'Midi', tempMovie, 0, nil);

               // ムービーをフラット化されたファイルに保存する
               StandardPutFile ("\pSave MIDI to:", "\pMIDI movie", &reply);
               if (reply.sfGood)
               {
                    theMovie = FlattenMovieData (tempMovie,
                         flattenAddMovieToDataFork, &reply.sfFile, 'TVOD',
                         smCurrentScript, createMovieFileDeleteCurFile);
               }
          }
          return err;
     }
この方法は、使用可能なメモリが十分にあり、ムービーをディスクに保存しようとしないかぎり正常に動作します。データをファイルに書き込むには、この関数を呼び出して、データ参照として目的のファイルに対するエイリアスを渡し、データ参照の型として rAliasType を渡します。
SetMovieDefaultDataRef (tempMovie, fileAlias, rAliasType);



--Mike Bitz
devsupport@apple.com

[ Technical Q&A's : Graphics & Media : QuickTime : QuickTime Movie Toolbox : QTMTB 48 ]