raylib U2 - 音乐(Music)
音乐的应用场景主要有三个:
- 播放游戏或应用的背景音乐,背景音乐经常性的就会要暂停或者继续播放。
- 播放对话或朗读的声音、比如有声小说。
- 音乐播放器。
接下来让我们一起开始探索raylib的Music。
加载音乐的基本流程

注意释放
Music的相关函数
| 函数名 | 作用 |
|---|---|
| PlayMusicStream | 播放音频流,用于从头播放 |
| StopMusicStream | 停止音频流,从头播放之前要停止一下 |
| PauseMusicStream | 暂停音频流,用于播放过程中的暂停。注意暂停和停止是不一样的 |
| ResumeMusicStream | 恢复音频流,用于暂停后的继续播放 |
| SeekMusicStream | 跳转到指定的播放时间,比如给10,那就会跳到10秒的位置继续播放 |
| SetMusicVolume | 设置声音大小。0.0~1.0之间取值。有时候需要背景声音小点,就可以用这个 |
| SetMusicPitch | 设置播放速度,1.0是正常速度,小于1会变慢,大于1会加快 |
| SetMusicPan | 设置左右声道。电脑有左右声道的可以试。0.0是左声道,0.5是均衡,1.0是右声道 |
| GetMusicTimeLength | 获取音频的总时长。 |
| GetMusicTimePlayed | 获取音频的已播放时长。 |
接下来用实际的代码演示上面各函数
点击查看代码
#include <raylib.h>
#include<bits/stdc++.h>
using namespace std;
int main(){
InitWindow(800, 600,"音乐");
SetTargetFPS(60);
InitAudioDevice();//初始化了音频设备
//加载音乐流媒体文件
Music bgm = LoadMusicStream("Greatest Works of Art.wav");
bgm.looping=true;
PlayMusicStream(bgm);//让音频处于播放状态
float mv=1.0;//定义一个变量,记录当前的声音大小
float pitch =1.0;//设置音乐的播放速度
float pan=0.5;//声道变量,0.5表示均衡
while (!WindowShouldClose()) {
UpdateMusicStream(bgm);//更新当前的播放数据
//继续播放和暂停
if(IsKeyPressed(KEY_SPACE)){
if(IsMusicStreamPlaying(bgm))
PauseMusicStream(bgm);
else
ResumeMusicStream(bgm);
}
//滑动滚轮的时候,根据滑动调整音量
float wheel = GetMouseWheelMove();
mv+=wheel/10;
if(mv<0)mv=0;
if(mv>1)mv=1;
SetMusicVolume(bgm,mv);
//调整播放速度,用上下按键
if(IsKeyPressed(KEY_UP)){
pitch+=0.1;
SetMusicPitch(bgm,pitch);
}
else if(IsKeyPressed(KEY_DOWN)){
pitch-=0.1;
if(pitch<0)pitch=0;
SetMusicPitch(bgm,pitch);
}
//调整左右声道,用L表示左声道,r表示右声道
if(IsKeyPressed(KEY_L)){
pan-=0.1;
if(pan<0)pan=0;
SetMusicPan(bgm,pan);
}
else if(IsKeyPressed(KEY_R)){
pan+=0.1;
if(pan>1)pan=1;
SetMusicPan(bgm,pan);
}
//快进快退
if(IsKeyPressed(KEY_RIGHT)){
float jd=GetMusicTimePlayed(bgm);
jd+=5;
if(jd>GetMusicTimeLength(bgm))jd=GetMusicTimeLength(bgm);
SeekMusicStream(bgm,jd);
}
else if(IsKeyPressed(KEY_LEFT)){
float jd=GetMusicTimePlayed(bgm);
jd-=5;
if(jd<0)jd=0;
SeekMusicStream(bgm,jd);
}
//重新播放
if(IsKeyPressed(KEY_T)){
StopMusicStream(bgm);
PlayMusicStream(bgm);
}
BeginDrawing();
ClearBackground(WHITE);
EndDrawing();
}
UnloadMusicStream(bgm);//释放流媒体数据
CloseAudioDevice();//关闭音乐设备
CloseWindow();
return 0;
}

浙公网安备 33010602011771号