关于MCI的命令以及操作 很复杂 各种宏 这里简单的列举了几个例子  实际开发中 如果用到MCI那么我们去研究微软的 Mmsystem.h头文件、、、

MCI的使用时要先打开设备 然后再操作设备 。

1、开始录制音乐 录制时候使用的设备是waveaudio 波形音频设备  支持wav

DWORD id ; 
 MCI_OPEN_PARMS pr;
  pr.lpstrDeviceType=_T("waveaudio")  ; //设备类型
  pr.lpstrElementName=L"" ;  //一定要初始否则无法录音  
mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_ELEMENT,(DWORD)&pr) ; //打开设备   并且填充设备信息)

id=pr.wDeviceID ;  //保存设备信息
  MCI_RECORD_PARMS  rpr;  //录音结构体
mciSendCommand(pr.wDeviceID,MCI_RECORD,NULL,(DWORD)&rpr) ;//开始录制音乐

2、停止录音并且保存到文件

mciSendCommand(id,MCI_STOP,NULL,NULL) ;//停止录音  )
   MCI_SAVE_PARMS spr;   //保存录音
   spr.lpfilename=_T("c:\\record.wav");   //保存录音路径 
  mciSendCommand(id,MCI_SAVE,MCI_SAVE_FILE,(DWORD)&spr) ;//保存到指定路径)

3、播放MP3文件

MCI_OPEN_PARMS rm ;
  rm.lpstrDeviceType="mpegvideo" ;   //指定设备类型
  rm.lpstrElementName=mp3File.c_str();   //MP3文件的路径
  MCI_PLAY_PARMS pm ;
  pm.dwFrom=0 ; //起始位置从0开始
  MCIERROR err ;
  if(0!=(err=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_SHAREABLE|MCI_OPEN_TYPE|MCI_OPEN_ELEMENT|MCI_WAIT,(DWORD)&rm)))  //第一次打开设备的时回    
  {
   cout<<"错误信息如下:"<<endl ;
   char buf[100]="" ;
   UINT t =100;
   mciGetErrorString(err,buf,t);  //利用返回的 MCIERROR来获得错误信息
   cout<< buf<<endl ;
   return ;
  }
  mciSendCommand(rm.wDeviceID,MCI_PLAY,0,(DWORD)&pm) ;   //发送完成命令后立即返回

4、  弹出光驱

MCI_OPEN_PARMS parm ;//打开参数
  parm.lpstrDeviceType="CDAUDIO" ; //设备类型为光驱  指定设备类型为CD_ROM
  mciSendCommand(NULL,MCI_OPEN,MCI_WAIT|MCI_OPEN_TYPE,(DWORD)&parm ) ; //初始化光驱   并且是参数中的 光驱类型有效
  mciSendCommand(MCI_ALL_DEVICE_ID,MCI_SET,MCI_SET_DOOR_OPEN,NULL)  ;//打开光驱    对光驱进行操作

5.暂停设备操作
mciSendCommand(mciOpen.wDeviceID,MCI_PAUSE,NULL ,NULL);

6. 停止设备操作
mciSendCommand(mciOpen.wDeviceID,MCI_STOP,NULL ,NULL);

mciSendCommand(mciOpen.wDeviceID,MCI_SEEK,MCI_SEEK_TO_START ,NULL);

7.获得播放进度
mciStatusParms.dwItem=MCI_STATUS_POSITION;    mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciStatusParms);//关键,取得位置
    int m_dPosition=mciStatusParms.dwReturn;

8、获得整个音频的时间长度
UINT DeviceID = mciOpen.wDeviceID ;

mciStatusParms.dwItem=MCI_STATUS_LENGTH;

mciSendCommand(DeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,(DWORD)(LPVOID)&mciStatusParms);//关键,取得长度
     m_dLength=mciStatusParms.dwReturn;

9.在指定位置播放
 MCI_PLAY_PARMS mciPlay;

mciPlay.dwFrom=m_dPosition;

mciError = mciSendCommand(m_wDeviceID,MCI_PLAY,MCI_FROM,(DWORD)&mciPlay);

10.控制音量
MCI_DGV_SETAUDIO_PARMS mciSetAudioPara;

mciSetAudioPara.dwItem = MCI_DGV_SETAUDIO_VOLUME;

mciSetAudioPara.dwValue = atoi(m_Volume.GetBuffer(m_Volume.GetLength())); //here is the value of the Volume(0--1000)

mciSendCommand(m_wDeviceID, MCI_SETAUDIO, MCI_DGV_SETAUDIO_VALUE | MCI_DGV_SETAUDIO_ITEM, (DWORD)(LPVOID)&mciSetAudioPara);

