From 6719c57ba8c30b5db3dba0697fadfe0ca62e8afd Mon Sep 17 00:00:00 2001 From: Spencer Vaughn Date: Wed, 22 Feb 2023 18:22:42 -0600 Subject: [PATCH] switch-examples: Updated Makefile for romfs and updated all audio examples for switch --- .gitignore | 3 ++ examples-switch/Makefile | 7 +++- examples-switch/audio/audio_module_playing.c | 11 ++++--- .../audio/audio_module_playing.png | Bin 47970 -> 0 bytes .../audio/audio_multichannel_sound.c | 16 ++++++---- .../audio/audio_multichannel_sound.png | Bin 16088 -> 0 bytes examples-switch/audio/audio_music_stream.c | 22 +++++++------ examples-switch/audio/audio_music_stream.png | Bin 15043 -> 0 bytes examples-switch/audio/audio_raw_stream.c | 22 +++++++++---- examples-switch/audio/audio_raw_stream.png | Bin 16736 -> 0 bytes examples-switch/audio/audio_sound_loading.c | 16 ++++++---- examples-switch/audio/audio_sound_loading.png | Bin 15438 -> 0 bytes examples-switch/audio/audio_stream_effects.c | 30 ++++++++++-------- .../audio/audio_stream_effects.png | Bin 16323 -> 0 bytes .../{audio => romfs}/resources/LICENSE.md | 0 .../{audio => romfs}/resources/coin.wav | Bin .../{audio => romfs}/resources/country.mp3 | Bin .../{audio => romfs}/resources/mini1111.xm | Bin .../{audio => romfs}/resources/sound.wav | Bin .../{audio => romfs}/resources/spring.wav | Bin .../{audio => romfs}/resources/target.flac | Bin .../{audio => romfs}/resources/target.ogg | Bin .../{audio => romfs}/resources/weird.wav | Bin .../textures/textures_image_drawing.c | 9 ++++-- 24 files changed, 86 insertions(+), 50 deletions(-) delete mode 100644 examples-switch/audio/audio_module_playing.png delete mode 100644 examples-switch/audio/audio_multichannel_sound.png delete mode 100644 examples-switch/audio/audio_music_stream.png delete mode 100644 examples-switch/audio/audio_raw_stream.png delete mode 100644 examples-switch/audio/audio_sound_loading.png delete mode 100644 examples-switch/audio/audio_stream_effects.png rename examples-switch/{audio => romfs}/resources/LICENSE.md (100%) rename examples-switch/{audio => romfs}/resources/coin.wav (100%) rename examples-switch/{audio => romfs}/resources/country.mp3 (100%) rename examples-switch/{audio => romfs}/resources/mini1111.xm (100%) rename examples-switch/{audio => romfs}/resources/sound.wav (100%) rename examples-switch/{audio => romfs}/resources/spring.wav (100%) rename examples-switch/{audio => romfs}/resources/target.flac (100%) rename examples-switch/{audio => romfs}/resources/target.ogg (100%) rename examples-switch/{audio => romfs}/resources/weird.wav (100%) diff --git a/.gitignore b/.gitignore index ef3f437a4..e1d3d9503 100644 --- a/.gitignore +++ b/.gitignore @@ -76,6 +76,9 @@ examples-switch/*/*.lst examples-switch/*/*.map examples-switch/*/*.nacp examples-switch/*/*.nro +projects/switch-nx/*.elf +projects/switch-nx/*.nacp +projects/switch-nx/*.nro # Ignore files build by xcode *.mode*v* diff --git a/examples-switch/Makefile b/examples-switch/Makefile index dce06e9b8..0d5f70a53 100644 --- a/examples-switch/Makefile +++ b/examples-switch/Makefile @@ -51,6 +51,11 @@ USE_EXTERNAL_GLFW ?= FALSE # NOTE: This variable is only used for PLATFORM_OS: LINUX USE_WAYLAND_DISPLAY ?= FALSE +# Define romfs folder location relative to Makefile +ifeq ($(PLATFORM),PLATFORM_NX) + ROMFS := romfs +endif + # Use cross-compiler for PLATFORM_RPI ifeq ($(PLATFORM),PLATFORM_RPI) USE_RPI_CROSS_COMPILER ?= FALSE @@ -561,7 +566,7 @@ else ifeq ($(PLATFORM),PLATFORM_NX) $(CXX) $@.o $(LDFLAGS) $(LDLIBS) -o $@.elf -D$(PLATFORM) $(NM) -CSn $@.elf > $@.lst nacptool --create "$(notdir $@)" "Raylib Example" "1.0.0" $@.nacp - elf2nro $@.elf $@.nro --icon=textures/resources/raylib_logo.jpg --nacp=$@.nacp + elf2nro $@.elf $@.nro --icon=textures/resources/raylib_logo.jpg --nacp=$@.nacp --romfsdir=$(CURDIR)/$(ROMFS) else $(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM) endif diff --git a/examples-switch/audio/audio_module_playing.c b/examples-switch/audio/audio_module_playing.c index 87dd0125d..a8c10fc6e 100644 --- a/examples-switch/audio/audio_module_playing.c +++ b/examples-switch/audio/audio_module_playing.c @@ -34,6 +34,7 @@ int main(void) const int screenWidth = 1280; const int screenHeight = 720; + // Initialize resource directory romfsInit(); SetConfigFlags(FLAG_MSAA_4X_HINT); // NOTE: Try to enable MSAA 4X @@ -58,7 +59,7 @@ int main(void) circles[i].color = colors[GetRandomValue(0, 13)]; } - Music music = LoadMusicStream("resources/mini1111.xm"); + Music music = LoadMusicStream("romfs:/resources/mini1111.xm"); music.looping = false; float pitch = 1.0f; @@ -78,14 +79,14 @@ int main(void) UpdateMusicStream(music); // Update music buffer with new stream data // Restart music playing (stop and play) - if (IsKeyPressed(KEY_SPACE)) + if (IsGamepadButtonPressed(0, GAMEPAD_BUTTON_RIGHT_FACE_LEFT)) { StopMusicStream(music); PlayMusicStream(music); } // Pause/Resume music playing - if (IsKeyPressed(KEY_P)) + if (IsGamepadButtonPressed(0, GAMEPAD_BUTTON_RIGHT_FACE_RIGHT)) { pause = !pause; @@ -93,8 +94,8 @@ int main(void) else ResumeMusicStream(music); } - if (IsKeyDown(KEY_DOWN)) pitch -= 0.01f; - else if (IsKeyDown(KEY_UP)) pitch += 0.01f; + if (IsGamepadButtonPressed(0, GAMEPAD_BUTTON_RIGHT_FACE_DOWN)) pitch -= 0.01f; + else if (IsGamepadButtonPressed(0, GAMEPAD_BUTTON_RIGHT_FACE_UP)) pitch += 0.01f; SetMusicPitch(music, pitch); diff --git a/examples-switch/audio/audio_module_playing.png b/examples-switch/audio/audio_module_playing.png deleted file mode 100644 index 8bde9879d4aa7c8f57c9bb334888b0fd52c1102e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47970 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 //------------------------------------------------------------------------------------ // Program main entry point @@ -25,12 +26,14 @@ int main(void) const int screenWidth = 1280; const int screenHeight = 720; + // Initialize resource directory + romfsInit(); InitWindow(screenWidth, screenHeight, "raylib [audio] example - Multichannel sound playing"); InitAudioDevice(); // Initialize audio device - Sound fxWav = LoadSound("resources/sound.wav"); // Load WAV audio file - Sound fxOgg = LoadSound("resources/target.ogg"); // Load OGG audio file + Sound fxWav = LoadSound("romfs:/resources/sound.wav"); // Load WAV audio file + Sound fxOgg = LoadSound("romfs:/resources/target.ogg"); // Load OGG audio file SetSoundVolume(fxWav, 0.2f); @@ -42,8 +45,8 @@ int main(void) { // Update //---------------------------------------------------------------------------------- - if (IsKeyPressed(KEY_ENTER)) PlaySoundMulti(fxWav); // Play a new wav sound instance - if (IsKeyPressed(KEY_SPACE)) PlaySoundMulti(fxOgg); // Play a new ogg sound instance + if (IsGamepadButtonPressed(0, GAMEPAD_BUTTON_RIGHT_FACE_RIGHT)) PlaySoundMulti(fxWav); // Play a new wav sound instance + if (IsGamepadButtonPressed(0, GAMEPAD_BUTTON_RIGHT_FACE_DOWN)) PlaySoundMulti(fxOgg); // Play a new ogg sound instance //---------------------------------------------------------------------------------- // Draw @@ -53,8 +56,8 @@ int main(void) ClearBackground(RAYWHITE); DrawText("MULTICHANNEL SOUND PLAYING", 20, 20, 20, GRAY); - DrawText("Press SPACE to play new ogg instance!", 200, 120, 20, LIGHTGRAY); - DrawText("Press ENTER to play new wav instance!", 200, 180, 20, LIGHTGRAY); + DrawText("Press A button to play new ogg instance!", 200, 120, 20, LIGHTGRAY); + DrawText("Press B button to play new wav instance!", 200, 180, 20, LIGHTGRAY); DrawText(TextFormat("CONCURRENT SOUNDS PLAYING: %02i", GetSoundsPlaying()), 220, 280, 20, RED); @@ -74,5 +77,6 @@ int main(void) CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- + romfsExit(); return 0; } diff --git a/examples-switch/audio/audio_multichannel_sound.png b/examples-switch/audio/audio_multichannel_sound.png deleted file mode 100644 index 4b98b26e0a05f517b5f157d7cf50ba2424866446..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16088 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 B{|Ep8 diff --git a/examples-switch/audio/audio_music_stream.c b/examples-switch/audio/audio_music_stream.c index 9210b4874..97d16b791 100644 --- a/examples-switch/audio/audio_music_stream.c +++ b/examples-switch/audio/audio_music_stream.c @@ -12,6 +12,7 @@ ********************************************************************************************/ #include "raylib.h" +#include //------------------------------------------------------------------------------------ // Program main entry point @@ -23,11 +24,13 @@ int main(void) const int screenWidth = 1280; const int screenHeight = 720; + // Initialize resource directory + romfsInit(); InitWindow(screenWidth, screenHeight, "raylib [audio] example - music playing (streaming)"); InitAudioDevice(); // Initialize audio device - Music music = LoadMusicStream("resources/country.mp3"); + Music music = LoadMusicStream("romfs:/resources/country.mp3"); PlayMusicStream(music); @@ -45,14 +48,14 @@ int main(void) UpdateMusicStream(music); // Update music buffer with new stream data // Restart music playing (stop and play) - if (IsKeyPressed(KEY_SPACE)) + if (IsGamepadButtonPressed(0, GAMEPAD_BUTTON_RIGHT_FACE_LEFT)) { StopMusicStream(music); PlayMusicStream(music); } // Pause/Resume music playing - if (IsKeyPressed(KEY_P)) + if (IsGamepadButtonPressed(0, GAMEPAD_BUTTON_RIGHT_FACE_RIGHT)) { pause = !pause; @@ -72,14 +75,14 @@ int main(void) ClearBackground(RAYWHITE); - DrawText("MUSIC SHOULD BE PLAYING!", 255, 150, 20, LIGHTGRAY); + DrawText("MUSIC SHOULD BE PLAYING!", screenWidth/2 - 150, screenHeight/2 - 50, 20, LIGHTGRAY); - DrawRectangle(200, 200, 400, 12, LIGHTGRAY); - DrawRectangle(200, 200, (int)(timePlayed*400.0f), 12, MAROON); - DrawRectangleLines(200, 200, 400, 12, GRAY); + DrawRectangle(screenWidth/2 - 200, screenHeight/2, 400, 12, LIGHTGRAY); + DrawRectangle(screenWidth/2 - 200, screenHeight/2, (int)(timePlayed*400.0f), 12, MAROON); + DrawRectangleLines(screenWidth/2 - 200, screenHeight/2, 400, 12, GRAY); - DrawText("PRESS SPACE TO RESTART MUSIC", 215, 250, 20, LIGHTGRAY); - DrawText("PRESS P TO PAUSE/RESUME MUSIC", 208, 280, 20, LIGHTGRAY); + DrawText("PRESS Y button TO RESTART MUSIC", screenWidth/2 -200, screenHeight/2 + 50, 20, LIGHTGRAY); + DrawText("PRESS A button TO PAUSE/RESUME MUSIC", screenWidth/2 -200, screenHeight/2 + 80, 20, LIGHTGRAY); EndDrawing(); //---------------------------------------------------------------------------------- @@ -94,5 +97,6 @@ int main(void) CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- + romfsExit(); return 0; } diff --git a/examples-switch/audio/audio_music_stream.png b/examples-switch/audio/audio_music_stream.png deleted file mode 100644 index f8b14e15937cd3638cf5eea0ed7ed5d21fca7572..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15043 zcmeAS@N?(olHy`uVBq!ia0y~yU{+vYU_8XZ1{4ubUVDOp!K%yC#WAEJF8R-|udnOd z0u7{?7AxW)N;nvoT?~-pZM-NTft6saYCVv_o?^1Lx9va%M-LXlpr_2iP52;oNuY)e z+>I9{CtP%~#pMi#?E(^S8+z2X;dH|;h#NNIbOXoaZp#Vyb zqoFVw3Zvx$xX>Og9YOWlXef+^0<3v6nifXW!f0ARZtIWch|wG|nj=PY1bQEPv|Jc1 z7e>p4(Q;w5T);N|Ia)f7mX4#P<7nwfZ0V?=Sn%^xDw}{D??3Qd$V5@5#j+DFirC|s zI!Tb^eGO48$+RKRJvKIW5fekK?Z#h)FO|)%B)&Ur>gDAjH{Ev0uh}u*g*LU{dg#2a z_6i?=(%I%#?UjokINRP^`7}Rkss5J_OTu@_uB~@-PB39{OXKJ{*U+=<5575>7d$62 zlB9VX1?8Ap(u^{;+ReTqSd`?R(J8xA)%2EUss7TFU19$ggcYfmw#&wfH?RWV~n|{yz`Y< zbI|Mk%$|!pW>QSfhAeDZZ7C*OA-SzbKw>VVr0+}I(_WAXp(8-8ixnC87=!!|E;PB( zaW~p1B2DK+>H8P5>`Ru4I6Z9DwwZlm(01gTC{9yS#=i`jh(i65Xh!(N(=yCeQMF zF|~h%sc~1{xr~k0;8@?}4E8!ZtQ>)x4YTxuF4z&mx4|+UT#Qk3-x<&90Y;-mJHy&E z1Gn!@JN zITP;{&9El#Qzw<0}40b{3S2W@Z;GJNiA3L zrWQU(QpfHD(Ddap9L@tyt3DJ5hwI8JP`H9J7dp|9r)Y2sm|$~oIssG+nBbVh1#0>O z$seKp$Ym{ZP=FGNH7sheIU!*SFln%1xD2MWEgn)HyuuLxyo>`sN85N27)estr?Eki zQwK@^tMI0OU^qic1+0M$iX>*7k#txeQjUE^4teBs2PzIg;d}#UID;Z76Bg*0s(!SB zGs7yJ8D=yyfHFfvs!0$ymJ8Ysc*-un_&`!o@xa!aM;S5D48m~L$ss(v+{6T;3RuJl zt+}|w5KlEbxE4{W*E&3&~dlX%rKf6 zMl-``W`K>ej`kTwn@OY1q|u>O*o^9E2bxM9Xa)u;Q7+vqrCZU!&8ZBYu6{1-oD!M< Ded)im diff --git a/examples-switch/audio/audio_raw_stream.c b/examples-switch/audio/audio_raw_stream.c index 7c07975a4..c332dcee4 100644 --- a/examples-switch/audio/audio_raw_stream.c +++ b/examples-switch/audio/audio_raw_stream.c @@ -82,6 +82,8 @@ int main(void) // Position read in to determine next frequency Vector2 mousePosition = { -100.0f, -100.0f }; + const int GAMEPAD = 0; + Vector2 thumbPosition = { screenWidth/2, screenHeight/2 }; /* // Cycles per second (hz) @@ -108,15 +110,20 @@ int main(void) // Update //---------------------------------------------------------------------------------- - // Sample mouse input. - mousePosition = GetMousePosition(); - - if (IsMouseButtonDown(MOUSE_BUTTON_LEFT)) + // Sample mouse input + if (IsGamepadAvailable(GAMEPAD)) { - float fp = (float)(mousePosition.y); + thumbPosition.x += (float) GetGamepadAxisMovement(GAMEPAD, 0) * 15; + thumbPosition.y -= (float) GetGamepadAxisMovement(GAMEPAD, 1) * 15; + } + + + if (IsGamepadButtonPressed(0, GAMEPAD_BUTTON_RIGHT_FACE_RIGHT)) + { + float fp = (float)(thumbPosition.y); frequency = 40.0f + (float)(fp); - float pan = (float)(mousePosition.x) / (float)screenWidth; + float pan = (float)(thumbPosition.x) / (float)screenWidth; SetAudioStreamPan(stream, pan); } @@ -185,7 +192,7 @@ int main(void) ClearBackground(RAYWHITE); DrawText(TextFormat("sine frequency: %i",(int)frequency), GetScreenWidth() - 220, 10, 20, RED); - DrawText("click mouse button to change frequency or pan", 10, 10, 20, DARKGRAY); + DrawText("Press A button to change frequency and pan with Left Thumbstick", 10, 10, 20, DARKGRAY); // Draw the current buffer state proportionate to the screen for (int i = 0; i < screenWidth; i++) @@ -195,6 +202,7 @@ int main(void) DrawPixelV(position, RED); } + DrawCircle(thumbPosition.x, thumbPosition.y, 20, DARKGRAY); EndDrawing(); //---------------------------------------------------------------------------------- diff --git a/examples-switch/audio/audio_raw_stream.png b/examples-switch/audio/audio_raw_stream.png deleted file mode 100644 index 344f4a71077431c9f50c72e2815552acef26f7ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16736 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 diff --git a/examples-switch/audio/audio_sound_loading.c b/examples-switch/audio/audio_sound_loading.c index 53c15a748..e201e6417 100644 --- a/examples-switch/audio/audio_sound_loading.c +++ b/examples-switch/audio/audio_sound_loading.c @@ -12,6 +12,7 @@ ********************************************************************************************/ #include "raylib.h" +#include //------------------------------------------------------------------------------------ // Program main entry point @@ -23,12 +24,14 @@ int main(void) const int screenWidth = 1280; const int screenHeight = 720; + // Initialize resource directory + romfsInit(); InitWindow(screenWidth, screenHeight, "raylib [audio] example - sound loading and playing"); InitAudioDevice(); // Initialize audio device - Sound fxWav = LoadSound("resources/sound.wav"); // Load WAV audio file - Sound fxOgg = LoadSound("resources/target.ogg"); // Load OGG audio file + Sound fxWav = LoadSound("romfs:/resources/sound.wav"); // Load WAV audio file + Sound fxOgg = LoadSound("romfs:/resources/target.ogg"); // Load OGG audio file SetTargetFPS(60); // Set our game to run at 60 frames-per-second //-------------------------------------------------------------------------------------- @@ -38,8 +41,8 @@ int main(void) { // Update //---------------------------------------------------------------------------------- - if (IsKeyPressed(KEY_SPACE)) PlaySound(fxWav); // Play WAV sound - if (IsKeyPressed(KEY_ENTER)) PlaySound(fxOgg); // Play OGG sound + if (IsGamepadButtonPressed(0, GAMEPAD_BUTTON_RIGHT_FACE_RIGHT)) PlaySound(fxWav); // Play WAV sound + if (IsGamepadButtonPressed(0, GAMEPAD_BUTTON_RIGHT_FACE_DOWN)) PlaySound(fxOgg); // Play OGG sound //---------------------------------------------------------------------------------- // Draw @@ -48,8 +51,8 @@ int main(void) ClearBackground(RAYWHITE); - DrawText("Press SPACE to PLAY the WAV sound!", 200, 180, 20, LIGHTGRAY); - DrawText("Press ENTER to PLAY the OGG sound!", 200, 220, 20, LIGHTGRAY); + DrawText("Press button A to PLAY the WAV sound!", 200, 180, 20, LIGHTGRAY); + DrawText("Press button B to PLAY the OGG sound!", 200, 220, 20, LIGHTGRAY); EndDrawing(); //---------------------------------------------------------------------------------- @@ -65,5 +68,6 @@ int main(void) CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- + romfsExit(); return 0; } \ No newline at end of file diff --git a/examples-switch/audio/audio_sound_loading.png b/examples-switch/audio/audio_sound_loading.png deleted file mode 100644 index 24071ce3ccc7e93f29e8eb9d3655c9d90ec585bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15438 zcmeHOYfuwc6y87zD*^^VC18LEJ_-c_L{Tt2BO%H|kt+3pX>~MEs?-J_1O*fp8DoIr zi&!+0s6_>327I7YG}vkbYG_&z@xfFWBAV(DM+K&IAGYIYHp34)`s4oDAG_JP=bm%E z?>l?WP2v1Fo{g206$C*x{Ag|h1ev=*5akMNf!>+0vg#TH%^t_+h9_=HUO6=Iye}JB zz;ZHEFi9>Vm~vDz-^C_ZLvu8Gp=9Pa3N2T$t9BucLRezt!jfzVi?Y9L{2}_n>Cw3w zda;JfAu}WFEY0yrj%3OiQXA?C8)`^xz)bj!#6Hx7r-TWKzyvf9zzbM90xtkB0A9dJ z8?Ym$YrqS@3;&ikAQwO`fLwU9)(40HhyaKHhwf}v{OH-y z0cq@3@1uupV!QDo1#Bu@fVaE%{7Y)@g!Ps;H7QD!$)-j{LL1@YAlZ=j&UDA`B+xJ>u6Mp4vLzxtj z)5&pBN>7#s`Oow2zaC3{DAkraA2i(iI`Z+3nU!65is)&c@a=g|>;!ke+;D1i!%$@E>;F<6yr_Zev7xmx{=}+_ zQCM;yYl$u28^M-y!yU|;q^tyS-saQQjAM(nG$)Eni-&@l<4r}>*7RoA-d8!TS>dU( zrfV0L=~)N-7%k6Huc~Q|ekFeIwYgc>nAUA zt#m)sq~AsVtSct1-XqXU({ZQ?39Qr~+i>oIe^IgyYKwsz{>+f814YAQ`&{ ztFH=Snk_!4N%S`{s1aZ@rD4relM|!7Ml9?>&PE4H=%h)$6vk&pX#SDG44pXHkUfK~ zFA+Za-K39f@ysI`YylIn-~ccDzg`Gi4KMpCtBjJzGf&3^Bj+VP={&mE1b;wkVG_=2 z4{Rw3ygE@v29KNmy|WK%OWu`H%NgetJ6Yms8NM|obJK?Goo%&oF}2db{bF5t2%K+! zUMIa*R(4M(s?BouMJzpsrGH=``GH_d&IsAEN!ngi+o)`ljPVgiGYUQ08dTnY>$(qV zvLcfU!`7bDEWI!6_Iu3|4-p*g9duJ@M|A=l@5;kr+J!SREyv1`5Z}l3t4Ey1Ug_0Q zw@?pgMQmBwvjXVwQ$&YLjw)B`x}*iF7~GlM?OGF{s9k?kxD}@qw@_TZ7TzSIkGF*L zQHmeSozM8zgI!UePfRU~UpvWdgVJ%|1s%seqFQ`?S9U}f>dX?E52^=V!}2@xsyUI~ z7b_W|TA$q-RcX73R~?eMCtHcw*ZsOUv)dIPsjFtF6V49^dKO-| zNUu6ch)_HsLOmvu2oDLWyMzeEEEKQWEa#KMxB>O?NU=7U1t5A4xbJxy-P~vXs=n#xVoo9T}FD0l~GhlEZakK4a9?ZWqya z7HSvsC8u=9>Ou=`)+O|t*QxS5)8%JFmUVG`H(DoVhQA1GW+(!fik3nR%`JootJ;J^ zbDs6Jof_t;#2A`TK{j^jwKG!$xG8jL#vh|7T+3v2pc0!#Djy0)v4%}@Vgh|>h=9}Q zCgBw9rYQV|%mhKLxxdW9nDs=6R}dk7WGckisf-VJA|h9V3apdyLnD~zZe_B9&`lo4 zt7>CA?HzB1`5CKYNCJTc$(-aFT0i>|`SRREzTkdtH?}%)4-HZZNgAO)c$rUNfwb89 z2=o&>Idhbx$U%eCH30`hCH}o)Y^MMW?_=}}!0=HNlK>1hln;Ma4uAoG0h4r4CgEpl zL74=~BmjojB`N>|00RI60K@CX1^@#90{{a6!+#w>@XY|e8StJmPzIn3KpEbjGC)v7 Y // Required for: NULL +#include // Required delay effect variables static float *delayBuffer = NULL; @@ -37,11 +38,13 @@ int main(void) const int screenWidth = 1280; const int screenHeight = 720; + // Initialize resource directory + romfsInit(); InitWindow(screenWidth, screenHeight, "raylib [audio] example - stream effects"); InitAudioDevice(); // Initialize audio device - Music music = LoadMusicStream("resources/country.mp3"); + Music music = LoadMusicStream("romfs:/resources/country.mp3"); // Allocate buffer for the delay effect delayBufferSize = 48000*2; // 1 second delay (device sampleRate*channels) @@ -66,14 +69,14 @@ int main(void) UpdateMusicStream(music); // Update music buffer with new stream data // Restart music playing (stop and play) - if (IsKeyPressed(KEY_SPACE)) + if (IsGamepadButtonPressed(0, GAMEPAD_BUTTON_RIGHT_FACE_LEFT)) { StopMusicStream(music); PlayMusicStream(music); } // Pause/Resume music playing - if (IsKeyPressed(KEY_P)) + if (IsGamepadButtonPressed(0, GAMEPAD_BUTTON_RIGHT_FACE_RIGHT)) { pause = !pause; @@ -82,7 +85,7 @@ int main(void) } // Add/Remove effect: lowpass filter - if (IsKeyPressed(KEY_F)) + if (IsGamepadButtonPressed(0, GAMEPAD_BUTTON_RIGHT_FACE_UP)) { enableEffectLPF = !enableEffectLPF; if (enableEffectLPF) AttachAudioStreamProcessor(music.stream, AudioProcessEffectLPF); @@ -90,7 +93,7 @@ int main(void) } // Add/Remove effect: delay - if (IsKeyPressed(KEY_D)) + if (IsGamepadButtonPressed(0, GAMEPAD_BUTTON_RIGHT_FACE_DOWN)) { enableEffectDelay = !enableEffectDelay; if (enableEffectDelay) AttachAudioStreamProcessor(music.stream, AudioProcessEffectDelay); @@ -109,17 +112,17 @@ int main(void) ClearBackground(RAYWHITE); - DrawText("MUSIC SHOULD BE PLAYING!", 245, 150, 20, LIGHTGRAY); + DrawText("MUSIC SHOULD BE PLAYING!", screenWidth/2 - 200, 230, 20, LIGHTGRAY); - DrawRectangle(200, 180, 400, 12, LIGHTGRAY); - DrawRectangle(200, 180, (int)(timePlayed*400.0f), 12, MAROON); - DrawRectangleLines(200, 180, 400, 12, GRAY); + DrawRectangle(screenWidth/2 - 200, 260, 400, 12, LIGHTGRAY); + DrawRectangle(screenWidth/2 - 200, 260, (int)(timePlayed*400.0f), 12, MAROON); + DrawRectangleLines(screenWidth/2 - 200, 260, 400, 12, GRAY); - DrawText("PRESS SPACE TO RESTART MUSIC", 215, 230, 20, LIGHTGRAY); - DrawText("PRESS P TO PAUSE/RESUME MUSIC", 208, 260, 20, LIGHTGRAY); + DrawText("PRESS Y button TO RESTART MUSIC", screenWidth/2 - 200, 310, 20, LIGHTGRAY); + DrawText("PRESS A button TO PAUSE/RESUME MUSIC", screenWidth/2 - 200, 340, 20, LIGHTGRAY); - DrawText(TextFormat("PRESS F TO TOGGLE LPF EFFECT: %s", enableEffectLPF? "ON" : "OFF"), 200, 320, 20, GRAY); - DrawText(TextFormat("PRESS D TO TOGGLE DELAY EFFECT: %s", enableEffectDelay? "ON" : "OFF"), 180, 350, 20, GRAY); + DrawText(TextFormat("PRESS X button TO TOGGLE LPF EFFECT: %s", enableEffectLPF? "ON" : "OFF"), screenWidth/2 - 200, 400, 20, GRAY); + DrawText(TextFormat("PRESS B button TO TOGGLE DELAY EFFECT: %s", enableEffectDelay? "ON" : "OFF"), screenWidth/2 - 200, 430, 20, GRAY); EndDrawing(); //---------------------------------------------------------------------------------- @@ -136,6 +139,7 @@ int main(void) CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- + romfsExit(); return 0; } diff --git a/examples-switch/audio/audio_stream_effects.png b/examples-switch/audio/audio_stream_effects.png deleted file mode 100644 index 4aaee8b3e4718fbc5c6f738b582a353e886ecc29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16323 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 diff --git a/examples-switch/audio/resources/LICENSE.md b/examples-switch/romfs/resources/LICENSE.md similarity index 100% rename from examples-switch/audio/resources/LICENSE.md rename to examples-switch/romfs/resources/LICENSE.md diff --git a/examples-switch/audio/resources/coin.wav b/examples-switch/romfs/resources/coin.wav similarity index 100% rename from examples-switch/audio/resources/coin.wav rename to examples-switch/romfs/resources/coin.wav diff --git a/examples-switch/audio/resources/country.mp3 b/examples-switch/romfs/resources/country.mp3 similarity index 100% rename from examples-switch/audio/resources/country.mp3 rename to examples-switch/romfs/resources/country.mp3 diff --git a/examples-switch/audio/resources/mini1111.xm b/examples-switch/romfs/resources/mini1111.xm similarity index 100% rename from examples-switch/audio/resources/mini1111.xm rename to examples-switch/romfs/resources/mini1111.xm diff --git a/examples-switch/audio/resources/sound.wav b/examples-switch/romfs/resources/sound.wav similarity index 100% rename from examples-switch/audio/resources/sound.wav rename to examples-switch/romfs/resources/sound.wav diff --git a/examples-switch/audio/resources/spring.wav b/examples-switch/romfs/resources/spring.wav similarity index 100% rename from examples-switch/audio/resources/spring.wav rename to examples-switch/romfs/resources/spring.wav diff --git a/examples-switch/audio/resources/target.flac b/examples-switch/romfs/resources/target.flac similarity index 100% rename from examples-switch/audio/resources/target.flac rename to examples-switch/romfs/resources/target.flac diff --git a/examples-switch/audio/resources/target.ogg b/examples-switch/romfs/resources/target.ogg similarity index 100% rename from examples-switch/audio/resources/target.ogg rename to examples-switch/romfs/resources/target.ogg diff --git a/examples-switch/audio/resources/weird.wav b/examples-switch/romfs/resources/weird.wav similarity index 100% rename from examples-switch/audio/resources/weird.wav rename to examples-switch/romfs/resources/weird.wav diff --git a/examples-switch/textures/textures_image_drawing.c b/examples-switch/textures/textures_image_drawing.c index f7e7a86fc..688bb7ace 100644 --- a/examples-switch/textures/textures_image_drawing.c +++ b/examples-switch/textures/textures_image_drawing.c @@ -14,6 +14,7 @@ ********************************************************************************************/ #include "raylib.h" +#include //------------------------------------------------------------------------------------ // Program main entry point @@ -25,16 +26,18 @@ int main(void) const int screenWidth = 1280; const int screenHeight = 720; + // Initialize resource directory + romfsInit(); InitWindow(screenWidth, screenHeight, "raylib [textures] example - image drawing"); // NOTE: Textures MUST be loaded after Window initialization (OpenGL context is required) - Image cat = LoadImage("resources/cat.png"); // Load image in CPU memory (RAM) + Image cat = LoadImage("romfs:/resources/cat.png"); // Load image in CPU memory (RAM) ImageCrop(&cat, (Rectangle){ 100, 10, 280, 380 }); // Crop an image piece ImageFlipHorizontal(&cat); // Flip cropped image horizontally ImageResize(&cat, 150, 200); // Resize flipped-cropped image - Image parrots = LoadImage("resources/parrots.png"); // Load image in CPU memory (RAM) + Image parrots = LoadImage("romfs:/resources/parrots.png"); // Load image in CPU memory (RAM) // Draw one image over the other with a scaling of 1.5f ImageDraw(&parrots, cat, (Rectangle){ 0, 0, (float)cat.width, (float)cat.height }, (Rectangle){ 30, 40, cat.width*1.5f, cat.height*1.5f }, WHITE); @@ -91,6 +94,6 @@ int main(void) CloseWindow(); // Close window and OpenGL context //-------------------------------------------------------------------------------------- - + romfsExit(); return 0; } \ No newline at end of file