🔊 raylib raudio — 音频系统示例(C 语言)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "raylib.h"
#include <stdlib.h>

int main(void)
{
#ifdef _WIN32
system("chcp 65001 > nul");
#endif

InitWindow(800, 450, "raylib raudio example");
InitAudioDevice(); // 必须初始化音频系统
SetTargetFPS(60);

// --- 加载音效(短音频,WAV 最常用) ---
Sound fxJump = LoadSound(u8"resources/leaflocation.wav");

// --- 加载音乐(长音频,OGG/MP3) ---
Music music = LoadMusicStream(u8"resources/keyword.mp3");
PlayMusicStream(music);

while (!WindowShouldClose())
{
// 更新音乐流(必须每帧调用)
UpdateMusicStream(music);

// 按空格播放音效
if (IsKeyPressed(KEY_SPACE))
{
PlaySound(fxJump);
}

// 按 P 暂停/继续音乐
if (IsKeyPressed(KEY_P))
{
if (IsMusicStreamPlaying(music))
PauseMusicStream(music);
else
ResumeMusicStream(music);
}

// 按 UP/DOWN 调整音乐音量
if (IsKeyDown(KEY_UP)) SetMusicVolume(music, 1.0f);
if (IsKeyDown(KEY_DOWN)) SetMusicVolume(music, 0.3f);

BeginDrawing();
ClearBackground(RAYWHITE);

DrawText("Press SPACE to play sound effect", 20, 20, 20, DARKGRAY);
DrawText("Press P to pause/resume music", 20, 50, 20, DARKGRAY);
DrawText("Press UP/DOWN to change music volume", 20, 80, 20, DARKGRAY);

EndDrawing();
}

// 卸载资源
UnloadSound(fxJump);
UnloadMusicStream(music);

CloseAudioDevice();
CloseWindow();
return 0;
}

📌 示例中使用的 raudio API

功能 API
初始化音频 InitAudioDevice()
加载音效 LoadSound()
播放音效 PlaySound()
卸载音效 UnloadSound()
加载音乐 LoadMusicStream()
播放音乐 PlayMusicStream()
更新音乐流 UpdateMusicStream()
暂停/继续音乐 PauseMusicStream() / ResumeMusicStream()
设置音量 SetMusicVolume()
卸载音乐 UnloadMusicStream()
关闭音频系统 CloseAudioDevice()

🎧 音效 vs 音乐:什么时候用哪个?

类型 用途 格式 特点
Sound 短音效(跳跃、攻击、UI) WAV 一次性加载到内存,延迟低
Music 背景音乐(BGM) OGG/MP3 流式播放,节省内存

这是游戏行业的标准做法。