Skip to content

[audio] SIGFPE (Floating point exception) on audio load - Miniaudio issue with PipeWire? #2315

@ghost

Description

WARNING: Please, read this note carefully before submitting a new issue:

It is important to realise that this is NOT A SUPPORT FORUM, this is for reproducible BUGS with raylib ONLY.

There are lots of generous and helpful people ready to help you out on raylib Discord forum or raylib reddit.

Remember that asking for support questions here actively takes developer time away from improving raylib.


Please, before submitting a new issue verify and check:

  • I tested it on latest raylib version from master branch
  • I checked there is no similar issue already reported
  • My code has no errors or misuse of raylib

Issue description

I'm experiencing an issue with miniaudio and pipewire on Linux which is causing a "SIGFPE (Floating point exception)" when loading audio is present in the code. The code will build fine, however. When running it will SIGPFE. I first experienced it using other language binding, expecting something to be wrong with it, however an important note here, I previously used popOS which doesn't use pipewire, but EndeavourOS(Arch) uses pipewire. So I decided to give it a try with vanilla C raylib and still experienced the same issue, and I'm not the only person with that issue as there is yet one more user on Raylib discord who experiences the same problem.

Removing any instances of audio from the code fixes the issue, although I haven't thoroughly looked which one is the main culprit for SIGFPE, but I would assume it's InitAudio.

There are multiple closed issues on miniaudio page that report issues with PipeWire & SIGFPE error, please see here.

The issue overall makes Raylib unusable with audio under PipeWire.

Environment

Arch Linux - EndeavourOS
OpenGL 4.6
AMD RX5700XT

Issue Screenshot

N/A

Code Example

No reason to include my original code as it's of a binding, but it happens with the original C Raylib, used an example to test it:

#include "raylib.h"

int main(void)
{
    // Initialization
    //--------------------------------------------------------------------------------------
    const int screenWidth = 800;
    const int screenHeight = 450;

    InitWindow(screenWidth, screenHeight, "raylib [audio] example - Multichannel sound playing");

    InitAudioDevice();      // Initialize audio device

    Sound fxWav = LoadSound("src/test.wav");         // Load WAV audio file
    Sound fxOgg = LoadSound("src/test.ogg");        // Load OGG audio file

    SetSoundVolume(fxWav, 0.2f);

    SetTargetFPS(60);       // Set our game to run at 60 frames-per-second
    //--------------------------------------------------------------------------------------

    // Main game loop
    while (!WindowShouldClose())    // Detect window close button or ESC key
    {
        // 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
        //----------------------------------------------------------------------------------

        // Draw
        //----------------------------------------------------------------------------------
        BeginDrawing();

            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(TextFormat("CONCURRENT SOUNDS PLAYING: %02i", GetSoundsPlaying()), 220, 280, 20, RED);

        EndDrawing();
        //----------------------------------------------------------------------------------
    }

    // De-Initialization
    //--------------------------------------------------------------------------------------
    StopSoundMulti();       // We must stop the buffer pool before unloading

    UnloadSound(fxWav);     // Unload sound data
    UnloadSound(fxOgg);     // Unload sound data

    CloseAudioDevice();     // Close audio device

    CloseWindow();          // Close window and OpenGL context
    //--------------------------------------------------------------------------------------

    return 0;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions