mirror of
https://github.com/raysan5/raylib.git
synced 2025-12-25 10:22:33 -05:00
Compare commits
8 Commits
49868b356f
...
0747e9b5c1
| Author | SHA1 | Date | |
|---|---|---|---|
| 0747e9b5c1 | |||
| c6f4c8e3e0 | |||
| c0179288ba | |||
| 8161475c28 | |||
| 30cd36a8a9 | |||
| ba65bd7f99 | |||
| 67f24b3b41 | |||
| 29173a4978 |
5
.gitignore
vendored
5
.gitignore
vendored
@ -63,12 +63,13 @@ emsdk
|
||||
|
||||
# Ignore wasm data in examples/
|
||||
examples/**/*
|
||||
!examples/**/*.*
|
||||
!examples/**/*/
|
||||
examples/**/*.exe
|
||||
examples/**/*.wasm
|
||||
examples/**/*.data
|
||||
examples/**/*.js
|
||||
examples/**/*.html
|
||||
!examples/**/*.*
|
||||
!examples/**/*/
|
||||
examples/**/logs/*
|
||||
|
||||
# Ignore files build by xcode
|
||||
|
||||
@ -35,6 +35,12 @@ int main(void)
|
||||
|
||||
float timePlayed = 0.0f; // Time played normalized [0.0f..1.0f]
|
||||
bool pause = false; // Music playing paused
|
||||
|
||||
float pan = 0.0f; // Default audio pan center [-1.0f..1.0f]
|
||||
SetMusicPan(music, pan);
|
||||
|
||||
float volume = 0.8f; // Default audio volume [0.0f..1.0f]
|
||||
SetMusicVolume(music, volume);
|
||||
|
||||
SetTargetFPS(30); // Set our game to run at 30 frames-per-second
|
||||
//--------------------------------------------------------------------------------------
|
||||
@ -61,6 +67,34 @@ int main(void)
|
||||
if (pause) PauseMusicStream(music);
|
||||
else ResumeMusicStream(music);
|
||||
}
|
||||
|
||||
// Set audio pan
|
||||
if (IsKeyDown(KEY_LEFT))
|
||||
{
|
||||
pan -= 0.05f;
|
||||
if (pan < -1.0f) pan = -1.0f;
|
||||
SetMusicPan(music, pan);
|
||||
}
|
||||
else if (IsKeyDown(KEY_RIGHT))
|
||||
{
|
||||
pan += 0.05f;
|
||||
if (pan > 1.0f) pan = 1.0f;
|
||||
SetMusicPan(music, pan);
|
||||
}
|
||||
|
||||
// Set audio volume
|
||||
if (IsKeyDown(KEY_DOWN))
|
||||
{
|
||||
volume -= 0.05f;
|
||||
if (volume < 0.0f) volume = 0.0f;
|
||||
SetMusicVolume(music, volume);
|
||||
}
|
||||
else if (IsKeyDown(KEY_UP))
|
||||
{
|
||||
volume += 0.05f;
|
||||
if (volume > 1.0f) volume = 1.0f;
|
||||
SetMusicVolume(music, volume);
|
||||
}
|
||||
|
||||
// Get normalized time played for current music stream
|
||||
timePlayed = GetMusicTimePlayed(music)/GetMusicTimeLength(music);
|
||||
@ -75,6 +109,11 @@ int main(void)
|
||||
ClearBackground(RAYWHITE);
|
||||
|
||||
DrawText("MUSIC SHOULD BE PLAYING!", 255, 150, 20, LIGHTGRAY);
|
||||
|
||||
DrawText("LEFT-RIGHT for PAN CONTROL", 320, 74, 10, DARKBLUE);
|
||||
DrawRectangle(300, 100, 200, 12, LIGHTGRAY);
|
||||
DrawRectangleLines(300, 100, 200, 12, GRAY);
|
||||
DrawRectangle(300 + (pan + 1.0)/2.0f*200 - 5, 92, 10, 28, DARKGRAY);
|
||||
|
||||
DrawRectangle(200, 200, 400, 12, LIGHTGRAY);
|
||||
DrawRectangle(200, 200, (int)(timePlayed*400.0f), 12, MAROON);
|
||||
@ -82,6 +121,11 @@ int main(void)
|
||||
|
||||
DrawText("PRESS SPACE TO RESTART MUSIC", 215, 250, 20, LIGHTGRAY);
|
||||
DrawText("PRESS P TO PAUSE/RESUME MUSIC", 208, 280, 20, LIGHTGRAY);
|
||||
|
||||
DrawText("UP-DOWN for VOLUME CONTROL", 320, 334, 10, DARKGREEN);
|
||||
DrawRectangle(300, 360, 200, 12, LIGHTGRAY);
|
||||
DrawRectangleLines(300, 360, 200, 12, GRAY);
|
||||
DrawRectangle(300 + volume*200 - 5, 352, 10, 28, DARKGRAY);
|
||||
|
||||
EndDrawing();
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
@ -69,6 +69,7 @@ int main(void)
|
||||
};
|
||||
|
||||
SetSoundPosition(camera, sound, spherePos, 20.0f);
|
||||
|
||||
if (!IsSoundPlaying(sound)) PlaySound(sound);
|
||||
//----------------------------------------------------------------------------------
|
||||
|
||||
@ -94,6 +95,8 @@ int main(void)
|
||||
|
||||
CloseWindow(); // Close window and OpenGL context
|
||||
//--------------------------------------------------------------------------------------
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
#version 100
|
||||
|
||||
precision mediump float;
|
||||
|
||||
#extension GL_OES_standard_derivatives : enable
|
||||
|
||||
precision mediump float;
|
||||
|
||||
// Input vertex attributes (from vertex shader)
|
||||
varying vec2 fragTexCoord;
|
||||
varying vec4 fragColor;
|
||||
|
||||
12
src/raudio.c
12
src/raudio.c
@ -593,7 +593,7 @@ AudioBuffer *LoadAudioBuffer(ma_format format, ma_uint32 channels, ma_uint32 sam
|
||||
// Init audio buffer values
|
||||
audioBuffer->volume = 1.0f;
|
||||
audioBuffer->pitch = 1.0f;
|
||||
audioBuffer->pan = 0.5f;
|
||||
audioBuffer->pan = 0.0f; // Center
|
||||
|
||||
audioBuffer->callback = NULL;
|
||||
audioBuffer->processor = NULL;
|
||||
@ -720,7 +720,7 @@ void SetAudioBufferPitch(AudioBuffer *buffer, float pitch)
|
||||
// Set pan for an audio buffer
|
||||
void SetAudioBufferPan(AudioBuffer *buffer, float pan)
|
||||
{
|
||||
if (pan < 0.0f) pan = 0.0f;
|
||||
if (pan < -1.0f) pan = -1.0f;
|
||||
else if (pan > 1.0f) pan = 1.0f;
|
||||
|
||||
if (buffer != NULL)
|
||||
@ -985,10 +985,10 @@ Sound LoadSoundAlias(Sound source)
|
||||
audioBuffer->sizeInFrames = source.stream.buffer->sizeInFrames;
|
||||
audioBuffer->data = source.stream.buffer->data;
|
||||
|
||||
// initalize the buffer as if it was new
|
||||
// Initalize the buffer as if it was new
|
||||
audioBuffer->volume = 1.0f;
|
||||
audioBuffer->pitch = 1.0f;
|
||||
audioBuffer->pan = 0.5f;
|
||||
audioBuffer->pan = 0.0f; // Center
|
||||
|
||||
sound.frameCount = source.frameCount;
|
||||
sound.stream.sampleRate = AUDIO.System.device.sampleRate;
|
||||
@ -2605,8 +2605,8 @@ static void MixAudioFrames(float *framesOut, const float *framesIn, ma_uint32 fr
|
||||
|
||||
if (channels == 2) // We consider panning
|
||||
{
|
||||
const float left = buffer->pan;
|
||||
const float right = 1.0f - left;
|
||||
const float right = (buffer->pan + 1.0f)/2.0f; // Normalize: [-1..1] -> [0..1]
|
||||
const float left = 1.0f - right;
|
||||
|
||||
// Fast sine approximation in [0..1] for pan law: y = 0.5f*x*(3 - x*x);
|
||||
const float levels[2] = { localVolume*0.5f*left*(3.0f - left*left), localVolume*0.5f*right*(3.0f - right*right) };
|
||||
|
||||
@ -1672,7 +1672,7 @@ RLAPI void ResumeSound(Sound sound); // Resume
|
||||
RLAPI bool IsSoundPlaying(Sound sound); // Check if a sound is currently playing
|
||||
RLAPI void SetSoundVolume(Sound sound, float volume); // Set volume for a sound (1.0 is max level)
|
||||
RLAPI void SetSoundPitch(Sound sound, float pitch); // Set pitch for a sound (1.0 is base level)
|
||||
RLAPI void SetSoundPan(Sound sound, float pan); // Set pan for a sound (0.5 is center)
|
||||
RLAPI void SetSoundPan(Sound sound, float pan); // Set pan for a sound (-1.0 left, 0.0 center, 1.0 right)
|
||||
RLAPI Wave WaveCopy(Wave wave); // Copy a wave to a new wave
|
||||
RLAPI void WaveCrop(Wave *wave, int initFrame, int finalFrame); // Crop a wave to defined frames range
|
||||
RLAPI void WaveFormat(Wave *wave, int sampleRate, int sampleSize, int channels); // Convert wave data to desired format
|
||||
@ -1693,7 +1693,7 @@ RLAPI void ResumeMusicStream(Music music); // Resume
|
||||
RLAPI void SeekMusicStream(Music music, float position); // Seek music to a position (in seconds)
|
||||
RLAPI void SetMusicVolume(Music music, float volume); // Set volume for music (1.0 is max level)
|
||||
RLAPI void SetMusicPitch(Music music, float pitch); // Set pitch for a music (1.0 is base level)
|
||||
RLAPI void SetMusicPan(Music music, float pan); // Set pan for a music (0.5 is center)
|
||||
RLAPI void SetMusicPan(Music music, float pan); // Set pan for a music (-1.0 left, 0.0 center, 1.0 right)
|
||||
RLAPI float GetMusicTimeLength(Music music); // Get music time length (in seconds)
|
||||
RLAPI float GetMusicTimePlayed(Music music); // Get current music time played (in seconds)
|
||||
|
||||
|
||||
21
tools/rexm/reports/examples_testing_drm.md
Normal file
21
tools/rexm/reports/examples_testing_drm.md
Normal file
@ -0,0 +1,21 @@
|
||||
# EXAMPLES COLLECTION - TESTING REPORT
|
||||
|
||||
## Tested Platform: DRM
|
||||
|
||||
```
|
||||
Example automated testing elements validated:
|
||||
- [CWARN] : Compilation WARNING messages
|
||||
- [LWARN] : Log WARNING messages count
|
||||
- [INIT] : Initialization
|
||||
- [CLOSE] : Closing
|
||||
- [ASSETS] : Assets loading
|
||||
- [RLGL] : OpenGL-wrapped initialization
|
||||
- [PLAT] : Platform initialization
|
||||
- [FONT] : Font default initialization
|
||||
- [TIMER] : Timer initialization
|
||||
```
|
||||
| **EXAMPLE NAME** | [CWARN] | [LWARN] | [INIT] | [CLOSE] | [ASSETS] | [RLGL] | [PLAT] | [FONT] | [TIMER] |
|
||||
|:---------------------------------|:-------:|:-------:|:------:|:-------:|:--------:|:------:|:------:|:------:|:-------:|
|
||||
| text_font_loading | 0 | 10 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| text_codepoints_loading | 0 | 1 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| models_animation_playing | 0 | 1 | ✔ | ✔ | ❌ | ✔ | ✔ | ✔ | ✔ |
|
||||
@ -931,23 +931,28 @@ int main(int argc, char *argv[])
|
||||
#if defined(_WIN32)
|
||||
LOG("INFO: [%s] Building example for PLATFORM_DESKTOP (Host: Win32)\n", exName);
|
||||
system(TextFormat("mingw32-make -C %s %s/%s PLATFORM=PLATFORM_DESKTOP -B", exBasePath, exCategory, exName));
|
||||
#elif defined(PLATFORM_DRM)
|
||||
LOG("INFO: [%s] Building example for PLATFORM_DRM (Host: POSIX)\n", exName);
|
||||
system(TextFormat("make -C %s %s/%s PLATFORM=PLATFORM_DRM -B > %s/%s/logs/%s.build.log 2>&1",
|
||||
exBasePath, exCategory, exName, exBasePath, exCategory, exName));
|
||||
#else
|
||||
LOG("INFO: [%s] Building example for PLATFORM_DESKTOP (Host: POSIX)\n", exName);
|
||||
system(TextFormat("make -C %s %s/%s PLATFORM=PLATFORM_DESKTOP -B", exBasePath, exCategory, exName));
|
||||
#endif
|
||||
|
||||
#if !defined(PLATFORM_DRM)
|
||||
// Build example for PLATFORM_WEB
|
||||
// Build: raylib.com/examples/<category>/<category>_example_name.html
|
||||
// Build: raylib.com/examples/<category>/<category>_example_name.data
|
||||
// Build: raylib.com/examples/<category>/<category>_example_name.wasm
|
||||
// Build: raylib.com/examples/<category>/<category>_example_name.js
|
||||
#if defined(_WIN32)
|
||||
#if defined(_WIN32)
|
||||
LOG("INFO: [%s] Building example for PLATFORM_WEB (Host: Win32)\n", exName);
|
||||
system(TextFormat("mingw32-make -C %s -f Makefile.Web %s/%s PLATFORM=PLATFORM_WEB -B", exBasePath, exCategory, exName));
|
||||
#else
|
||||
#else
|
||||
LOG("INFO: [%s] Building example for PLATFORM_WEB (Host: POSIX)\n", exName);
|
||||
system(TextFormat("make -C %s -f Makefile.Web %s/%s PLATFORM=PLATFORM_WEB -B", exBasePath, exCategory, exName));
|
||||
#endif
|
||||
#endif
|
||||
// Update generated .html metadata
|
||||
LOG("INFO: [%s] Updating HTML Metadata...\n", TextFormat("%s.html", exName));
|
||||
UpdateWebMetadata(TextFormat("%s/%s/%s.html", exBasePath, exCategory, exName),
|
||||
@ -963,6 +968,7 @@ int main(int argc, char *argv[])
|
||||
TextFormat("%s/%s/%s.wasm", exWebPath, exCategory, exName));
|
||||
FileCopy(TextFormat("%s/%s/%s.js", exBasePath, exCategory, exName),
|
||||
TextFormat("%s/%s/%s.js", exWebPath, exCategory, exName));
|
||||
#endif // !PLATFORM_DRM
|
||||
|
||||
// Once example processed, free memory from list
|
||||
RL_FREE(exBuildList[i]);
|
||||
@ -1618,6 +1624,10 @@ int main(int argc, char *argv[])
|
||||
LOG("INFO: [%s] Building example for PLATFORM_DESKTOP (Host: Win32)\n", exName);
|
||||
system(TextFormat("mingw32-make -C %s %s/%s PLATFORM=PLATFORM_DESKTOP -B > %s/%s/logs/%s.build.log 2>&1",
|
||||
exBasePath, exCategory, exName, exBasePath, exCategory, exName));
|
||||
#elif defined(PLATFORM_DRM)
|
||||
LOG("INFO: [%s] Building example for PLATFORM_DRM (Host: POSIX)\n", exName);
|
||||
system(TextFormat("make -C %s %s/%s PLATFORM=PLATFORM_DRM -B > %s/%s/logs/%s.build.log 2>&1",
|
||||
exBasePath, exCategory, exName, exBasePath, exCategory, exName));
|
||||
#else
|
||||
LOG("INFO: [%s] Building example for PLATFORM_DESKTOP (Host: POSIX)\n", exName);
|
||||
system(TextFormat("make -C %s %s/%s PLATFORM=PLATFORM_DESKTOP -B > %s/%s/logs/%s.build.log 2>&1",
|
||||
@ -1631,7 +1641,12 @@ int main(int argc, char *argv[])
|
||||
// STEP 3: Run example with required arguments
|
||||
// NOTE: Not easy to retrieve process return value from system(), it's platform dependant
|
||||
ChangeDirectory(TextFormat("%s/%s", exBasePath, exCategory));
|
||||
|
||||
#if defined(_WIN32)
|
||||
system(TextFormat("%s --frames 2 > logs/%s.log", exName, exName));
|
||||
#else
|
||||
system(TextFormat("./%s --frames 2 > logs/%s.log", exName, exName));
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
} break;
|
||||
@ -1715,6 +1730,11 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
#if defined(BUILD_TESTING_WEB)
|
||||
if (TextFindIndex(exTestLogLines[k], "WARNING: GL: NPOT") >= 0) continue; // Ignore web-specific warning
|
||||
#endif
|
||||
#if defined(PLATFORM_DRM)
|
||||
if (TextFindIndex(exTestLogLines[k], "WARNING: DISPLAY: No graphic") >= 0) continue; // Ignore specific warning
|
||||
if (TextFindIndex(exTestLogLines[k], "WARNING: GetCurrentMonitor()") >= 0) continue; // Ignore specific warning
|
||||
if (TextFindIndex(exTestLogLines[k], "WARNING: SetWindowPosition()") >= 0) continue; // Ignore specific warning
|
||||
#endif
|
||||
if (TextFindIndex(exTestLogLines[k], "WARNING") >= 0) testing[i].warnings++;
|
||||
}
|
||||
@ -1758,7 +1778,7 @@ int main(int argc, char *argv[])
|
||||
|:---------------------------------|:-------:|:-------:|:------:|:-------:|:--------:|:------:|:------:|:------:|:-------:|
|
||||
| core_basic window | 0 | 0 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
*/
|
||||
LOG("INFO: [examples_testing.md] Generating examples testing report...\n");
|
||||
LOG("INFO: [examples_testing_os.md] Generating examples testing report...\n");
|
||||
|
||||
char *report = (char *)RL_CALLOC(REXM_MAX_BUFFER_SIZE, 1);
|
||||
|
||||
|
||||
@ -11897,7 +11897,7 @@
|
||||
},
|
||||
{
|
||||
"name": "SetSoundPan",
|
||||
"description": "Set pan for a sound (0.5 is center)",
|
||||
"description": "Set pan for a sound (-1.0 left, 0.0 center, 1.0 right)",
|
||||
"returnType": "void",
|
||||
"params": [
|
||||
{
|
||||
@ -12150,7 +12150,7 @@
|
||||
},
|
||||
{
|
||||
"name": "SetMusicPan",
|
||||
"description": "Set pan for a music (0.5 is center)",
|
||||
"description": "Set pan for a music (-1.0 left, 0.0 center, 1.0 right)",
|
||||
"returnType": "void",
|
||||
"params": [
|
||||
{
|
||||
|
||||
@ -8105,7 +8105,7 @@ return {
|
||||
},
|
||||
{
|
||||
name = "SetSoundPan",
|
||||
description = "Set pan for a sound (0.5 is center)",
|
||||
description = "Set pan for a sound (-1.0 left, 0.0 center, 1.0 right)",
|
||||
returnType = "void",
|
||||
params = {
|
||||
{type = "Sound", name = "sound"},
|
||||
@ -8268,7 +8268,7 @@ return {
|
||||
},
|
||||
{
|
||||
name = "SetMusicPan",
|
||||
description = "Set pan for a music (0.5 is center)",
|
||||
description = "Set pan for a music (-1.0 left, 0.0 center, 1.0 right)",
|
||||
returnType = "void",
|
||||
params = {
|
||||
{type = "Music", name = "music"},
|
||||
|
||||
@ -4554,7 +4554,7 @@ Function 556: SetSoundPitch() (2 input parameters)
|
||||
Function 557: SetSoundPan() (2 input parameters)
|
||||
Name: SetSoundPan
|
||||
Return type: void
|
||||
Description: Set pan for a sound (0.5 is center)
|
||||
Description: Set pan for a sound (-1.0 left, 0.0 center, 1.0 right)
|
||||
Param[1]: sound (type: Sound)
|
||||
Param[2]: pan (type: float)
|
||||
Function 558: WaveCopy() (1 input parameters)
|
||||
@ -4660,7 +4660,7 @@ Function 575: SetMusicPitch() (2 input parameters)
|
||||
Function 576: SetMusicPan() (2 input parameters)
|
||||
Name: SetMusicPan
|
||||
Return type: void
|
||||
Description: Set pan for a music (0.5 is center)
|
||||
Description: Set pan for a music (-1.0 left, 0.0 center, 1.0 right)
|
||||
Param[1]: music (type: Music)
|
||||
Param[2]: pan (type: float)
|
||||
Function 577: GetMusicTimeLength() (1 input parameters)
|
||||
|
||||
@ -3043,7 +3043,7 @@
|
||||
<Param type="Sound" name="sound" desc="" />
|
||||
<Param type="float" name="pitch" desc="" />
|
||||
</Function>
|
||||
<Function name="SetSoundPan" retType="void" paramCount="2" desc="Set pan for a sound (0.5 is center)">
|
||||
<Function name="SetSoundPan" retType="void" paramCount="2" desc="Set pan for a sound (-1.0 left, 0.0 center, 1.0 right)">
|
||||
<Param type="Sound" name="sound" desc="" />
|
||||
<Param type="float" name="pan" desc="" />
|
||||
</Function>
|
||||
@ -3111,7 +3111,7 @@
|
||||
<Param type="Music" name="music" desc="" />
|
||||
<Param type="float" name="pitch" desc="" />
|
||||
</Function>
|
||||
<Function name="SetMusicPan" retType="void" paramCount="2" desc="Set pan for a music (0.5 is center)">
|
||||
<Function name="SetMusicPan" retType="void" paramCount="2" desc="Set pan for a music (-1.0 left, 0.0 center, 1.0 right)">
|
||||
<Param type="Music" name="music" desc="" />
|
||||
<Param type="float" name="pan" desc="" />
|
||||
</Function>
|
||||
|
||||
Reference in New Issue
Block a user