BOOL VorbisfileUser::open(char * filename) { ov_callbacks oc ; oc.read_func = readFunc ; oc.seek_func = seekFunc ; oc.close_func = closeFunc ; oc.tell_func = tellFunc ; tmpFilename = filename ; srcFile = CreateFile(tmpFilename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL); if(srcFile == INVALID_HANDLE_VALUE) { int length ; length = lstrlen(tmpFilename) + 34 ; char *mes ; mes = new char[length] ; wsprintf(mes, "%sを開くことが出来ませんでした。", tmpFilename) ; MessageBox(NULL, mes, "VorbisfileUser class error", MB_OK|MB_ICONEXCLAMATION) ; delete [] mes ; return FALSE ; } filesize = GetFileSize(srcFile, NULL) ; int ans ; ans = ov_open_callbacks((LPVOID)this, &ovFile, NULL, 0, oc) ; if(ans == OV_EREAD) { MessageBox(NULL, "メディアからの読み込みでエラーが発生しました", "VorbisfileUser class error", MB_OK|MB_ICONEXCLAMATION) ; return FALSE ; } else if(ans == OV_ENOTVORBIS) { MessageBox(NULL, "ビットストリームが有効なデータではありません", "VorbisfileUser class error", MB_OK|MB_ICONEXCLAMATION) ; return FALSE ; } else if(ans == OV_EVERSION) { MessageBox(NULL, "Vorbisのバージョンエラー", "VorbisfileUser class error", MB_OK|MB_ICONEXCLAMATION) ; return FALSE ; } else if(ans == OV_EBADHEADER) { MessageBox(NULL, "Vorbisのヘッダエラー", "VorbisfileUser class error", MB_OK|MB_ICONEXCLAMATION) ; return FALSE ; } else if(ans == OV_EFAULT) { MessageBox(NULL, "Vorbis/Vorbisfileライブラリの内部エラー", "VorbisfileUser class error", MB_OK|MB_ICONEXCLAMATION) ; return FALSE ; } info = ov_info(&ovFile, -1) ; if(info == NULL) { MessageBox(NULL, "ov_infoが失敗しました", "VorbisfileUser class error", MB_OK|MB_ICONEXCLAMATION) ; ov_clear(&ovFile) ; return FALSE ; } pcmLeft = ov_pcm_total(&ovFile, -1) * info->channels * 2 ; if(pcmLeft == OV_EINVAL) { MessageBox(NULL, "ov_pcm_totalが失敗しました", "VorbisfileUser class error", MB_OK|MB_ICONEXCLAMATION) ; ov_clear(&ovFile) ; info = NULL ; return FALSE ; } currentOVSection = 0 ; return TRUE ; }