raylib U2 - 音乐(Music)

音乐的应用场景主要有三个:

  1. 播放游戏或应用的背景音乐,背景音乐经常性的就会要暂停或者继续播放。
  2. 播放对话或朗读的声音、比如有声小说。
  3. 音乐播放器。

接下来让我们一起开始探索raylib的Music。

加载音乐的基本流程

image

注意释放

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;
}



posted @ 2025-04-25 10:46  一亩食堂  阅读(101)  评论(0)    收藏  举报