|
|
|||||||||
|
|||||||||
|
|
QTMTB 48 - SetMovieDefaultDataRef とは(更新日: 97 年 3 月 14 日)
Q:
A: 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 ] |
|