You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C++程序不调用外部播放器播放MP3/WAV音乐文件

C++ 无外部播放器播放MP3/WAV音频实现方案

C++标准库没有内置音频播放接口,以下两种方案均可以实现程序内直接输出音频,不会调用系统默认播放器,效果和cout << "\a"的系统提示音一致,无额外弹窗。

方案1:Windows平台原生实现(零额外依赖)

使用Windows内置的MCI多媒体接口,仅需要在编译时链接winmm.lib库即可,适配WAV/MP3格式。
示例代码如下:

#include <iostream>
#include <windows.h>
#pragma comment(lib, "winmm.lib") // VS环境下自动链接winmm库,其他编译环境需手动添加链接参数-lwinmm

int main()
{
    std::cout << "Playing your music file" << std::endl;

    // 播放同目录下的music1.mp3,替换文件名即可播放WAV格式文件
    mciSendStringA("open music1.mp3 alias mymusic", NULL, 0, NULL);
    mciSendStringA("play mymusic wait", NULL, 0, NULL); // wait参数表示播放完成后再执行后续代码
    mciSendStringA("close mymusic", NULL, 0, NULL);

    std::cout << "\a";
    std::cout << "Music played successfully" << std::endl;

    return 0;
}

如果使用GCC编译,需在编译命令末尾添加-lwinmm参数完成库链接

方案2:跨平台实现(Windows/Mac/Linux通用)

使用单头文件开源库miniaudio,仅需要将miniaudio.h文件放到源代码同目录即可使用,无需安装额外依赖,支持所有常见音频格式。
示例代码如下:

#define MINIAUDIO_IMPLEMENTATION
#include "miniaudio.h"
#include <iostream>

int main()
{
    std::cout << "Playing your music file" << std::endl;

    ma_result result;
    ma_engine engine;

    // 初始化音频引擎
    result = ma_engine_init(NULL, &engine);
    if (result != MA_SUCCESS) {
        std::cout << "Audio engine init failed" << std::endl;
        return -1;
    }

    // 播放同目录下的music1.mp3
    ma_engine_play_sound(&engine, "music1.mp3", NULL);

    // 等待播放完成,可根据音频实际时长调整等待时间,或通过官方回调接口判断播放结束
    ma_sleep(10000); // 示例等待10秒,可自行修改

    ma_engine_uninit(&engine);

    std::cout << "\a";
    std::cout << "Music played successfully" << std::endl;

    return 0;
}

注意事项

  • 两种方案均直接在程序进程内输出音频,不会弹出任何外部播放器窗口
  • 需确保音频文件和可执行程序在同一目录,或填写音频文件的绝对路径

内容的提问来源于stack exchange,提问作者Arafat_19AK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:06:06