0

AudioToolboxのExtendedAudioFile APIを使用して、OSXでCAFファイルを読み取ろうとしています。

ファイルを開くことは正常に機能しますが、UUIDチャンクにアクセスする必要があり、その方法(またはファイルのヘッダーチャンクにアクセスする方法)に関するリファレンスが見つかりません。

確かに、自分でファイルを解析せずにこれを行う方法が必要です。

PS:私はすでにlibsndfileでこれを行うことができますが、OSXに付属するコンポーネントのみでこれを行う方法を見つけたいと思います。

ExtAudioFileGetProperty()'uuid'に設定して呼び出しを試みましExtAudioFilePropertyIDたが、これは機能しないようです。

4

1 に答える 1

1

トリックは、UUIDチャンクなどの低レベルの機能にアクセスするためにExtAudioAPIを使用しないことであることが判明しました。(ExtAudio APIを介してファイルにアクセスする必要がある場合は、AudioFileIDからExtAudioHandleを作成できます。)

結局、私はこのようなものを使用しました:

AudioFileID fileID;
ExtAudioFileRef extFile;

OSStatus err = AudioFileOpenURL((CFURLRef)inURL, kAudioFileReadPermission, 0, &fileID);
if(noErr!=err)return;
err = ExtAudioFileWrapAudioFileID (fileID, false, &extFile); // in case we *also* want to access the file via ExtAudio
if(noErr!=err)return;

for(index=0; ; index++) {
  UInt32 size=0;
  char*data=NULL;

  OSStatus err = AudioFileGetUserDataSize (fileID,'uuid',index,&size);
  if(noErr!=err)break;   // check whether we were able to read the chunksize
  if(0==size)continue;    // check whether there is some payload in the uuid chunk

  data=calloc(size, 1);
  if(!data)continue;
  err = AudioFileGetUserData (fileID, 'uuid', index, &size, data);
  if(noErr!=err){free(data); break;}   // check whether we were able to read the chunksize
  /* ... */
  free(data);
}
ExtAudioFileDispose(extFile);
AudioFileClose(fileID);
于 2012-06-19T07:19:25.990 に答える