1 #pragma once 2 3 /***************************************************************************************** 4 Platform 5 6 One of the following platforms should be defined (either in code or as a project setting): 7 PLATFORM_WINDOWS 8 PLATFORM_APPLE 9 PLATFORM_LINUX 10 *****************************************************************************************/ 11 #if !defined(PLATFORM_WINDOWS) && !defined(PLATFORM_APPLE) && !defined(PLATFORM_LINUX) 12 #pragma message("No platform set for MACLib, defaulting to Windows") 13 #define PLATFORM_WINDOWS 14 #endif 15 16 /***************************************************************************************** 17 Global includes 18 *****************************************************************************************/ 19 #include <stdint.h> 20 #include <stdlib.h> 21 #include <memory.h> 22 #include <stdio.h> 23 #include <math.h> 24 25 #if defined(PLATFORM_WINDOWS) 26 #include "WindowsEnvironment.h" 27 #include <windows.h> 28 #include <tchar.h> 29 #include <assert.h> 30 #else 31 #include <unistd.h> 32 #include <time.h> 33 #include <sys/time.h> 34 #include <sys/types.h> 35 #include <sys/stat.h> 36 #include <wchar.h> 37 #include "NoWindows.h" 38 #endif 39 #define ape_max(a,b) (((a) > (b)) ? (a) : (b)) 40 #define ape_min(a,b) (((a) < (b)) ? (a) : (b)) 41 42 #include "SmartPtr.h" 43 44 /***************************************************************************************** 45 Global compiler settings (useful for porting) 46 *****************************************************************************************/ 47 // assembly code (helps performance, but limits portability) 48 #ifndef PLATFORM_ARM 49 #define ENABLE_SSE_ASSEMBLY 50 #ifdef _MSC_VER // doesn't compile in gcc 51 #ifndef PLATFORM_x64 52 #define ENABLE_MMX_ASSEMBLY 53 #endif 54 #endif 55 #endif 56 57 // APE_BACKWARDS_COMPATIBILITY is only needed for decoding APE 3.92 or earlier files. It 58 // has not been possible to make these files for over 10 years, so it's unlikely 59 // that disabling APE_BACKWARDS_COMPATIBILITY would have any effect on a normal user. For 60 // porting or third party usage, it's probably best to not bother with APE_BACKWARDS_COMPATIBILITY. 61 // A future release of Monkey's Audio itself may remove support for these obsolete files. 62 //#if defined(PLATFORM_WINDOWS) 63 #define APE_BACKWARDS_COMPATIBILITY 64 //#endif 65 66 // compression modes 67 #define ENABLE_COMPRESSION_MODE_FAST 68 #define ENABLE_COMPRESSION_MODE_NORMAL 69 #define ENABLE_COMPRESSION_MODE_HIGH 70 #define ENABLE_COMPRESSION_MODE_EXTRA_HIGH 71 72 // 64 bit platform 73 #if __x86_64__ 74 #define PLATFORM_x64 75 #endif 76 77 /***************************************************************************************** 78 Global types 79 *****************************************************************************************/ 80 namespace APE 81 { 82 // integer types 83 #if defined(PLATFORM_x64) 84 typedef intptr_t int64; // native integer, can safely hold a pointer 85 typedef int32_t int32; 86 #else 87 typedef intptr_t int32; // native integer, can safely hold a pointer 88 typedef int64_t int64; 89 #endif 90 //typedef intptr_t intn; 91 //typedef uintptr_t uintn; 92 93 // From GlobalIntTypes.h. 94 #ifndef PLATFORM_WINDOWS 95 #include <stdint.h> 96 #endif 97 98 #if defined(PLATFORM_x64) 99 // DO NOT CHANGE THE FOLLOWING 6 LINES! They are necessary for building Media Center 64 bit on non-windows platforms! 100 #ifndef PLATFORM_WINDOWS 101 typedef long long intn; 102 typedef unsigned long long uintn; 103 #else 104 typedef int64_t intn; 105 typedef uint64_t uintn; 106 #endif 107 #else 108 typedef int32_t intn; 109 typedef uint32_t uintn; 110 #endif 111 112 typedef uint64_t uint64; 113 typedef uint32_t uint32; 114 typedef uint16_t uint16; 115 typedef int16_t int16; 116 typedef uint8_t uint8; 117 typedef int8_t int8; 118 119 // string types 120 typedef char str_ansi; 121 typedef unsigned char str_utf8; 122 typedef int16 str_utf16; 123 typedef wchar_t str_utfn; // could be UTF-16 or UTF-32 depending on platform 124 } 125 126 /***************************************************************************************** 127 Global macros 128 *****************************************************************************************/ 129 #if defined(PLATFORM_WINDOWS) 130 #define IO_USE_WIN_FILE_IO 131 #define IO_HEADER_FILE "WinFileIO.h" 132 #define IO_CLASS_NAME CWinFileIO 133 #define DLLEXPORT __declspec(dllexport) 134 #define SLEEP(MILLISECONDS) ::Sleep(MILLISECONDS) 135 #define MESSAGEBOX(PARENT, TEXT, CAPTION, TYPE) ::MessageBox(PARENT, TEXT, CAPTION, TYPE) 136 #define PUMP_MESSAGE_LOOP { MSG Msg; while (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE) != 0) { TranslateMessage(&Msg); DispatchMessage(&Msg); } } 137 #define ODS OutputDebugString 138 #define TICK_COUNT_TYPE unsigned long 139 #define TICK_COUNT_READ(VARIABLE) VARIABLE = GetTickCount() 140 #define TICK_COUNT_FREQ 1000 141 #if !defined(ASSERT) 142 #if defined(_DEBUG) 143 #define ASSERT(e) assert(e) 144 #else 145 #define ASSERT(e) 146 #endif 147 #endif 148 #else 149 #define IO_USE_STD_LIB_FILE_IO 150 #define IO_HEADER_FILE "StdLibFileIO.h" 151 #define IO_CLASS_NAME CStdLibFileIO 152 #define DLLEXPORT 153 #define SLEEP(MILLISECONDS) { struct timespec t; t.tv_sec = (MILLISECONDS) / 1000; t.tv_nsec = (MILLISECONDS) % 1000 * 1000000; nanosleep(&t, NULL); } 154 #define MESSAGEBOX(PARENT, TEXT, CAPTION, TYPE) 155 #define PUMP_MESSAGE_LOOP 156 #define ODS printf 157 #define TICK_COUNT_TYPE unsigned long long 158 #define TICK_COUNT_READ(VARIABLE) { struct timeval t; gettimeofday(&t, NULL); VARIABLE = t.tv_sec * 1000000LLU + t.tv_usec; } 159 #define TICK_COUNT_FREQ 1000000 160 #define ASSERT(e) 161 #endif 162 163 /***************************************************************************************** 164 WAVE format descriptor (binary compatible with Windows define, but in the APE namespace) 165 *****************************************************************************************/ 166 namespace APE 167 { 168 #pragma pack(push, 1) 169 typedef struct tWAVEFORMATEX 170 { 171 WORD wFormatTag; /* format type */ 172 WORD nChannels; /* number of channels (i.e. mono, stereo...) */ 173 uint32 nSamplesPerSec; /* sample rate */ 174 uint32 nAvgBytesPerSec; /* for buffer estimation */ 175 WORD nBlockAlign; /* block size of data */ 176 WORD wBitsPerSample; /* number of bits per sample of mono data */ 177 WORD cbSize; /* the count in bytes of the size of */ 178 /* extra information (after cbSize) */ 179 } WAVEFORMATEX, *PWAVEFORMATEX, NEAR *NPWAVEFORMATEX, FAR *LPWAVEFORMATEX; 180 #pragma pack(pop) 181 } 182 183 /***************************************************************************************** 184 Global defines 185 *****************************************************************************************/ 186 #define MAC_FILE_VERSION_NUMBER 3990 187 #define MAC_VERSION_STRING _T("4.33") 188 #define MAC_NAME _T("Monkey's Audio 4.33") 189 #define PLUGIN_NAME "Monkey's Audio Player v4.33" 190 #define MJ_PLUGIN_NAME _T("APE Plugin (v4.33)") 191 #define CONSOLE_NAME _T("--- Monkey's Audio Console Front End (v 4.33) (c) Matthew T. Ashland ---\n") 192 #define PLUGIN_ABOUT _T("Monkey's Audio Player v4.33\nCopyrighted (c) 2000-2018 by Matthew T. Ashland") 193 #define MAC_DLL_INTERFACE_VERSION_NUMBER 1000 194 #ifdef PLATFORM_WINDOWS 195 #define APE_FILENAME_SLASH '\\' 196 #else 197 #define APE_FILENAME_SLASH '/' 198 #endif 199 200 /***************************************************************************************** 201 Byte order 202 *****************************************************************************************/ 203 #ifdef __DragonFly__ 204 #include <machine/endian.h> 205 #else 206 #define __LITTLE_ENDIAN 1234 207 #define __BIG_ENDIAN 4321 208 #define __BYTE_ORDER __LITTLE_ENDIAN 209 #endif 210 211 /***************************************************************************************** 212 Macros 213 *****************************************************************************************/ 214 #define MB(TEST) MESSAGEBOX(NULL, TEST, _T("Information"), MB_OK); 215 #define MBN(NUMBER) { TCHAR cNumber[16]; _stprintf(cNumber, _T("%d"), NUMBER); MESSAGEBOX(NULL, cNumber, _T("Information"), MB_OK); } 216 217 #define SAFE_DELETE(POINTER) if (POINTER) { delete POINTER; POINTER = NULL; } 218 #define SAFE_ARRAY_DELETE(POINTER) if (POINTER) { delete [] POINTER; POINTER = NULL; } 219 #define SAFE_VOID_CLASS_DELETE(POINTER, Class) { Class *pClass = (Class *) POINTER; if (pClass) { delete pClass; POINTER = NULL; } } 220 #define SAFE_FILE_CLOSE(HANDLE) if (HANDLE != INVALID_HANDLE_VALUE) { CloseHandle(HANDLE); HANDLE = INVALID_HANDLE_VALUE; } 221 222 #define ODN(NUMBER) { TCHAR cNumber[16]; _stprintf(cNumber, _T("%d\n"), int(NUMBER)); ODS(cNumber); } 223 224 #define CATCH_ERRORS(CODE) try { CODE } catch(...) { } 225 226 #define RETURN_ON_ERROR(FUNCTION) { int nResult = FUNCTION; if (nResult != 0) { return nResult; } } 227 #define RETURN_VALUE_ON_ERROR(FUNCTION, VALUE) { int nResult = FUNCTION; if (nResult != 0) { return VALUE; } } 228 #define RETURN_ON_EXCEPTION(CODE, VALUE) { try { CODE } catch(...) { return VALUE; } } 229 230 #define THROW_ON_ERROR(CODE) { intn nResult = CODE; if (nResult != 0) throw(nResult); } 231 232 #define EXPAND_1_TIMES(CODE) CODE 233 #define EXPAND_2_TIMES(CODE) CODE CODE 234 #define EXPAND_3_TIMES(CODE) CODE CODE CODE 235 #define EXPAND_4_TIMES(CODE) CODE CODE CODE CODE 236 #define EXPAND_5_TIMES(CODE) CODE CODE CODE CODE CODE 237 #define EXPAND_6_TIMES(CODE) CODE CODE CODE CODE CODE CODE 238 #define EXPAND_7_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE 239 #define EXPAND_8_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE 240 #define EXPAND_9_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE 241 #define EXPAND_12_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE 242 #define EXPAND_14_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE 243 #define EXPAND_15_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE 244 #define EXPAND_16_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE 245 #define EXPAND_30_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE 246 #define EXPAND_31_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE 247 #define EXPAND_32_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE 248 #define EXPAND_64_TIMES(CODE) CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE CODE 249 #define EXPAND_N_TIMES(NUMBER, CODE) EXPAND_##NUMBER##_TIMES(CODE) 250 251 #define UNROLL_4_TIMES(MACRO) MACRO(0) MACRO(1) MACRO(2) MACRO(3) 252 #define UNROLL_8_TIMES(MACRO) MACRO(0) MACRO(1) MACRO(2) MACRO(3) MACRO(4) MACRO(5) MACRO(6) MACRO(7) 253 #define UNROLL_15_TIMES(MACRO) MACRO(0) MACRO(1) MACRO(2) MACRO(3) MACRO(4) MACRO(5) MACRO(6) MACRO(7) MACRO(8) MACRO(9) MACRO(10) MACRO(11) MACRO(12) MACRO(13) MACRO(14) 254 #define UNROLL_16_TIMES(MACRO) MACRO(0) MACRO(1) MACRO(2) MACRO(3) MACRO(4) MACRO(5) MACRO(6) MACRO(7) MACRO(8) MACRO(9) MACRO(10) MACRO(11) MACRO(12) MACRO(13) MACRO(14) MACRO(15) 255 #define UNROLL_64_TIMES(MACRO) MACRO(0) MACRO(1) MACRO(2) MACRO(3) MACRO(4) MACRO(5) MACRO(6) MACRO(7) MACRO(8) MACRO(9) MACRO(10) MACRO(11) MACRO(12) MACRO(13) MACRO(14) MACRO(15) MACRO(16) MACRO(17) MACRO(18) MACRO(19) MACRO(20) MACRO(21) MACRO(22) MACRO(23) MACRO(24) MACRO(25) MACRO(26) MACRO(27) MACRO(28) MACRO(29) MACRO(30) MACRO(31) MACRO(32) MACRO(33) MACRO(34) MACRO(35) MACRO(36) MACRO(37) MACRO(38) MACRO(39) MACRO(40) MACRO(41) MACRO(42) MACRO(43) MACRO(44) MACRO(45) MACRO(46) MACRO(47) MACRO(48) MACRO(49) MACRO(50) MACRO(51) MACRO(52) MACRO(53) MACRO(54) MACRO(55) MACRO(56) MACRO(57) MACRO(58) MACRO(59) MACRO(60) MACRO(61) MACRO(62) MACRO(63) 256 #define UNROLL_128_TIMES(MACRO) MACRO(0) MACRO(1) MACRO(2) MACRO(3) MACRO(4) MACRO(5) MACRO(6) MACRO(7) MACRO(8) MACRO(9) MACRO(10) MACRO(11) MACRO(12) MACRO(13) MACRO(14) MACRO(15) MACRO(16) MACRO(17) MACRO(18) MACRO(19) MACRO(20) MACRO(21) MACRO(22) MACRO(23) MACRO(24) MACRO(25) MACRO(26) MACRO(27) MACRO(28) MACRO(29) MACRO(30) MACRO(31) MACRO(32) MACRO(33) MACRO(34) MACRO(35) MACRO(36) MACRO(37) MACRO(38) MACRO(39) MACRO(40) MACRO(41) MACRO(42) MACRO(43) MACRO(44) MACRO(45) MACRO(46) MACRO(47) MACRO(48) MACRO(49) MACRO(50) MACRO(51) MACRO(52) MACRO(53) MACRO(54) MACRO(55) MACRO(56) MACRO(57) MACRO(58) MACRO(59) MACRO(60) MACRO(61) MACRO(62) MACRO(63) MACRO(64) MACRO(65) MACRO(66) MACRO(67) MACRO(68) MACRO(69) MACRO(70) MACRO(71) MACRO(72) MACRO(73) MACRO(74) MACRO(75) MACRO(76) MACRO(77) MACRO(78) MACRO(79) MACRO(80) MACRO(81) MACRO(82) MACRO(83) MACRO(84) MACRO(85) MACRO(86) MACRO(87) MACRO(88) MACRO(89) MACRO(90) MACRO(91) MACRO(92) MACRO(93) MACRO(94) MACRO(95) MACRO(96) MACRO(97) MACRO(98) MACRO(99) MACRO(100) MACRO(101) MACRO(102) MACRO(103) MACRO(104) MACRO(105) MACRO(106) MACRO(107) MACRO(108) MACRO(109) MACRO(110) MACRO(111) MACRO(112) MACRO(113) MACRO(114) MACRO(115) MACRO(116) MACRO(117) MACRO(118) MACRO(119) MACRO(120) MACRO(121) MACRO(122) MACRO(123) MACRO(124) MACRO(125) MACRO(126) MACRO(127) 257 #define UNROLL_256_TIMES(MACRO) MACRO(0) MACRO(1) MACRO(2) MACRO(3) MACRO(4) MACRO(5) MACRO(6) MACRO(7) MACRO(8) MACRO(9) MACRO(10) MACRO(11) MACRO(12) MACRO(13) MACRO(14) MACRO(15) MACRO(16) MACRO(17) MACRO(18) MACRO(19) MACRO(20) MACRO(21) MACRO(22) MACRO(23) MACRO(24) MACRO(25) MACRO(26) MACRO(27) MACRO(28) MACRO(29) MACRO(30) MACRO(31) MACRO(32) MACRO(33) MACRO(34) MACRO(35) MACRO(36) MACRO(37) MACRO(38) MACRO(39) MACRO(40) MACRO(41) MACRO(42) MACRO(43) MACRO(44) MACRO(45) MACRO(46) MACRO(47) MACRO(48) MACRO(49) MACRO(50) MACRO(51) MACRO(52) MACRO(53) MACRO(54) MACRO(55) MACRO(56) MACRO(57) MACRO(58) MACRO(59) MACRO(60) MACRO(61) MACRO(62) MACRO(63) MACRO(64) MACRO(65) MACRO(66) MACRO(67) MACRO(68) MACRO(69) MACRO(70) MACRO(71) MACRO(72) MACRO(73) MACRO(74) MACRO(75) MACRO(76) MACRO(77) MACRO(78) MACRO(79) MACRO(80) MACRO(81) MACRO(82) MACRO(83) MACRO(84) MACRO(85) MACRO(86) MACRO(87) MACRO(88) MACRO(89) MACRO(90) MACRO(91) MACRO(92) MACRO(93) MACRO(94) MACRO(95) MACRO(96) MACRO(97) MACRO(98) MACRO(99) MACRO(100) MACRO(101) MACRO(102) MACRO(103) MACRO(104) MACRO(105) MACRO(106) MACRO(107) MACRO(108) MACRO(109) MACRO(110) MACRO(111) MACRO(112) MACRO(113) MACRO(114) MACRO(115) MACRO(116) MACRO(117) MACRO(118) MACRO(119) MACRO(120) MACRO(121) MACRO(122) MACRO(123) MACRO(124) MACRO(125) MACRO(126) MACRO(127) \ 258 MACRO(128) MACRO(129) MACRO(130) MACRO(131) MACRO(132) MACRO(133) MACRO(134) MACRO(135) MACRO(136) MACRO(137) MACRO(138) MACRO(139) MACRO(140) MACRO(141) MACRO(142) MACRO(143) MACRO(144) MACRO(145) MACRO(146) MACRO(147) MACRO(148) MACRO(149) MACRO(150) MACRO(151) MACRO(152) MACRO(153) MACRO(154) MACRO(155) MACRO(156) MACRO(157) MACRO(158) MACRO(159) MACRO(160) MACRO(161) MACRO(162) MACRO(163) MACRO(164) MACRO(165) MACRO(166) MACRO(167) MACRO(168) MACRO(169) MACRO(170) MACRO(171) MACRO(172) MACRO(173) MACRO(174) MACRO(175) MACRO(176) MACRO(177) MACRO(178) MACRO(179) MACRO(180) MACRO(181) MACRO(182) MACRO(183) MACRO(184) MACRO(185) MACRO(186) MACRO(187) MACRO(188) MACRO(189) MACRO(190) MACRO(191) MACRO(192) MACRO(193) MACRO(194) MACRO(195) MACRO(196) MACRO(197) MACRO(198) MACRO(199) MACRO(200) MACRO(201) MACRO(202) MACRO(203) MACRO(204) MACRO(205) MACRO(206) MACRO(207) MACRO(208) MACRO(209) MACRO(210) MACRO(211) MACRO(212) MACRO(213) MACRO(214) MACRO(215) MACRO(216) MACRO(217) MACRO(218) MACRO(219) MACRO(220) MACRO(221) MACRO(222) MACRO(223) MACRO(224) MACRO(225) MACRO(226) MACRO(227) MACRO(228) MACRO(229) MACRO(230) MACRO(231) MACRO(232) MACRO(233) MACRO(234) MACRO(235) MACRO(236) MACRO(237) MACRO(238) MACRO(239) MACRO(240) MACRO(241) MACRO(242) MACRO(243) MACRO(244) MACRO(245) MACRO(246) MACRO(247) MACRO(248) MACRO(249) MACRO(250) MACRO(251) MACRO(252) MACRO(253) MACRO(254) MACRO(255) 259 260 /***************************************************************************************** 261 Error Codes 262 *****************************************************************************************/ 263 264 // success 265 #ifndef ERROR_SUCCESS 266 #define ERROR_SUCCESS 0 267 #endif 268 269 // file and i/o errors (1000's) 270 #define ERROR_IO_READ 1000 271 #define ERROR_IO_WRITE 1001 272 #define ERROR_INVALID_INPUT_FILE 1002 273 #define ERROR_INVALID_OUTPUT_FILE 1003 274 #define ERROR_INPUT_FILE_TOO_LARGE 1004 275 #define ERROR_INPUT_FILE_UNSUPPORTED_BIT_DEPTH 1005 276 #define ERROR_INPUT_FILE_UNSUPPORTED_SAMPLE_RATE 1006 277 #define ERROR_INPUT_FILE_UNSUPPORTED_CHANNEL_COUNT 1007 278 #define ERROR_INPUT_FILE_TOO_SMALL 1008 279 #define ERROR_INVALID_CHECKSUM 1009 280 #define ERROR_DECOMPRESSING_FRAME 1010 281 #define ERROR_INITIALIZING_UNMAC 1011 282 #define ERROR_INVALID_FUNCTION_PARAMETER 1012 283 #define ERROR_UNSUPPORTED_FILE_TYPE 1013 284 #define ERROR_UPSUPPORTED_FILE_VERSION 1014 285 286 // memory errors (2000's) 287 #define ERROR_INSUFFICIENT_MEMORY 2000 288 289 // dll errors (3000's) 290 #define ERROR_LOADINGAPE_DLL 3000 291 #define ERROR_LOADINGAPE_INFO_DLL 3001 292 #define ERROR_LOADING_UNMAC_DLL 3002 293 294 // general and misc errors 295 #define ERROR_USER_STOPPED_PROCESSING 4000 296 #define ERROR_SKIPPED 4001 297 298 // programmer errors 299 #define ERROR_BAD_PARAMETER 5000 300 301 // IAPECompress errors 302 #define ERROR_APE_COMPRESS_TOO_MUCH_DATA 6000 303 304 // unknown error 305 #define ERROR_UNDEFINED -1 306 307 #define ERROR_EXPLANATION \ 308 { ERROR_IO_READ , _T("I/O read error") }, \ 309 { ERROR_IO_WRITE , _T("I/O write error") }, \ 310 { ERROR_INVALID_INPUT_FILE , _T("invalid input file") }, \ 311 { ERROR_INVALID_OUTPUT_FILE , _T("invalid output file") }, \ 312 { ERROR_INPUT_FILE_TOO_LARGE , _T("input file file too large") }, \ 313 { ERROR_INPUT_FILE_UNSUPPORTED_BIT_DEPTH , _T("input file unsupported bit depth") }, \ 314 { ERROR_INPUT_FILE_UNSUPPORTED_SAMPLE_RATE , _T("input file unsupported sample rate") }, \ 315 { ERROR_INPUT_FILE_UNSUPPORTED_CHANNEL_COUNT , _T("input file unsupported channel count") }, \ 316 { ERROR_INPUT_FILE_TOO_SMALL , _T("input file too small") }, \ 317 { ERROR_INVALID_CHECKSUM , _T("invalid checksum") }, \ 318 { ERROR_DECOMPRESSING_FRAME , _T("decompressing frame") }, \ 319 { ERROR_INITIALIZING_UNMAC , _T("initializing unmac") }, \ 320 { ERROR_INVALID_FUNCTION_PARAMETER , _T("invalid function parameter") }, \ 321 { ERROR_UNSUPPORTED_FILE_TYPE , _T("unsupported file type") }, \ 322 { ERROR_INSUFFICIENT_MEMORY , _T("insufficient memory") }, \ 323 { ERROR_LOADINGAPE_DLL , _T("loading MAC.dll") }, \ 324 { ERROR_LOADINGAPE_INFO_DLL , _T("loading MACinfo.dll") }, \ 325 { ERROR_LOADING_UNMAC_DLL , _T("loading UnMAC.dll") }, \ 326 { ERROR_USER_STOPPED_PROCESSING , _T("user stopped processing") }, \ 327 { ERROR_SKIPPED , _T("skipped") }, \ 328 { ERROR_BAD_PARAMETER , _T("bad parameter") }, \ 329 { ERROR_APE_COMPRESS_TOO_MUCH_DATA , _T("APE compress too much data") }, \ 330 { ERROR_UNDEFINED , _T("undefined") }, 331