当前位置: 首页 > news >正文

C++ 图片加背景音乐的处理

在这里插入图片描述

//music_manager.h
#pragma once// 播放背景音乐
void playBackgroundMusic(const char* music, bool repeat = false, int volume = -1);// 暂停当前播放的音乐
void pauseBackgroundMusic();// 恢复暂停的音乐
void resumeBackgroundMusic();// 停止并关闭当前音乐
void stopBackgroundMusic();// 关闭所有音乐资源
void closeAllMusic();
//music_manager.cpp
#include <windows.h>
#include <mmsystem.h>
#include <stdio.h>
#include <vector>
#include <string>// 存储所有打开的设备别名
static std::vector<std::string> g_deviceAliases;
static std::string g_currentDevice = "";void playBackgroundMusic(const char* music, bool repeat, int volume)
{static int i = 0;char alias[20];sprintf(alias, "bgm%d", i++);char cmd[256] = { 0 };// 打开设备sprintf(cmd, "open \"%s\" alias %s", music, alias);MCIERROR ret = mciSendString(cmd, NULL, 0, NULL);if (ret != 0){char err[100] = { 0 };mciGetErrorString(ret, err, sizeof(err));printf("[open error]: %s\n", err);return;}// 设置音量if (volume != -1){sprintf(cmd, "setaudio %s volume to %d", alias, volume);ret = mciSendString(cmd, NULL, 0, NULL);if (ret != 0){char err[100] = { 0 };mciGetErrorString(ret, err, sizeof(err));printf("[volume error]: %s\n", err);}}// 播放sprintf(cmd, "play %s %s", alias, repeat ? "repeat" : "");ret = mciSendString(cmd, NULL, 0, NULL);if (ret != 0){char err[100] = { 0 };mciGetErrorString(ret, err, sizeof(err));printf("[play error]: %s\n", err);// 播放失败时关闭设备sprintf(cmd, "close %s", alias);mciSendString(cmd, NULL, 0, NULL);return;}// 保存设备信息g_deviceAliases.push_back(alias);g_currentDevice = alias;printf("Playing music: %s on device: %s\n", music, alias);
}void pauseBackgroundMusic()
{if (g_currentDevice.empty()) {printf("No music is currently playing.\n");return;}char cmd[100] = { 0 };sprintf(cmd, "pause %s", g_currentDevice.c_str());MCIERROR ret = mciSendString(cmd, NULL, 0, NULL);if (ret != 0){char err[100] = { 0 };mciGetErrorString(ret, err, sizeof(err));printf("[pause error]: %s\n", err);}else{printf("Music paused: %s\n", g_currentDevice.c_str());}
}void resumeBackgroundMusic()
{if (g_currentDevice.empty()) {printf("No music is currently paused.\n");return;}char cmd[100] = { 0 };sprintf(cmd, "resume %s", g_currentDevice.c_str());MCIERROR ret = mciSendString(cmd, NULL, 0, NULL);if (ret != 0){char err[100] = { 0 };mciGetErrorString(ret, err, sizeof(err));printf("[resume error]: %s\n", err);}else{printf("Music resumed: %s\n", g_currentDevice.c_str());}
}void stopBackgroundMusic()
{if (g_currentDevice.empty()) {printf("No music is currently playing.\n");return;}char cmd[100] = { 0 };// 停止播放sprintf(cmd, "stop %s", g_currentDevice.c_str());mciSendString(cmd, NULL, 0, NULL);// 关闭设备sprintf(cmd, "close %s", g_currentDevice.c_str());MCIERROR ret = mciSendString(cmd, NULL, 0, NULL);if (ret != 0){char err[100] = { 0 };mciGetErrorString(ret, err, sizeof(err));printf("[close error]: %s\n", err);}else{printf("Music stopped and closed: %s\n", g_currentDevice.c_str());// 从列表中移除for (auto it = g_deviceAliases.begin(); it != g_deviceAliases.end(); ++it) {if (*it == g_currentDevice) {g_deviceAliases.erase(it);break;}}g_currentDevice = "";}
}void closeAllMusic()
{char cmd[100] = { 0 };// 关闭所有设备for (const auto& alias : g_deviceAliases) {sprintf(cmd, "close %s", alias.c_str());mciSendString(cmd, NULL, 0, NULL);printf("Closed device: %s\n", alias.c_str());}g_deviceAliases.clear();g_currentDevice = "";printf("All music devices closed.\n");
}
#include "music_manager.h"
#include <windows.h>  // 添加这行
#include<graphics.h>
#include <conio.h>
#define WIDTH 800
#define HEIGHT 600
IMAGE background;
int swap;
void init() {initgraph(WIDTH, HEIGHT,1);  // 初始化图形窗口loadimage(&background, _T("syk.png"));putimage(0, 0, &background);
}int main()
{init();// 播放音乐playBackgroundMusic("background.mp3", true, 500);  // 循环播放,音量50%while (1) {//如果有鼠标左键按下 swap=~swap;if (MouseHit()) {MOUSEMSG msg = GetMouseMsg();if (msg.uMsg == WM_LBUTTONDOWN) {swap = ~swap;if (swap) {pauseBackgroundMusic();}else {resumeBackgroundMusic();}}//如果有鼠标右键按下,结束音乐if (msg.uMsg == WM_RBUTTONDOWN) {playBackgroundMusic("b1.mp3", true, 500);  // 循环播放,音量50%}//如果中间鼠标if (msg.uMsg == WM_MBUTTONDOWN) {closeAllMusic();}//如果双击右键,音量加10if (msg.uMsg == WM_RBUTTONDBLCLK) {}}}// 暂停音乐Sleep(3000);  // 播放3秒后暂停pauseBackgroundMusic();// 恢复播放Sleep(2000);  // 暂停2秒后恢复resumeBackgroundMusic();// 停止当前音乐Sleep(3000);  // 再播放3秒后停止//stopBackgroundMusic();// 播放另一首音乐playBackgroundMusic("b1.mp3", false, 800);  // 不循环,音量80%Sleep(10000);// 程序结束时关闭所有资源closeAllMusic();_getch();closegraph();  // 关闭图形窗口return 0;
}
http://www.dtcms.com/a/585792.html

相关文章:

  • 进度条+ 基础开发工具----版本控制器git 调试器gdb/cgdb
  • 我在高职教STM32(新11)——LCD1602显示效果控制
  • 将 AI 注入终端:Gemini CLI 保姆级安装与实战指南
  • 珠海市住房城乡建设局网站衡阳网站建设公司哪家好
  • leetcode 345. 反转字符串中的元音字母 python
  • 创建一个网站 站点根文件夹为wordpress互动
  • 网站建设账务处理属于什么费用瑞安这边有没有做网站的
  • S14排序算法--基数排序
  • 人工智能之数学基础:连续型随机变量的期望
  • 江苏省住房和城乡建设厅网站首页东莞微联建站
  • SVG 简介
  • PostgreSQL 高可用实战:流复制主从集群(0 数据丢失 + 故障无缝切换)
  • antd Form表单实践模板(Form.useForm)
  • 数据结构与算法概述
  • n8n + Pinecone + ModelScope:知识库向量查询工作流实战
  • C++ 面向对象三大特性之一---多态
  • 合肥企业网站建设网站图片怎样做seo优化
  • 短剧小程序 2025 核心痛点分析:内容、技术与合规的三重困境
  • 河南省住房和城乡建设厅网站查证网站前台右侧怎么做二维码
  • 从原理到实操:ddraw.dll是什么?为何游戏启动时频繁提示“找不到ddraw.dll”?解决思路全解析
  • 计算机网络自顶向下方法39——网络层 中间盒 互联网架构原则(IP沙漏 端到端原则)
  • 广州有做虚拟货币网站视频创作用什么软件
  • wap网站和app开发正邦集团招聘
  • RV1126 NO.43:OPENCV形态学基础之二:腐蚀
  • 算法学习 24 使用集合解决问题
  • Java基础——集合进阶3
  • Ascend C 编程模型揭秘:深入理解核函数与任务并行机制
  • 算法题——002
  • 佛山微信网站开发易语言网站开发教程
  • 从零搭建PyTorch计算机视觉模型