BOOL __cdecl GetInfo(char *filename, int audioDataOffset, TrackInfo *trackInfo) { BYTE module[ASAPInfo_MAX_MODULE_LENGTH]; int module_len; if (!loadModule(filename, module, &module_len)) return FALSE; ASAPInfo *info = ASAPInfo_New(); if (info == NULL) return FALSE; if (!ASAPInfo_Load(info, filename, module, module_len)) { ASAPInfo_Delete(info); return FALSE; } strcpy(trackInfo->suggestedTitle, ASAPInfo_GetTitle(info)); trackInfo->fileSize = module_len; trackInfo->seekable = TRUE; trackInfo->hasEqualizer = FALSE; int duration = getSongDuration(info, ASAPInfo_GetDefaultSong(info)); trackInfo->playingTime = duration >= 0 ? duration : -1; trackInfo->bitRate = 0; trackInfo->sampleRate = ASAP_SAMPLE_RATE; trackInfo->numChannels = ASAPInfo_GetChannels(info); trackInfo->bitResolution = BITS_PER_SAMPLE; strcpy(trackInfo->fileTypeDescription, "8-bit Atari music"); ASAPInfo_Delete(info); return TRUE; }
static Tuple *probe_for_tuple(const char *filename, VFSFile *file) { int song = -1; unsigned char module[ASAPInfo_MAX_MODULE_LENGTH]; int module_len; ASAPInfo *info = NULL; Tuple *tuple = NULL; int songs; int duration; int year; #if _AUD_PLUGIN_VERSION >= 10 char *real_filename = filename_split_subtune(filename, &song); if (real_filename != NULL) filename = real_filename; #endif module_len = load_module(filename, file, module); if (module_len > 0) { info = ASAPInfo_New(); if (info != NULL && ASAPInfo_Load(info, filename, module, module_len)) tuple = tuple_new_from_filename(filename); } #if _AUD_PLUGIN_VERSION >= 10 g_free(real_filename); #endif if (tuple == NULL) { ASAPInfo_Delete(info); return NULL; } tuple_set_nonblank(tuple, FIELD_ARTIST, ASAPInfo_GetAuthor(info)); tuple_set_nonblank(tuple, FIELD_TITLE, ASAPInfo_GetTitleOrFilename(info)); tuple_set_nonblank(tuple, FIELD_DATE, ASAPInfo_GetDate(info)); tuple_set_str(tuple, FIELD_CODEC, NULL, "ASAP"); songs = ASAPInfo_GetSongs(info); if (song > 0) { tuple_set_int(tuple, FIELD_SUBSONG_ID, NULL, song); tuple_set_int(tuple, FIELD_SUBSONG_NUM, NULL, songs); song--; } else { if (songs > 1) { #if _AUD_PLUGIN_VERSION >= 37 tuple_set_subtunes(tuple, songs, NULL); #else tuple->nsubtunes = songs; #endif } song = ASAPInfo_GetDefaultSong(info); } duration = ASAPInfo_GetDuration(info, song); if (duration > 0) tuple_set_int(tuple, FIELD_LENGTH, NULL, duration); year = ASAPInfo_GetYear(info); if (year > 0) tuple_set_int(tuple, FIELD_YEAR, NULL, year); ASAPInfo_Delete(info); return tuple; }
static void expandPlaylistSongs(void) { static BOOL processing = FALSE; HWND playlistWnd; ASAPInfo *info; HWND progressWnd; int index; if (processing) return; playlistWnd = (HWND) SendMessage(mod.hMainWindow, WM_WA_IPC, IPC_GETWND_PE, IPC_GETWND); if (playlistWnd == NULL) return; processing = TRUE; info = ASAPInfo_New(); playlistLength = SendMessage(mod.hMainWindow, WM_WA_IPC, 0, IPC_GETLISTLENGTH); progressWnd = CreateDialog(mod.hDllInstance, MAKEINTRESOURCE(IDD_PROGRESS), mod.hMainWindow, progressDialogProc); index = playlistLength; while (--index >= 0) { if ((index & 15) == 0) SendDlgItemMessage(progressWnd, IDC_PROGRESS, PBM_SETPOS, playlistLength - index, 0); expandFileSongs(playlistWnd, index, info); } DestroyWindow(progressWnd); ASAPInfo_Delete(info); processing = FALSE; }
static void asap_get_song_info(char *filename, char **title, int *length) { ASAPInfo *info = asap_get_info(filename); if (info == NULL) return; *title = asap_get_title(filename, info); *length = ASAPInfo_GetDuration(info, ASAPInfo_GetDefaultSong(info)); ASAPInfo_Delete(info); }
static void closeInfoDialog(void) { DestroyWindow(infoDialog); infoDialog = NULL; ASAPInfo_Delete(edited_info); edited_info = NULL; ASTIL_Delete(astil); astil = NULL; }
static ASAPInfo *asap_get_info(const char *filename) { ASAPInfo *info; if (!asap_load_file(filename)) return NULL; info = ASAPInfo_New(); if (info == NULL) return NULL; if (!ASAPInfo_Load(info, filename, module, module_len)) { ASAPInfo_Delete(info); return NULL; } return info; }
static void asap_file_info_box(char *filename) { ASAPInfo *info = asap_get_info(filename); char s[3 * ASAPInfo_MAX_TEXT_LENGTH + 100]; char *p; if (info == NULL) return; p = asap_stpcpy(s, "Author: "); p = asap_stpcpy(p, ASAPInfo_GetAuthor(info)); p = asap_stpcpy(p, "\nName: "); p = asap_stpcpy(p, ASAPInfo_GetTitle(info)); p = asap_stpcpy(p, "\nDate: "); p = asap_stpcpy(p, ASAPInfo_GetDate(info)); *p = '\0'; ASAPInfo_Delete(info); asap_show_message("File information", s); }
static gboolean update_song_tuple(const Tuple * tuple, VFSFile *file) { #if _AUD_PLUGIN_VERSION < 38 #define vfs_get_filename(file) g_filename_from_uri(file->uri, NULL, NULL) #define tuple_get_str tuple_get_string #define str_unref(s) const char *s; #else char *s; #endif /* read file */ const char *filename = vfs_get_filename(file); unsigned char module[ASAPInfo_MAX_MODULE_LENGTH]; int module_len = load_module(filename, file, module); ASAPInfo *info; int year; ByteWriter bw; gboolean ok; if (module_len <= 0) return FALSE; info = ASAPInfo_New(); if (info == NULL) return FALSE; if (!ASAPInfo_Load(info, filename, module, module_len)) { ASAPInfo_Delete(info); return FALSE; } /* apply new tags */ s = tuple_get_str(tuple, FIELD_ARTIST, NULL); if (s != NULL) { if (!ASAPInfo_SetAuthor(info, s)) { str_unref(s); ASAPInfo_Delete(info); return FALSE; } str_unref(s); } else ASAPInfo_SetAuthor(info, ""); s = tuple_get_str(tuple, FIELD_TITLE, NULL); if (s != NULL) { if (!ASAPInfo_SetTitle(info, s)) { str_unref(s); ASAPInfo_Delete(info); return FALSE; } str_unref(s); } else ASAPInfo_SetTitle(info, ""); year = tuple_get_int(tuple, FIELD_YEAR, NULL); if (year == 0) year = -1; /* check if year changed so that we don't lose other date parts */ if (year != ASAPInfo_GetYear(info)) { if (year <= 0) ASAPInfo_SetDate(info, ""); else { char d[16]; sprintf(d, "%d", year); ASAPInfo_SetDate(info, d); } } /* write file */ vfs_rewind(file); bw.obj = file; bw.func = write_byte; ok = ASAPWriter_Write(filename, bw, info, module, module_len, TRUE) && vfs_ftruncate(file, vfs_ftell(file)) == 0; ASAPInfo_Delete(info); return ok; }