/** * Load a voice file to a malloc'd buffer. * @param filename The name of the file to load. * @return Where the file is loaded. */ static void *Sound_LoadVoc(const char *filename, uint32 *retFileSize) { uint32 fileSize; void *res; if (filename == NULL) return NULL; if (!File_Exists_GetSize(filename, &fileSize)) return NULL; fileSize += 1; fileSize &= 0xFFFFFFFE; *retFileSize = fileSize; res = malloc(fileSize); Driver_Voice_LoadFile(filename, res, fileSize); return res; }
/** * ??. * @param filename The name of the file to load. * @return Where the file is loaded. */ void *Sound_Unknown0823(const char *filename, uint32 *retFileSize) { uint8 fileIndex; uint32 fileSize; void *res; if (filename == NULL || !File_Exists(filename)) return NULL; fileIndex = File_Open(filename, 1); fileSize = File_GetSize(fileIndex); File_Close(fileIndex); fileSize += 1; fileSize &= 0xFFFFFFFE; *retFileSize = fileSize; res = malloc(fileSize); Driver_Voice_LoadFile(filename, res, fileSize); return res; }
/** * Start playing a sound sample. * @param index Sample to play. */ void Sound_StartSound(uint16 index) { if (index == 0xFFFF || g_gameConfig.sounds == 0 || (int16)g_table_voices[index].variable_04 < (int16)s_variable_4060) return; s_variable_4060 = g_table_voices[index].variable_04; if (g_variable_3E54[index] != NULL) { Driver_Voice_Play(g_variable_3E54[index], 0xFF); } else { char filenameBuffer[16]; const char *filename; filename = g_table_voices[index].string; if (filename[0] == '?') { snprintf(filenameBuffer, sizeof(filenameBuffer), filename + 1, g_playerHouseID < HOUSE_MAX ? g_table_houseInfo[g_playerHouseID].prefixChar : ' '); Driver_Voice_LoadFile(filenameBuffer, g_readBuffer, g_readBufferSize); Driver_Voice_Play(g_readBuffer, 0xFF); } } }