跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
C++

基于 mciSendCommand 的 C++ 音乐播放类实现

综述由AI生成Windows MCI API 驱动的 C++ 音乐播放类封装了设备初始化、文件加载、播放控制及资源释放流程。通过 mciSendCommand 函数调用实现 WAV 音频的播放、暂停、恢复和停止操作,适用于桌面端音频处理需求。

小熊软糖发布于 2015/1/3更新于 2026/4/265 浏览
基于 mciSendCommand 的 C++ 音乐播放类实现

以下是基于 mciSendCommand 的 C++ 音乐播放类实现代码。

PlayWave.h

#pragma once
#include "mmsystem.h"
#define WAVE_PAUSE 1
#define WAVE_RESUME 2
class CPlayWave {
public:
    CPlayWave(void);
    ~CPlayWave(void);
    DWORD InitDevice();
    DWORD TerminalDevice();
    DWORD Play(HWND hWnd, LPCTSTR pFileName);
    DWORD Stop();
    DWORD Pause();
protected:
    MCIDEVICEID m_DeviceID;
    MCIDEVICEID m_ElementID;
};

PlayWave.cpp

#include "StdAfx.h"
#include "PlayWave.h"
#include <Digitalv.h>
#pragma comment(lib, "winmm.lib")
CPlayWave::CPlayWave(void) {
    m_DeviceID = 0;
    m_ElementID = 0;
    InitDevice();
}
CPlayWave::~() {
     (m_ElementID) {
        ();
    }
     (m_DeviceID) {
        ();
    }
}
{
    DWORD dwResult = ;
     (m_DeviceID == ) {
        MCI_OPEN_PARMS mciInitParms;
        mciInitParms.lpstrDeviceType = (LPTSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
        dwResult = (, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_WAIT, (DWORD)(LPVOID)&mciInitParms);
        m_DeviceID = mciInitParms.wDeviceID;
    }
     dwResult;
}
{
    DWORD dwResult = ;
     (m_DeviceID) {
        dwResult = (m_DeviceID, MCI_CLOSE, , );
    }
    m_DeviceID = ;
     dwResult;
}
{
    MCI_OPEN_PARMS mciOpenParms;
    (&mciOpenParms, , (MCI_OPEN_PARMS));
    mciOpenParms.lpstrElementName = pFileName;
    DWORD dwResult = ;
    dwResult = (m_DeviceID, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)(LPVOID)&mciOpenParms);
     (!dwResult) {
        m_ElementID = mciOpenParms.wDeviceID;
        MCI_PLAY_PARMS mciPlayParms;
        mciPlayParms.dwCallback = (DWORD)hWnd;
        dwResult = (m_ElementID, MCI_PLAY, MCI_DGV_PLAY_REPEAT, (DWORD)(LPVOID)&mciPlayParms);
    }
     dwResult;
}
{
    DWORD dwResult = ;
     (m_ElementID) {
        dwResult = (m_ElementID, MCI_CLOSE, , );
        m_ElementID = ;
    }
     dwResult;
}
{
    DWORD dwResult = ;
     BOOL bPlayMode = TRUE;
     (m_ElementID) {
         (bPlayMode) {
            dwResult = (m_ElementID, MCI_PAUSE, , );
            dwResult = WAVE_PAUSE;
        }  {
            dwResult = (m_ElementID, MCI_RESUME, , );
            dwResult = WAVE_RESUME;
        }
        bPlayMode = !bPlayMode;
    }
     dwResult;
}
CPlayWave
void
if
Stop
if
TerminalDevice
DWORD CPlayWave::InitDevice()
0
if
0
mciSendCommand
NULL
return
DWORD CPlayWave::TerminalDevice()
0
if
mciSendCommand
NULL
NULL
0
return
DWORD CPlayWave::Play(HWND hWnd, LPCTSTR pFileName)
memset
0
sizeof
0
mciSendCommand
if
mciSendCommand
/*MCI_NOTIFY*/
return
DWORD CPlayWave::Stop()
0
if
mciSendCommand
NULL
NULL
0
return
DWORD CPlayWave::Pause()
0
static
if
if
mciSendCommand
NULL
NULL
else
mciSendCommand
NULL
NULL
return

该类封装了音乐的播放、暂停、恢复及停止等功能。

目录

  1. PlayWave.h
  2. PlayWave.cpp
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 毕业论文降低 AI 检测率的原理与实操方法
  • HTML+CSS+JavaScript 前端基础知识体系梳理
  • Qwen3-VL WebUI 详解:支持视频理解与 GUI 操作
  • Java 抽象类与接口的区别与应用
  • 8 款实用 AI 绘画工具推荐:从 Midjourney 到 Stable Diffusion
  • VSCode 插件 Git Graph 可视化 Git 提交记录教程
  • F5 刷新后,浏览器前端究竟发生了什么?
  • Typora 软件安装与基础配置指南
  • 基于 Ollama 与 Qwen 的本地医疗大模型应用实践
  • Kubernetes 中 Command 与 Args 覆盖 Dockerfile EntryPoint 详解
  • 2026-03-18 AI 论文盘点:6 篇新作看记忆、长上下文与机器人策略
  • OpenClaw v2026.3.8 全平台部署与配置指南
  • LeetCode Hot 100 算法题解与思路总结
  • C++ 函数重载:核心规则、实现原理与实战
  • Python 实战:构建文档总结、代码生成与智能检索的 AI 助手
  • Java 手写哈希表(HashMap)实现原理
  • DartQuant:基于分布转换的旋转量化算法
  • VR + 具身智能 + 人形机器人:通往现实世界的智能接口
  • Ubuntu 本地部署 OpenClaw:接入 Ollama 推理与飞书通道
  • OpenClaw 零成本部署指南:基于 GitHub Codespaces 与 Discord

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online