利用MCI命令进行 播放录制音乐,以及弹出光驱,音量控制获得播放进度等等操作。。。开发必备。相关推荐

  1. Vue3+TypeScript实现网易云音乐WebApp(播放界面:播放、暂停、音量控制、播放进度控制(点击/拖拽进度条)、上一首、下一首)

    1. 成果展示 真实接口地址 本项目使用的是真实线上的网易云API 线上演示地址 目前只做了每日推荐(需登录)以及排行榜功能,点个star吧大佬们! 项目GitHub地址 main分支是Vue3+Ty ...

  2. ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件...

    原文:ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件 先看效果图,然后上代码: <UserControl x:Class= ...

  3. Linux下弹入弹出光驱(CDROM)命令

    Linux下弹入弹出光驱(CDROM)命令 1. 弹出光驱命令 eject 2. 弹入光驱命令 eject -t

  4. 【解决】Ubuntu命令行弹出光驱的方法

    [解决]Ubuntu命令行弹出光驱的方法 参考文章: (1)[解决]Ubuntu命令行弹出光驱的方法 (2)https://www.cnblogs.com/QuLory/archive/2012/10 ...

  5. 优酷播放器与layer弹出层(别的弹出层未测试)遮挡问题

    最近做了优酷视频插件 ,然后做了个删除功能,使用的layer弹出层插件,发现弹出的时候被优酷播放器遮挡,修改zIndex属性不能用,经查阅资料改成 <embed src="http:/ ...

  6. Android Tv端仿优酷酷喵——播放界面下拉弹出选项窗

    自己写了一个Andorid TV端动画实例,主要是仿优酷酷喵里的下拉弹窗的效果,如下图: 这里把弹框写成了一个弹出的dialog,把dialog的背景设成黑色半透明,然后在activity中监听下键弹 ...

  7. 安防互联网摄像头海康大华硬盘录像机视频流媒体服务器EasyNVR在layer弹出层中使用video标签无法最大化全屏播放问题解决

    诞生背景 众所周知,EasyNVR可以将局域网/广域网上的海康/大华等网络摄像头由rtsp转换为rtmp.rtsp.hls.flv协议转换,并提供推流服务,可以将拉到的网络摄像头直接转发到流媒体服务器 ...

  8. 【基于QMediaPlayer的简易视频播放器】— 3、结合QSlider实现播放进度控制和音量控制

    基于QMediaPlayer的简易视频播放器 1.创建基本布局 2.QMediaPlayer的基本使用 3.结合QSlider实现播放进度控制和音量控制 4.重载QSlider鼠标响应事件,实现单击跳 ...

  9. 电脑总是时不时弹出命令行窗口 Community Catalog 苹果手机铃声设置教程

    电脑总是时不时弹出命令行窗口 电脑总是时不时弹出命令行窗口 任务eng.可执行 开始初始化 我的sql安装器正在运行在 团体模式. 初始化产品要求 结束 初始化 不能够连接到远处的主机.目录下载失败了 ...

最新文章

  1. # 利用fragment实现界面跳转
  2. 切换Python2和Python3的方法
  3. golang 接口格式
  4. 注解RequestMapping中的URI路径最前面到底需不需要加斜线?
  5. 【杂谈】GitHub上有哪些好用的爬虫(从Google百度,腾讯视频抖音,豆瓣知乎到不可描述)
  6. android 年月日时分秒控件,Android 年月日时分秒时间选择器
  7. java foxmail 附件_foxmail 本程序使用JavaMail进行收取和发送带附件的邮件 - 下载 - 搜珍网...
  8. 【程序设计】变量和常量
  9. Spark源码分析之MemoryManager
  10. 因非法扣押物资 华为向伟创力发律师函索赔数亿元
  11. MFC 教程【5_MFC对象的创建】
  12. 条件查询时,如果有的输入框不输入,后台应该怎么处理?
  13. 我收集的软件序列号(转帖)
  14. 应用程序无法正常启动 0x0000005
  15. IEEE会议投稿资料汇总http://cadcg2015.nwpu.edu.cn/index.htm
  16. 如何写新产品开发报告书
  17. Hadoop02---HDFS基础(HDFS原理 java客户端).md
  18. 第四届河南省程序设计大赛D nyoj306-走迷宫【二分DFS、最短路Dijkstra】
  19. c# - 作业4:中国象棋
  20. 企业为什么着急签三方_为什么很多企业都在使用电子劳动合同?要怎么签?

热门文章

  1. ip地址解析成国家、城市、iso code或者按语言获取城市名
  2. 20200228华为手机安装谷歌商店,Download the latest Google Play Store APK
  3. Flowable实战(三)流程部署管理
  4. 99.9%的努力毁于0.1%的失误
  5. 基于U-Net 的图像分割(使用Crack 500数据集)
  6. 《实用多媒体技术》课程标准
  7. wifi 联想小新_联想小新 为什么连不到WIFI
  8. mysql meb物理备份
  9. XSL3399我开通博客了谢多交流
  10. 【云原生 | 从零开始学Docker】一、Docker的安装,启动以及工作原理