You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何用raylib的AudioStream播放原始音频?白噪声生成异常

raylib AudioStream API无法持续生成白噪声问题

我正在尝试使用raylib的AudioStream API生成白噪声,但只能听到程序启动时约100ms的短暂噪声爆发,之后就完全静音了。

目前raylib仅提供一个官方音频流生成示例,找不到关于AudioStream API的其他文档。我写了一个极简C程序,本该在显示静态文本的同时持续输出白噪声,但实际只有启动初期的短暂声音,文本渲染正常,且raylib没有返回任何错误信息(所有操作均显示成功)。

我使用的是48KHz、单声道、32位整数采样格式,本来更倾向用浮点数,但官方示例用的是整数(short),所以暂时采用该格式。

代码如下:

/* ====================================================================
WARNING: LOWER YOUR SPEAKERS - THEY WILL POP WHEN THIS PROGRAM EXECUTES
=======================================================================
*/

#include "raylib.h"
#include <stdlib.h>  // required for `rand` and `RAND_MAX`

#define U32_MAX 4294967296
#define U31_MAX 2147483648

int randomSample() {

    /* This helper returns a random, signed 32-bit sample. */

    double randomFraction = rand() / (double)(RAND_MAX);

    return randomFraction * U32_MAX - U31_MAX;
}

void generateSamples(void * buffer, unsigned int frames) {

    /* This audio callback fills a mono buffer with white noise. */

    int * samples = (int *)buffer;

    for (unsigned int i = 0; i < frames; i++) samples[i] = randomSample();
}

int main(void) {

    /* This is a textbook raylib main function. It sets up an audio
    callback, then loops while the window stays open, before tearing
    down the window, audio device, stream etc. */

    InitWindow(800, 480, "playlib");
    InitAudioDevice();

    AudioStream stream = LoadAudioStream(48000, 32, 1);

    SetAudioStreamBufferSizeDefault(1024);
    SetAudioStreamVolume(stream, 1.0f);
    SetAudioStreamCallback(stream, generateSamples);
    PlayAudioStream(stream);
    SetTargetFPS(60);

    while (!WindowShouldClose()) { // loop just redraws the same text
        BeginDrawing();
        ClearBackground(RAYWHITE);
        DrawText("MUSIC SHOULD BE PLAYING!", 245, 150, 20, LIGHTGRAY);
        EndDrawing();
    }

    UnloadAudioStream(stream);
    CloseAudioDevice();
    CloseWindow();

    return 0;
}

通过LLDB调试确认,回调函数被反复调用,样本已生成并写入缓冲区,但就是没有持续声音输出。我尝试将缓冲区大小改为256到4096之间的2的幂值,均无效果。

另外,程序启动时我笔记本上的所有其他音频都会被静音,关闭程序后才恢复正常,raylib是否默认会独占输出设备?

运行环境:最新版本的M1 Mac。


内容的提问来源于stack exchange,提问作者user21916482

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 10:25:24