ELF(Ę4834 ( p-­­``44€4€44�4�€€|-|-€000Рπ 0 0 0PP�P�DDQåtd/lib/ld-linux-armhf.so.3GNUGNUJô½HÉ'�iýuÎÜ‘ô9§â%2"!) 0-$,% +'&.#  1* (/%Q€ÂÃ໌@A (Q(–ˆhH�j…&Hd  "#%'(,-.1)&1ÁêÓï}‹s¯4è}0`¸+kÕ!ÃJ ýÅ•xž|/N=ö|íFu)Œ2Žu‘². ½î�ÊXï—y`AãìéC+)ˆ?~–|—©ºÚ{ƒ¬?¦ã®ÛË–“ú�ØÙqXºã’|!Ï ý_–“ìÞ“�I�9J±?ÕuZ6÷Ö"BEÕì¶“Ý4ÌÚ6†Òb˳OT'Áì²{œ|¾ÚW¹�ñwT<” ¥Ž æ: ¡Üj ÿÖúV‡ç)ôÐ1®ìu ÿ';SCÍ—ÚÆdOÐ1} ÿ"Ìsô HÐ1;|»âi ÿ4ø‹ [Ð1libSDL-1.2.so.0__gmon_start___Jv_RegisterClasses_init_finilibSDL_mixer-1.2.so.0Mix_FreeMusicMix_CloseAudioSDL_QuitMix_VolumeMix_VolumeMusicSDL_InitMix_OpenAudioSDL_GetErrorMix_PlayingMusicMix_HaltMusicMix_LoadMUSMix_PlayMusicMix_GetMusicTypeSDL_DelayMix_GetNumChunkDecodersMix_GetChunkDecoderMix_GetNumMusicDecodersMix_GetMusicDecoderlibstdc++.so.6libm.so.6libgcc_s.so.1__aeabi_unwind_cpp_pr0__aeabi_unwind_cpp_pr1libc.so.6strcpy_IO_putcsrandfopenputstimeputcharabortprintfstrtolfseekstdoutfclosefreadstrcmp__libc_start_main__cxa_atexit_edata__bss_start__bss_start____bss_end____end___endGCC_3.5GLIBC_2.4€ U&y ‚¼ii ŠÄ1Ð101%4181#<1@1D1 H1.L1&P1T1X1'\1)`1-d1h1l1 p1t1x1|1 €1„1ˆ1$Œ1�1”1,˜1*œ1 1!¤1¨1"¬1 °1´1+¸1¼1 @-é?뀽èà-åàŸåà�àð¾å¥Æ�â ÊŒâõ¼åÆ�â ÊŒâõ¼åÆ�â ÊŒâõ¼åÆ�â ÊŒâøô¼åÆ�â ÊŒâðô¼åÆ�â ÊŒâèô¼åÆ�â ÊŒâàô¼åÆ�â ÊŒâØô¼åÆ�â ÊŒâÐô¼åÆ�â ÊŒâÈô¼åÆ�â ÊŒâÀô¼åÆ�â ÊŒâ¸ô¼åÆ�â ÊŒâ°ô¼åÆ�â ÊŒâ¨ô¼åÆ�â ÊŒâ ô¼åÆ�â ÊŒâ˜ô¼åÆ�â ÊŒâ�ô¼åÆ�â ÊŒâˆô¼åÆ�â ÊŒâ€ô¼åÆ�â ÊŒâxô¼åÆ�â ÊŒâpô¼åÆ�â ÊŒâhô¼åÆ�â ÊŒâ`ô¼åÆ�â ÊŒâXô¼åÆ�â ÊŒâPô¼åÆ�â ÊŒâHô¼åÆ�â ÊŒâ@ô¼åÆ�â ÊŒâ8ô¼åÆ�â ÊŒâ0ô¼åÆ�â ÊŒâ(ô¼åÆ�â ÊŒâ ô¼åÆ�â ÊŒâô¼åÆ�â ÊŒâô¼åÆ�â ÊŒâô¼åÆ�â ÊŒâô¼åÆ�â ÊŒâøó¼åPãðO-ép áÐMâ` á Ú@‘åL Ÿå áãÿÿëPã < Ÿå áÞÿÿëPãwë ã‹ÿÿë IŸåÐ0ÔáSã-W㪠±ÚP–å Ÿå áÎÿÿëPã(gëðŸå�ÿÿëìŸåÿÿëèŸå}ÿÿëäŸå{ÿÿëàŸåyÿÿëÜŸåwÿÿëØŸåuÿÿëÔŸåsÿÿëПåqÿÿëÌŸåoÿÿëÈŸåmÿÿëÄŸåkÿÿëÀŸåiÿÿ뼟ågÿÿ븟åeÿÿë´Ÿåcÿÿë  ãjÿÿë ãYÿÿë–土åYÿÿëÍÿÿꔟå á ÿÿëPãq „Ÿå á›ÿÿëPãl tŸå á–ÿÿëPã dŸå á‘ÿÿëPã P ã¾뀠ã êP…âUáü –ç  ã1ÿÿë,8Ÿå„çP…âWáaÚ¡–çŸå  á|ÿÿë± áPã  áŸåvÿÿëPã� ð'Ÿå0 ã� ã0Äç  –ç  áÜŸåkÿÿëØŸåPã   Ä  –�   ácÿÿëPã  á°Ÿå^ÿÿëPã¤7Ÿå  ã� ã Äç  –ç  á�ŸåTÿÿ댟åPãEÄ  –�   áMÿÿëtŸåPã0 E0Ä  –�   áEÿÿëPâ P…âUá° –ç  ãéþÿë87Ÿå� ã¡–ç„ç,Ÿå  á6ÿÿëPâ¨ÿÿ Yã®ÿÿ„àT€â  áÿÿ뀈â¨ÿÿê–åËë ãÚþÿëÃë`ŸåÝþÿë\ŸåÛþÿëXŸåÙþÿëtÿÿêP뀠ã¬6ŸåP€„åÓ0”áSã X㘠¨Ÿåóë‘ë|ëfŸåŒ†Ÿå”vŸåP ã UãñŸ—üÿÿꀒh’4’@‘@‘’Ì‘ˆ‘@‘t‘H0”åP ã0ƒâH0„åíÿÿê6ŸåÓ0”áSãÐ0ÖáSã L”å(Ÿå„àT�â¦þÿë,”å ãëþÿëP ãÜÿÿêÔ5ŸåÓ0”áSãÐ0ÖáSãóÿÿ L”åèŸå„àT�â•þÿëíÿÿê 5ŸåÓ0”áSãÐ0ÖáSãæÿÿ L”帟å„àT�âˆþÿëàÿÿê,”åPã5  –çRãÚ0–çRáÊ0 ã0„ç P ãµÿÿê ãŠþÿëŒþÿëPãP ¯ÿÿêH0”åP ”åSáž 5†àTƒâwë,–åPã H0–åL0†åmþÿëPã ,–åiþÿëPãP P šÿÿê0ƒâ0†çbþÿëPãôÿÿP ã“ÿÿêÐ0ÖáSãØÿÿ H–åÜŸå P ã†àT�âOþÿë‰ÿÿêÐ0ÖáSãÎÿÿ L–帟å P ã†àT�âEþÿëÿÿꤟåBþÿë ã=þÿ똟å>þÿë ã9þÿ댟匟å9þÿë ã4þÿ뀟å5þÿë ã0þÿëë°3Ÿå  ã  áE Ãåõë€þÿë� á` áP á áHŸå&þÿëXáTª áRþÿë4ŸåkþÿëPã á`†� KþÿëŸådþÿëPã á`†  DþÿëŸå]þÿëPã á`†>þÿ뀈â áèŸå þÿëâÿÿê  ãþÿë[ãŽÐŸå áþÿëX3ŸåÓ0”áSãhYã °ŸåúýÿëZã ¤ŸåöýÿëXã ˜Ÿåòýÿë0�åSã ˆŸåíýÿë �åRã xŸåèýÿë  ãòýÿëWã dŸåâýÿëØ2ŸåÓ0”áSã PŸåÜýÿëWã DŸåÛýÿëËýÿëÇýÿëÐ0ÔáSã ,ŸåÔýÿë ãÌýÿë  ãÙýÿë þÿëP ã€ áp á° á �å �åüŸåÄýÿëP�åP�å �åUáµÿÿª áÿýÿëÜŸåþÿëPã á° ùýÿëÈŸåþÿëPã áp óýÿë´ŸåúýÿëPã á`†€ ìýÿ뜟åóýÿëPã   á �`†äýÿ뀟åëýÿëPã0  á`†0�ÜýÿëP…â áŸå–ýÿëÒÿÿê  ãŸýÿëYã @Ÿå’ýÿë<Ÿå�ýÿë8ŸåŽýÿëZã ,ŸåŠýÿë(ŸåˆýÿëXã Ÿå„ýÿë0�åSã Ÿåýÿë �åRã’ÿÿ üŸåzýÿë�ÿÿêôŸåtýÿë 1ŸåÓ0”áSã&  ãzýÿëØŸåoýÿëÔŸåmýÿëПåkýÿëÌŸåiýÿëÈŸågýÿëÄŸåeýÿëÀŸåcýÿ뼟åaýÿ븟å_ýÿë´Ÿå]ýÿë°Ÿå[ýÿ묟åYýÿ먟åWýÿ뤟åUýÿë ŸåSýÿ뜟åQýÿ똟åOýÿ딟åMýÿëCÿÿꌟåJýÿë@ÿÿê@£L£Ø1\£d£„£È£ü£L¤€¤´¤ì¤$¥L¥x¥À¥è¥ ¦,¦T¦P£„¦�¦˜¦¬¦\ȼ¦À¦dÈ̦Ԧà¦eÈì¦ø¦§TÈ(§p™XÈx¢°¢”¢Ì¢è¢§4§¸¦ 9¤¦T§l§t§|§€§0«Œ¬˜¬ ¬¨¬°¬¸¬Ð¬Ô¬ø¬„§œ§¤§°§´§¼§D«`«|« «Ô«ø«$¬\¬À§Ø§ ¨D¨l¨œ¨Ð¨ü¨$©T©x©¨©Ø©ô© ªDªpª�ªÄªèª° ãà ã�ä  á -å-åÀŸåÀ-å Ÿå 0Ÿå)ýÿëûüÿëô È�” 0Ÿå Ÿå0�à0“çSãÿ/$ýÿ꘠0Ÿå ÓåRã   Ãÿ/áÔ1 Ÿå@-é0�åS〽0ŸåS〽3ÿ/ွè08@-é°@Ÿå°0ŸåÓ0”áSãÐ0ÔáSã,”åŒPŸåPã Ð0ÕáSãÑüÿëÕ4ÔáSã d0ŸåÐ0ÓáSã“üÿë�üÿëP0ŸåÓ0”áSã<0ŸåÐ0ÓáSã8€½4Ÿå8@½è–üÿê,Ÿå”üÿëàÿÿê$Ÿå‘üÿë,•åãÿÿêŸå�üÿëèÿÿêØ1dÈt¡,¡D¡`¡ÀÀŸå@-å@ ã0 ãE@Ìå°@Ÿå°Ÿå$0Œå(0Œå¨0Ÿå  ã Ìç Œå@„âWƒâ á Ìå ÌçƒäSá  ãûÿÿx0Ÿå ã8 Ìå Œç0ƒâ9 Ìå Œç0ƒâ: ÌåŒç0ƒâ; Ìå Œç0ƒâ< Œå Ìç0ƒàA Ìå Ìç00ŸåB ÌåD ÌåH ŒåL ŒåP Œå Ìç½èÿ/áØ1fÌÈB@þTÈÄÍ@-é ã–üÿë8@Ÿå:Äå ã’üÿë�üÿëÕ4ÔáS〽 ãàãyüÿëzÔíçzýî� î@½èVüÿêØ1@-é ã[üÿëPã&ºÄ@ŸåE ÔåRã ¸0ŸåÓ0”áSãÐ0ÔáS〽 Ÿå@½è'üÿꘟ嘟år ¯æ; ã.üÿëPãºt0ŸåÓ0”áSãÐ0ÔáS〽hŸåüÿëÕ4ÔáSã XŸå@½èüÿêPŸå@½èüÿê"üÿë á@Ÿåüÿë ãüÿëüÿë á,Ÿåüÿë ãüûÿëØ1dÈ0¢"V€¢(¢ ¢¬¡Ì¡p@-éP áüÿëŒ@ŸåPã Ð0ÔáSãüÿë,”ål`ŸåPã Ð0ÖáSã üÿëT0ŸåÓ0”áSã@0ŸåÐ0ÓáSã 8Ÿå áØûÿë á÷ûÿë,„åp€½è ŸåÕûÿë,–åëÿÿêŸåÑûÿëàÿÿêØ1dÈd¢D¡H¢@-é@0Ÿå@@ŸåÓ0”áSãÐ0ÔáSã L”å$Ÿå„àT�âºûÿë,”å ãÿûÿë ã€½èdÈØ1x¢@-é@0Ÿå@@ŸåÓ0”áSãÐ0ÔáSã L”å$Ÿå„àT�â¤ûÿë,”å ãéûÿë ã€½èdÈØ1”¢@-é@0Ÿå@@ŸåÓ0”áSãÐ0ÔáSã L”å$Ÿå„àT�âŽûÿë,”å ãÓûÿë ã€½èdÈØ1°¢@-éŒ@ŸåH”åP0”åPá „àT€â‡ÿÿë,”åPã H0”åL0„å}ûÿëPã ,”åyûÿëPã  €½è ã€½èÐ0ÔáSã  €½H0”åŸåE„àT„âdûÿë  ã€½è ã]ûÿëØ1Ì¢@-é ãmûÿëoûÿëPã  €½è@-éœ@Ÿå,”åPã �0Ÿå ”çRãÚ0ƒâ”çRáÊt0Ÿå  ã  ã „瀽è�â„çGûÿëPã ,”åCûÿëPã  €½èÐ0ÔáSã  €½L”å$Ÿå„àT�â0ûÿë  ã€½è ã€½èØ1TÈXÈè¢@-é,@Ÿå,”åP〽Ð0ÔáSã@½èHûÿê Ÿåûÿë,”åùÿÿêØ1D¡ŸåŸåûÿ꣣0@-é ÐMâpŸåP á)ûÿë@Pâ `Ÿå  ãûÿëXPŸåêÝå•å ûÿë ã�â  á0 á5ûÿëPãõÿÿ á@ûÿë Ð�â0€½èßÿÿëŸå áõúÿë  ãðúÿë$£`ÆÿÿÐ1(£øE-é` áHPŸåH ŸåP�à  �à  eàp á€ áÎúÿëJ¡°áø…½@ ã0•ä á á  á@„â3ÿ/á Tá÷ÿÿø…½èT�T�ÿ/á0Ÿå Ÿå0�à ã “çRã ’ûÿê�œ@-逽èinfo: Cleaning Up...info: freeing sdlPlay.musicinfo: Closing Audioinfo: ...Done Cleaning Up Thank You for using sdlPlayCouldn't initialize SDL: %s Error: Couldn't set 22050 Hz 16-bit audio - Reason: %s info: audio 22050 Hz 16-bit mono stereoinfo: audio disabledinfo: stop playing audioinfo: loading: %s info: playing sound: %s info: playing music: %s info: playing module: %s info: failed loading: %s info: failed playing: %s sdlPlay (one-file) %s 1.0.2rberror: cant open '%s' --version-vinfo: %s --helpCopyright 2016 MiNTed Games Play sound files, tracker modules, audio files, using SDL v1.2. usage: sdlPlay-1f [_option_] [] --source one file source (to save 'sdlPlay-1f --src > sdlPlay-1f.cpp') --src-size size of source appended (in bytes) --src-type type of source appended (TXT/ZIP) --noaudio dont play anything (use with verbose) --mono Mono sound output (best for headphones) --loop Loop audio times --repeat repeat playlist times --format Display file information(no shows all formats) --help This help information -v|--version Version information -V|--verbose Verbose output --debug Extra verbose output special thanks to: www.parallelrealities.co.uk--source--src--src-type.cpp--src-size%d-V--verbose--debug--format--formats--noaudio--mono--looperror: --loop needs a number--repeaterror: --repeat needs a number[%d] supported chunks:WAVEAIFFVOC %s[%d] supported music:MIKMODTIMIDITYOGGFLACMP3[17] MikMod formats: .699 669 and Extended-669 (by Tran/Renaissance) .AMF DMP Advanced Module Format (by Otto Chrons) .DSM DSIK internal module format .FAR Farandole Composer (by Daniel Potter) .GDM General DigiMusic (by Edward Schlunder) .IT Impulse Tracker (by Jeffrey Lim) .IMF Imago Orpheus (by Lutz Roeder) .MED Amiga MED modules (by Teijo Kinnunen) .M15 Soundtracker 15-instrument .MOD Standard 31-instrument Module loader .MTM Multi-Tracker Module (by Renaissance) .OKT Amiga Oktalyzer .STM ScreamTracker 2 (by Future Crew) .STX STMIK 0.2 (by Future Crew) .S3M ScreamTracker 3 (by Future Crew) .ULT UltraTracker (by MAS) .UNI MikMod and APlayer internal module format .XM FastTracker 2 (by Triton) 669 AMF DSM FAR GDM IT IMF MED M15 MOD MTM OKT STM STX S3M ULT UNI XM[%d] sound formats: .RAW Raw audio sample .AU Sun audio sample .WAV Microsoft RIFF sound wave .AIF Apple Audio Interchange File Format (AIFF) .VOC Creative Labs Voice sample .OGG Vorbis OOG compressed audio sample .FLA Free Loss-less Audio Compression format (FLAC) .MP3 MPEG Layer 3 compressed audio sample RAW AU WAV AIF OGG FLA MP3[1] supported MIDI: .MID General MIDI file formatinfo: audio closed±�°°„°àÿ°¯€¤ëÿHìÿ©±€íÿìíÿ°°¨€<ïÿ°°ª€èïÿ°°¨€ˆñÿ¸ÿÿ ñÿ°°¨€�òÿœòÿ°©€$óÿ@™$™@gv€¼ ø‹ ¡00”�õþÿoø‚�‡p„ ” $1 ØŠÈŠþÿÿoˆŠÿÿÿoðÿÿo$Š 0ŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒÌ1GCC: (Debian 4.6.3-14+rpi1) 4.6.3A.aeabi$6  ,.symtab.strtab.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.ARM.extab.ARM.exidx.eh_frame.init_array.fini_array.jcr.dynamic.got.data.bss.comment.ARM.attributes4�4#P�P 1p�p$H”�”dDöÿÿoø‚øxN p„p V�‡�”^ÿÿÿo$Š$ dkþÿÿoˆŠˆ @z ÈŠÈ ƒ BØŠØ  Œø‹ø ‡Œ Ä’È�È X˜ ¡ !ž(¡(!ä ¦ ­ - ±p‚­-`¼x­x-Æ00Ò00Þ00ã 0 0ì$1$1¤ñÈ1È1÷Ð1Ð1ÐÍü0Ð1"pò1/!288Ð u DO4�P�p�”�ø‚p„�‡$ŠˆŠ ÈŠ ØŠ ø‹ Œ È� ¡(¡ ­­x­000 0$1È1Ð1ñÿJP�MĘJ ­Jô˜J(¡JÈ1PñÿM™™™J™Mø‹ M ¡©ñÿMŒ M$¡òñÿMp™J,šJ(­MDšJ ›M$›Jp›Mt›JTœM|œJ�M0�J|�Mˆ�JÔ�Mà�J,žM8žJОMØžJ ­J ŸM°ŸJèŸMðŸJüŸM J„ MÈ�JL‘Mt‘J8—J­J,¡JØ1ñÿ 0JÌ1M$™$™J<™/Ô1J0>0M@™e@™Jh™J0q0JÔ1�ñÿM” Jì Mô œñÿMø J¡ñÿJx­¦x­J0´0ñÿÀÌ1Í 0Ö0ç0ú$1MŒ JŒ MŒ 8ž "+p™Ô7FÐ1M_pÈ1 {(¡Šà�X–È�ü ›«½ ÿÅt›Õåˆ�Xó$›P°Ÿ@3Øž ATbø (is„ ¡Š— ÿ£´ÄÐá ÿìõĘ0>Ø1ÈÍFWø‹ ] q‰”¬Ð1ºÈ1Ç ÿÌàøž¸íÐ1ù|œ´” `*8 �GgÐ1y‹›ô «Ëè  0�X.Dšà?ðŸ/usr/lib/gcc/arm-linux-gnueabihf/4.6/../../../arm-linux-gnueabihf/crt1.o$d$a/usr/lib/gcc/arm-linux-gnueabihf/4.6/../../../arm-linux-gnueabihf/crti.ocall_gmon_start/usr/lib/gcc/arm-linux-gnueabihf/4.6/../../../arm-linux-gnueabihf/crtn.osdlPlay-1f.cppcrtstuff.c__JCR_LIST____do_global_dtors_auxcompleted.5637__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entryelf-init.oSatexit.oS__FRAME_END____JCR_END____dso_handle_DYNAMIC__init_array_end__init_array_start_GLOBAL_OFFSET_TABLE__Z12getAudioFilevSDL_Quit_Z7cleanUpvMix_CloseAudio_edatastrtol@@GLIBC_2.4fseek@@GLIBC_2.4data_start_IO_stdin_used_Z7playModvmainexit@@GLIBC_2.4printf@@GLIBC_2.4__end___Z10initSystemvputs@@GLIBC_2.4_Z9playMusicv_Z8initVarsvMix_GetMusicType_Z9freeSoundv_IO_putc@@GLIBC_2.4_Z9isPlayingvputchar@@GLIBC_2.4Mix_OpenAudioatexitSDL_DelayMix_PlayingMusic_finiSDL_GetError__bss_end__fopen@@GLIBC_2.4Mix_VolumeMusicMix_LoadMUSabort@@GLIBC_2.4_bss_end__SDL_InitMix_FreeMusicstrcpy@@GLIBC_2.4_startMix_GetChunkDecoderMix_HaltMusicsdlPlayfread@@GLIBC_2.4_init_Jv_RegisterClasses__cxa_atexit@@GLIBC_2.4Mix_VolumeMix_GetNumMusicDecoders__bss_start____data_start_endMix_GetMusicDecoder_Z8playLoopv__bss_start_Z9loadMusicPc__libc_csu_initfclose@@GLIBC_2.4Mix_PlayMusic_Z9output_1fPc__aeabi_unwind_cpp_pr1@@GCC_3.5stdout@@GLIBC_2.4strcmp@@GLIBC_2.4time@@GLIBC_2.4__libc_csu_fini__aeabi_unwind_cpp_pr0@@GCC_3.5__libc_start_main@@GLIBC_2.4Mix_GetNumChunkDecoders__gmon_start__srand@@GLIBC_2.4_Z9playSoundv_Z11sdlPlayInitv_Z10version_1fv/* sdlPlay-1f one-file (-1f) audio player (SDL 1.2 mixer) Copyright (C) 2016 MiNTed Games All Rights Reserved This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* one-file compile g++ `sdl-config --cflags` -Wall -DLINUX -O3 -DVERSION=\"1.0.2\" `sdl-config --libs` -lSDL_mixer -o sdlPlay-1f sdlPlay-1f.cpp ; \ g++ `sdl-config --cflags` -Wall -DLINUX -O3 -DVERSION=\"1.0.2\" -DPRG_SIZE=`ls -l sdlPlay-1f|cut -d \ -f 5` -DSRC_SIZE=`ls -l sdlPlay-1f.cpp|cut -d \ -f 5` `sdl-config --libs` -lSDL_mixer -o sdlPlay-1f sdlPlay-1f.cpp ; \ cat sdlPlay-1f.cpp >> sdlPlay-1f */ #include #include #include #include #include "SDL/SDL.h" #include "SDL/SDL_mixer.h" #ifdef LINUX #include #include #include #include #endif /* one-file source appendage */ #define NO_SIZE 12345 //#define SRC_TYPE ".zip" // if its a ZIP appendage #define SRC_TYPE ".cpp" // if its a TEXT appendage #ifndef PRG_SIZE //#define PRG_SIZE 18808 // last checked binary size was ... #define PRG_SIZE NO_SIZE // .. this should be close to actual #endif #ifndef SRC_SIZE // size of 1 text file or 1 zip file //#define SRC_SIZE 14701 // last checked source size was ... #define SRC_SIZE NO_SIZE // .. affects binary size if too small #endif const long offset_1f = PRG_SIZE; // this has never been accurate (EXT4) const long sizeOf_1f = SRC_SIZE; // we use this (-sizeOf_1f) as offset typedef struct sdlPlayEngineVariables { signed char debug; SDL_Event event; signed char done; SDL_RWops *sdlrw; float musicVolume; float ssx; float ssy; Mix_Music *music; int cursor_x, cursor_y; signed char eventTimer; signed char totalTime; signed char startTime; signed char stopTime; int timeTaken; // In seconds signed char timePlayed; signed char seconds; signed char minutes; signed char hours; signed char paused; signed char useAudio; int next; int current; int playlist; char playList[50][1024]; int loop; int loopCount; int repeat; int repeatCount; signed char info; signed char showFormat; // This really only applies to Linux users. char userHomeDirectory[1024]; char keyState[350]; signed char section; }; sdlPlayEngineVariables sdlPlay; void sdlPlayInit() { sdlPlay.debug = 0; if (sdlPlay.debug) printf("info: initializing engine\n"); sdlPlay.musicVolume = 100; sdlPlay.useAudio = 2; sdlPlay.ssx = 0; sdlPlay.ssy = 0; for (int i = 0 ; i < 350 ; i++) sdlPlay.keyState[i] = 0; sdlPlay.eventTimer = 0; sdlPlay.totalTime = 0; sdlPlay.startTime = 0; sdlPlay.stopTime = 0; sdlPlay.timeTaken = 0; sdlPlay.seconds = 0; sdlPlay.minutes = 0; sdlPlay.paused = 0; sdlPlay.next = 0; sdlPlay.current = 0; sdlPlay.playlist = 0; sdlPlay.loop = 0; sdlPlay.loopCount = 0; sdlPlay.repeat = 1; sdlPlay.repeatCount = 0; sdlPlay.info = 0; sdlPlay.showFormat = 0; sdlPlay.section = 0; } void initVars() { // set timer sdlPlay.startTime = time(NULL); srand(time(NULL)); // for randomise playlist // These are good values for sound and music if (sdlPlay.useAudio) { Mix_Volume(-1, 25); Mix_VolumeMusic((int)sdlPlay.musicVolume); } } void initSystem() { /* Initialize the SDL library */ if (SDL_Init(SDL_INIT_AUDIO) < 0) { printf("Couldn't initialize SDL: %s\n", SDL_GetError()); exit(1); } if (sdlPlay.useAudio) { if (Mix_OpenAudio(22050, AUDIO_S16, sdlPlay.useAudio, 1024) < 0) { printf("Error: Couldn't set 22050 Hz 16-bit audio - Reason: %s\n", Mix_GetError()); exit(1); } if (sdlPlay.info || sdlPlay.debug) { printf("info: audio 22050 Hz 16-bit"); if (sdlPlay.useAudio == 1) printf(" mono\n"); else printf(" stereo\n"); } }else{ if (sdlPlay.info || sdlPlay.debug) printf("info: audio disabled\n"); } } void loadMusic(char *filename) { if (Mix_PlayingMusic()) { if (sdlPlay.debug) printf("info: stop playing audio\n"); Mix_HaltMusic(); } if (sdlPlay.music != NULL) { if (sdlPlay.debug) printf("info: freeing sdlPlay.music\n"); Mix_FreeMusic(sdlPlay.music); } if (sdlPlay.info || sdlPlay.debug) printf("info: loading: %s\n",filename); sdlPlay.music = Mix_LoadMUS(filename); } int playSound() { if (sdlPlay.info || sdlPlay.debug) printf("info: playing sound: %s\n",sdlPlay.playList[sdlPlay.current]); // Mix_PlayChannel(-1, sdlPlay.music, 0); Mix_PlayMusic(sdlPlay.music, 0); return(1); } int playMusic() { if (sdlPlay.info || sdlPlay.debug) printf("info: playing music: %s\n",sdlPlay.playList[sdlPlay.current]); Mix_PlayMusic(sdlPlay.music, 0); return(1); } int playMod() { if (sdlPlay.info || sdlPlay.debug) printf("info: playing module: %s\n",sdlPlay.playList[sdlPlay.current]); Mix_PlayMusic(sdlPlay.music, 0); return(1); } int getAudioFile() { if (sdlPlay.next == sdlPlay.playlist) exit(0); loadMusic(sdlPlay.playList[sdlPlay.next]); if (sdlPlay.music == NULL) { if (sdlPlay.debug) printf("info: failed loading: %s\n",sdlPlay.playList[sdlPlay.next]); return(9); } sdlPlay.current = sdlPlay.next; if (Mix_GetMusicType(sdlPlay.music) == MUS_WAV) return(7); if (Mix_GetMusicType(sdlPlay.music) == MUS_MOD) return(6); return(5); } int isPlaying() { // Give the audio (and possibly the X server) time to work... SDL_Delay(1); if (Mix_PlayingMusic()) return(1); return(2); } int playLoop() { if (sdlPlay.music == NULL) { if (sdlPlay.debug) printf("info: failed playing: %s\n",sdlPlay.playList[sdlPlay.current]); return(9); } if (sdlPlay.loop > 0) if (sdlPlay.loopCount < sdlPlay.loop) { sdlPlay.loopCount++; if (Mix_GetMusicType(sdlPlay.music) == MUS_WAV) return(7); if (Mix_GetMusicType(sdlPlay.music) == MUS_MOD) return(6); return(5); } sdlPlay.loopCount = 0; return(9); } void freeSound() { if (sdlPlay.music != NULL) { if (sdlPlay.debug) printf("info: freeing sdlPlay.music\n"); Mix_FreeMusic(sdlPlay.music); } } void cleanUp() { if (sdlPlay.info || sdlPlay.debug) printf("info: Cleaning Up...\n"); freeSound(); if (sdlPlay.useAudio) { if (sdlPlay.debug) printf("info: Closing Audio\n"); Mix_CloseAudio(); } SDL_Quit(); if (sdlPlay.info || sdlPlay.debug) printf("info: ...Done Cleaning Up\nThank You for using sdlPlay\n"); } void version_1f() { printf("sdlPlay (one-file) %s\n", VERSION); } void output_1f(char *file_1f) { FILE *source_1f; char out_1f[1]; if (offset_1f == NO_SIZE || sizeOf_1f == NO_SIZE) { version_1f(); printf("error: no source file or zip\n"); exit(32); }else{ source_1f = fopen(file_1f, "rb"); if (source_1f == NULL) { version_1f(); printf("error: cant open '%s'\n", file_1f); exit(32); } // fseek(source_1f, offset_1f + 223, SEEK_SET); // off by ? (223) fseek(source_1f, -sizeOf_1f, SEEK_END); while(true) { if (!fread(out_1f, 1, 1, source_1f)) { fclose(source_1f); break; }else putchar((int) out_1f[0]); } } } int main(int argc, char *argv[]) { int total, argDone, j, section, sndFormats; bool hasMik, hasWav, hasAif, hasVoc, hasMid, hasOgg, hasFla, hasMp3; if ( (argc > 1) && ( (strcmp("--version", argv[1]) == 0) || (strcmp("-v", argv[1]) == 0) ) ) { version_1f(); exit(0); } if (sdlPlay.debug) printf("info: %s\n", argv[0]); if ( (argc == 1) || ( (argc > 1) && (strcmp("--help", argv[1]) == 0) ) ) { version_1f(); printf("Copyright 2016 MiNTed Games\n\n"); printf("Play sound files, tracker modules, audio files, using SDL v1.2.\n\n"); printf("usage: sdlPlay-1f [_option_] []\n"); if (argc > 1) { printf("\t--source one file source (to save 'sdlPlay-1f --src > sdlPlay-1f.cpp')\n"); printf("\t--src-size size of source appended (in bytes)\n"); printf("\t--src-type type of source appended (TXT/ZIP)\n"); printf("\t--noaudio dont play anything (use with verbose)\n"); printf("\t--mono Mono sound output (best for headphones)\n"); printf("\t--loop Loop audio times\n"); printf("\t--repeat repeat playlist times\n"); printf("\t--format Display file information(no shows all formats)\n"); printf("\t--help This help information\n"); printf("\t-v|--version Version information\n"); printf("\t-V|--verbose Verbose output\n"); printf("\t--debug Extra verbose output\n"); printf("\nspecial thanks to: www.parallelrealities.co.uk\n"); } printf("\n"); exit(0); } if ( (argc > 1) && ( (strcmp("--source", argv[1]) == 0) || (strcmp("--src", argv[1]) == 0) ) ) { output_1f(argv[0]); exit(31); } if ( (argc > 1 ) && (strcmp("--src-type", argv[1]) == 0) ) { printf(SRC_TYPE); exit(31); } if ( (argc > 1 ) && (strcmp("--src-size", argv[1]) == 0) ) { printf("%d", SRC_SIZE); exit(31); } sdlPlayInit(); // Must do this first! j = 0; for (int i = 1 ; i < argc ; i++) { argDone = 0; if ( (strcmp(argv[i], "-V") == 0) || (strcmp(argv[i], "--verbose") == 0) ) { sdlPlay.info = 1; argDone = 1; } if (strcmp(argv[i], "--debug") == 0) { sdlPlay.debug = 1; argDone = 1; } if ( (strcmp(argv[i], "--format") == 0) || (strcmp(argv[i], "--formats") == 0) ) { sdlPlay.showFormat = 1; argDone = 1; } if (strcmp(argv[i], "--noaudio") == 0) { sdlPlay.useAudio = 0; argDone = 1; } if (strcmp(argv[i], "--mono") == 0) { sdlPlay.useAudio = 1; argDone = 1; } if (strcmp(argv[i], "--loop") == 0) { i++; if (i == argc) { printf("error: --loop needs a number"); exit(1); } sdlPlay.loop = atoi(argv[i]); argDone = 1; } if (strcmp(argv[i], "--repeat") == 0) { i++; if (i == argc) { printf("error: --repeat needs a number"); exit(1); } sdlPlay.repeat = atoi(argv[i]); argDone = 1; } if (argDone == 0) { strcpy(sdlPlay.playList[j], argv[i]); j++; } } sdlPlay.playlist = j; if (sdlPlay.showFormat && sdlPlay.playlist == 0) { version_1f(); sdlPlay.useAudio = 2; initSystem(); sndFormats = 0; hasWav = false; hasAif = false; total = Mix_GetNumChunkDecoders(); printf("[%d] supported chunks:", total); for (int i = 0; i < total; i++) { if (strcmp(Mix_GetChunkDecoder(i),"WAVE") == 0) { hasWav = true; ++sndFormats; ++sndFormats; ++sndFormats;} if (strcmp(Mix_GetChunkDecoder(i),"AIFF") == 0) { hasAif = true; ++sndFormats; } if (strcmp(Mix_GetChunkDecoder(i),"VOC") == 0) { hasVoc = true; ++sndFormats; } printf(" %s", Mix_GetChunkDecoder(i)); } printf("\n"); hasMik = false; hasMid = false; hasOgg = false; hasFla = false; hasMp3 = false; total = Mix_GetNumMusicDecoders(); printf("[%d] supported music:", total); for (int i = 0; i < total; i++) { if (strcmp(Mix_GetMusicDecoder(i),"MIKMOD") == 0) hasMik = true; if (strcmp(Mix_GetMusicDecoder(i),"TIMIDITY") == 0) hasMid = true; if (strcmp(Mix_GetMusicDecoder(i),"OGG") == 0) { hasOgg = true; ++sndFormats; } if (strcmp(Mix_GetMusicDecoder(i),"FLAC") == 0) { hasFla = true; ++sndFormats; } if (strcmp(Mix_GetMusicDecoder(i),"MP3") == 0) { hasMp3 = true; ++sndFormats; } printf(" %s", Mix_GetMusicDecoder(i)); } printf("\n"); if (hasMik) { printf("[17] MikMod formats:"); if(sdlPlay.info) { printf("\n"); printf("\t.699 669 and Extended-669 (by Tran/Renaissance)\n"); printf("\t.AMF DMP Advanced Module Format (by Otto Chrons)\n"); printf("\t.DSM DSIK internal module format\n"); printf("\t.FAR Farandole Composer (by Daniel Potter)\n"); printf("\t.GDM General DigiMusic (by Edward Schlunder)\n"); printf("\t.IT Impulse Tracker (by Jeffrey Lim)\n"); printf("\t.IMF Imago Orpheus (by Lutz Roeder)\n"); printf("\t.MED Amiga MED modules (by Teijo Kinnunen)\n"); printf("\t.M15 Soundtracker 15-instrument\n"); printf("\t.MOD Standard 31-instrument Module loader\n"); printf("\t.MTM Multi-Tracker Module (by Renaissance)\n"); printf("\t.OKT Amiga Oktalyzer\n"); printf("\t.STM ScreamTracker 2 (by Future Crew)\n"); printf("\t.STX STMIK 0.2 (by Future Crew)\n"); printf("\t.S3M ScreamTracker 3 (by Future Crew)\n"); printf("\t.ULT UltraTracker (by MAS)\n"); printf("\t.UNI MikMod and APlayer internal module format\n"); printf("\t.XM FastTracker 2 (by Triton)\n"); }else{ printf(" 669 AMF DSM FAR GDM IT IMF MED M15 MOD MTM OKT STM STX S3M ULT UNI XM\n"); } } printf("[%d] sound formats:", sndFormats); if(sdlPlay.info) { printf("\n"); if (hasWav) printf("\t.RAW Raw audio sample\n"); if (hasWav) printf("\t.AU Sun audio sample\n"); if (hasWav) printf("\t.WAV Microsoft RIFF sound wave\n"); if (hasAif) printf("\t.AIF Apple Audio Interchange File Format (AIFF)\n"); if (hasVoc) printf("\t.VOC Creative Labs Voice sample\n"); if (hasOgg) printf("\t.OGG Vorbis OOG compressed audio sample\n"); if (hasFla) printf("\t.FLA Free Loss-less Audio Compression format (FLAC)\n"); if (hasMp3) printf("\t.MP3 MPEG Layer 3 compressed audio sample\n"); }else{ if (hasWav) printf(" RAW AU WAV"); if (hasAif) printf(" AIF"); if (hasOgg) printf(" OGG"); if (hasFla) printf(" FLA"); if (hasMp3) printf(" MP3"); printf("\n"); } if (hasMid) printf("[1] supported MIDI: "); if (sdlPlay.info) printf("\n\t"); if (hasMid) printf(".MID General MIDI file format\n"); Mix_CloseAudio(); SDL_Quit(); if (sdlPlay.debug) printf("info: audio closed\n"); exit(0); } atexit(cleanUp); initSystem(); // Opens video mode and sound initVars(); section = 0; while (true) { // non-blocking (but high CPU usage) // should be event driven, but this is faster switch(section) { case 0: section = getAudioFile(); break; case 1: section = isPlaying(); break; case 2: section = playLoop(); break; case 5: section = playMusic(); break; case 6: section = playMod(); break; case 7: section = playSound(); break; case 9: sdlPlay.next++; section = 0; break; } } return(0); }