鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: wiliam

[技术交流] 如何写一个win32程序并且自动播放音乐

[复制链接]
发表于 2014-7-27 23:05:19 | 显示全部楼层
void _play(TCHAR *filename)
{
        display_filename(get_current_play(filename));
        TCHAR cmd[MAX_PATH + 10];
        TCHAR shortName[MAX_PATH];
        GetShortPathName(filename, shortName, sizeof(shortName) / sizeof(TCHAR));
        wsprintf(cmd, TEXT("play  %s"), shortName);
        mciSendString(cmd, NULL, 0, NULL);
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-27 23:06:10 | 显示全部楼层
领用上面的函数就可以播放MP3,wav等格式的音乐了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-27 23:12:48 | 显示全部楼层
不知道这里有没有大神路过呀,其最近遇到了一个问题,这个函数可以播放很多的音乐但是有那么几个钉子户,就是不能播放会产生一个错误,错误提示如下
C:\Users\gongfan\Desktop\1.jpeg
有好几天了就是找不到解决方案。

我怀疑可能是因为MP3的id3v2中有了同步信号,导致解码器不能识别正常的播放位置造成的,可是在网上实在收不到相关的帖子。

或许还有其他的问题,希望高手指点迷津呀!!!

非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-28 11:12:40 | 显示全部楼层
写出来 我也看看呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-28 13:10:10 | 显示全部楼层
许许 发表于 2014-7-27 23:05
void _play(TCHAR *filename)
{
        display_filename(get_current_play(filename));

写一个win32汇编的可以吗  我不知道 mciSendString 在汇编怎么调用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-28 19:16:24 | 显示全部楼层
wiliam 发表于 2014-7-24 21:39
用win32汇编该怎么调用呢

invoke mcisendstring,参数列表。
具体参数真么用你就需要看msdn了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-28 22:10:19 | 显示全部楼层
我要鱼币  我要鱼币  我要鱼币  我要鱼币  我要鱼币  我要鱼币  我要鱼币  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-29 14:56:42 | 显示全部楼层
问题就是图片显示的那个样子

1.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-29 15:00:10 | 显示全部楼层
我读去了MP3文件中的id3v2信息发现他们的不同之处是:

1.可以播放的MP3 在标签头的flag第一位是0

2.不可以播放的MP3 在标签头的flag位是 1

标签头的定义
typedef struct _LABELHEAD
{
        char header[3];
        char version;
        char reversion;
        unsigned char flag;
        unsigned char size[4];
} LABELHEAD, *pLABELHEAD;

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-30 15:45:09 | 显示全部楼层
俺也觀摩看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-30 22:01:12 | 显示全部楼层
看着各种api就烦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-30 23:12:35 | 显示全部楼层
扔给你一份C语言源码,直接改成WIN32就行  真不会了  就push call
  1. // Music.cpp : Defines the entry point for the application.
  2. //

  3. #include "stdafx.h"
  4. #pragma commet(lib,"WINMM.LIB")


  5. int WINAPI mainproc (HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
  6. {


  7.         switch(msg)
  8.         {

  9.         case        WM_INITDIALOG:

  10.                                                         break;
  11.         case        WM_CLOSE:
  12.                                         EndDialog(hwnd,NULL);
  13.                                         break;
  14.         case        WM_COMMAND:
  15.                         switch(LOWORD(wParam))
  16.                         {       
  17.                         case    IDC_OPEN:                       

  18.                                                 OPENFILENAME ofn;
  19.                                                 char szFile[256];//MAX_PATH操作系统定义的最大路径的长度
  20.                                                
  21.                                                 ZeroMemory(&ofn,sizeof(ofn));
  22.                                                 ofn.lStructSize = sizeof(ofn);//定义结构体的大小,判断是win95还是win2000系统
  23.                                                 ofn.lpstrFile = szFile;//
  24.                                                 ZeroMemory(szFile,sizeof(szFile)/sizeof(char));
  25.                                                 ofn.nMaxFile = sizeof(szFile);
  26.                                                 ofn.lpstrFilter ="mp3文件\0*.mp3\0所有文件\0*.*\0\0";//过滤器
  27.                                                 ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
  28.                                                 GetOpenFileName(&ofn);
  29.                                        
  30.                                                 SetDlgItemText(hwnd,IDC_EDIT1,szFile);       
  31.                                                 break;
  32.                                        
  33.                         case        IDC_PLAY:

  34.                                                 TCHAR play1[256];
  35.                                                 TCHAR play2[256];               
  36.                                                 TCHAR getpath[256];                       
  37.                                                 GetDlgItemText(hwnd,IDC_EDIT1,getpath,sizeof(getpath));                                //得到编辑框上面的路径名
  38.                                                 GetShortPathName(getpath,play1,sizeof(play1));                                                //得到短路径  play1保存短路径
  39.                                                 wsprintf(play2,"play %s",play1);                                                                        //在路径前面加上个play
  40.                                                 SetDlgItemText(hwnd,IDC_EDIT1,play1);                                                                //显示出来短路径
  41.                                                 mciSendString(play2,NULL,0,NULL);                                                                        //播放
  42.                                                 break;                                                                                                                                //退出 下面的跟这个同理


  43.                     case        IDC_PAUSE:        //暂停
  44.                                                        
  45.                                                         TCHAR pause1[256];
  46.                                                         TCHAR pause2[256];
  47.                                                         TCHAR getpath1[256];
  48.                                                         GetDlgItemText(hwnd,IDC_EDIT1,getpath1,sizeof(getpath1));        //="play e:/1.mp3";
  49.                                                         GetShortPathName(getpath1,pause1,sizeof(pause1));        //短路径
  50.                                                         wsprintf(pause2,"pause %s",pause1);
  51.                                                         SetDlgItemText(hwnd,IDC_EDIT1,pause1);       
  52.                                                         mciSendString(pause2,NULL,0,NULL);
  53.                                                         break;

  54.                         case        IDC_RESUME: //恢复
  55.                                
  56.                                                         TCHAR resume1[256];
  57.                                                         TCHAR resume2[256];
  58.                                                         TCHAR getpath3[256];
  59.                                                         GetDlgItemText(hwnd,IDC_EDIT1,getpath3,sizeof(getpath3));        //="play e:/1.mp3";
  60.                                                         GetShortPathName(getpath3,resume1,sizeof(resume1));        //短路径
  61.                                                         wsprintf(resume2,"resume %s",resume1);
  62.                                                         SetDlgItemText(hwnd,IDC_EDIT1,resume1);       
  63.                                                         mciSendString(resume2,NULL,0,NULL);
  64.                                                         break;

  65.                         case        IDC_CLOSE: //停止
  66.                                                        
  67.                                                         TCHAR close1[256];
  68.                                                         TCHAR close2[256];
  69.                                                         TCHAR getpath2[256];
  70.                                                         GetDlgItemText(hwnd,IDC_EDIT1,getpath2,sizeof(getpath2));        //="play e:/1.mp3";
  71.                                                         GetShortPathName(getpath2,close1,sizeof(close1));        //短路径
  72.                                                         wsprintf(close2,"close %s",close1);
  73.                                                         SetDlgItemText(hwnd,IDC_EDIT1,close1);       
  74.                                                         mciSendString(close2,NULL,0,NULL);
  75.                                                         break;               
  76.                                                        
  77.                         }
  78.        
  79.        
  80.         }
  81.         return 0;
  82. }

  83. int APIENTRY WinMain(HINSTANCE hInstance,
  84.                      HINSTANCE hPrevInstance,
  85.                      LPSTR     lpCmdLine,
  86.                      int       nCmdShow)
  87. {
  88.         DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,mainproc);

  89.         return 0;
  90. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-1 21:25:23 | 显示全部楼层
wiliam 发表于 2014-7-24 21:39
用win32汇编该怎么调用呢

这个需要你自己查api了,灵活带来的是n多可配置项,慢慢查msdn吧……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-3 08:47:04 | 显示全部楼层
汇编不是很懂,需要学习一下!!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 18:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表