• 在C语言控制台程序中播放MP3音乐


    游戏没有声音多单调。

    这里做一个简单的范例,用 mciSendString 函数播放 MP3 格式的音乐,先看看代码吧: 

    // 编译该范例前,请把 background.mp3 放在项目文件夹中
    // 发布时,请把 background.mp3 和编译的 exe 放在一起
    // 编译环境:VC6 + EasyX v20100825
    //
    #include <graphics.h>
    #include <conio.h>
    // 引用 Windows Multimedia API
    #pragma comment(lib,"Winmm.lib")
    
    void main()
    {
    initgraph(640, 480);
    
    // 打开音乐
    mciSendString("open background.mp3 alias mymusic", NULL, 0, NULL);
    
    outtextxy(0, 0, "按任意键开始播放");
    getch();
    
    // 播放音乐
    mciSendString("play mymusic", NULL, 0, NULL);
    
    outtextxy(0, 0, "按任意键停止播放");
    getch();
    
    // 停止播放并关闭音乐
    mciSendString("stop mymusic", NULL, 0, NULL);
    mciSendString("close mymusic", NULL, 0, NULL);
    
    outtextxy(0, 0, "按任意键退出程序");
    getch();
    closegraph();
    }

    简单讲解一下:

    一定要引用 Winmm.lib 库文件。这个范例中是通过 #pragma comment 命令引用的,也可以在项目属性中设置,这里不作介绍。

    mciSendString 函数的功能很强大,甚至可以播放视频,不过这里就不多作介绍了,详细请参见 MSDN。我们平时只需要用到第一个参数,将另外三个参数置为 NULL, 0, NULL 即可。

    第一个参数是多媒体命令字符串,不区分大小写。程序中,先要通过 open 命令打开 background.mp3,并用 alias 指定了别名为“mymusic”,这样在之后的代码中就可以方便的通过“mymusic”这个别名访问该音乐了。当然,并不是必须要指定别名,每次通过文件名访问也是可以的。

    open 后面的 mp3 用绝对路径或相对路径都可以。

    然后就是:play mymusic 开始播放,stop mymusic 停止播放,close mymusic 关闭文件。

    如果需要同时播放多个音乐,请为不同的音乐指定不同的别名,然后分别操作即可。

    不再需要播放的音乐,请记得用 close 命令关闭。

    另外还有一个 PlaySound 函数也可以用来播放声音,不过可惜不支持 mp3 / wma,这里就不多做介绍了。

    一些有用的多媒体命令:

    从头播放 xxx:
    "play xxx from 0"
    
    循环播放 .mp3 文件(.wma / .mid 同样可以):
    "open xxx.mp3" 然后 "play xxx.mp3 repeat"
    
    循环播放 .wav 文件:
    "open xxx.wav type MPEGVideo" 然后 "play xxx.wav repeat"
    
    关闭当前程序打开的所有多媒体文件:
    "close all" 
    
    如果文件名中有空格,需要用双引号引起来文件名(注意转义):
    mciSendString("open "D:\My Music\俞丽拿 梁祝 化蝶.mp3" alias mymusic", NULL, 0, NULL);
    

    如果希望将 mp3 嵌入到 exe 中,请参考:http://www.easyx.cn/skills/View.aspx?id=87

    实际中可能会遇到各种各样的问题,这里给出一个完整的范例程序,可以下载到本机试试能否正常播放。【点这里下载

    这些暂时应该够用了吧,更多的多媒体命令请参见 MSDN。

  • 相关阅读:
    Hbase源码分析:Hbase UI中Requests Per Second的具体含义
    Hbase源码分析:server端RPC
    Hbase源码分析:RPC概况
    python使用mysql connection获取数据感知不到数据变化问题
    虚拟机加载机制读后感
    Spark学习笔记1:Application,Driver,Job,Task,Stage理解
    架构模式: 日志聚合
    架构模式: 服务集成协议测试
    架构模式: 服务组件测试
    架构模式: 访问令牌
  • 原文地址:https://www.cnblogs.com/honkly/p/3738022.html
Copyright © 2020-2023  润新知