CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何即时获得当前音频信息(大小、频率。。)?

楼主zhangleiuser(雷雷)2000-07-09 14:29:00 在 VC/MFC / 基础类 提问

问题点数:50、回复次数:1Top

1 楼gg(gg)回复于 2000-07-09 17:14:00 得分 50

愿意用MCI吗?还比较简单,给你个例子:  
  char   errString[100];  
   
  UINT   wDeviceID;  
  MCI_WAVE_OPEN_PARMS   mciOpenParms;  
  MCI_PLAY_PARMS   mciPlayParms;  
  MCIERROR   mcierror;  
  MCI_STATUS_PARMS   mciStatusParms;  
  MCI_SET_PARMS   mciSetParms;  
  DWORD   wavLength;  
  DWORD   nowPosition;  
   
  mciOpenParms.lpstrDeviceType   =   "waveaudio";  
          mciOpenParms.lpstrElementName   =   你的文件名;  
          if   (mcierror   =   mciSendCommand(NULL,   MCI_OPEN,  
                MCI_OPEN_ELEMENT   /*|   MCI_OPEN_SHAREABLE*/   |   MCI_OPEN_TYPE   |   MCI_WAIT,  
        (DWORD)(LPVOID)   &mciOpenParms))  
          {  
                  //   Failed   to   open   device.   Don't   close   it;   just   return   error.  
  mciGetErrorString(mcierror,errString,100);  
  errString[0]   =   '1';  
  ::AfxMessageBox(errString,MB_OK);  
                  return   (mcierror);  
          }  
          //   The   device   opened   successfully;   get   the   device   ID.  
          wDeviceID   =   mciOpenParms.wDeviceID;  
   
  //   Set   the   time   format.    
          mciSetParms.dwTimeFormat   =   MCI_FORMAT_BYTES;  
          if   (mcierror   =   mciSendCommand(wDeviceID,   MCI_SET,   MCI_SET_TIME_FORMAT   |   MCI_WAIT,  
                  (DWORD)(LPVOID)   &mciSetParms))    
          {  
  mciGetErrorString(mcierror,errString,100);  
  errString[0]   =   '3';  
  ::AfxMessageBox(errString,MB_OK);  
                  mciSendCommand(wDeviceID,   MCI_CLOSE,   MCI_WAIT,   NULL);  
                  return   (mcierror);  
          }  
  mciSendCommand(wDeviceID,   MCI_CLOSE,   MCI_WAIT,   NULL);  
   
  mciOpenParms.lpstrElementName   =   文件名;  
  mciOpenParms.lpstrDeviceType   =   "waveaudio";  
          if   (mcierror   =   mciSendCommand(wDeviceID/*和上面有一点不一样*/,   MCI_OPEN,  
  MCI_OPEN_ELEMENT   /*|   MCI_OPEN_SHAREABLE   */|   MCI_OPEN_TYPE   |     MCI_WAIT,  
  (DWORD)(LPVOID)   &mciOpenParms))  
  {  
  //   Failed   to   open   device.   Don't   close   it;   just   return   error.  
  mciGetErrorString(mcierror,errString,100);  
  errString[0]   =   '5';  
  ::AfxMessageBox(errString,MB_OK);  
  return   (mcierror);  
  }  
  //取证个文件的大小,单位字节  
  mciStatusParms.dwItem=MCI_STATUS_LENGTH;  
  if   (mcierror   =   mciSendCommand(wDeviceID,   MCI_STATUS,   MCI_STATUS_ITEM   |   MCI_WAIT,  
  (DWORD)(LPVOID)&mciStatusParms))  
  {  
  mciGetErrorString(mcierror,errString,100);  
  errString[0]   =   '7';  
  ::AfxMessageBox(errString,MB_OK);  
  mciSendCommand(wDeviceID,   MCI_CLOSE,   MCI_WAIT,   NULL);  
  return   (mcierror);  
  }  
  wavLength=mciStatusParms.dwReturn;  
   
  //   Begin   playback.  
  if   (mcierror   =   mciSendCommand(wDeviceID,   MCI_PLAY,   NULL,  
  (DWORD)(LPVOID)   &mciPlayParms))  
  {  
  mciGetErrorString(mcierror,errString,100);  
  errString[0]   =   '8';  
  ::AfxMessageBox(errString,MB_OK);  
  mciSendCommand(wDeviceID,   MCI_CLOSE,   MCI_WAIT,   NULL);  
  return   (mcierror);  
  }  
   
  do  
  {  
  Sleep(200);  
  //取当前播放的位置  
  //   Get   Current   Position          
  mciStatusParms.dwItem=MCI_STATUS_POSITION;  
          if   (mcierror   =   mciSendCommand(wDeviceID,   MCI_STATUS,   MCI_STATUS_ITEM   |   MCI_WAIT,  
                  (DWORD)(LPVOID)&mciStatusParms))  
          {  
  mciGetErrorString(mcierror,errString,100);  
  errString[0]   =   '6';  
  ::AfxMessageBox(errString,MB_OK);  
  mciSendCommand(wDeviceID,   MCI_CLOSE,   MCI_WAIT,   NULL);  
  return   (mcierror);  
          }  
  nowPosition=mciStatusParms.dwReturn;  
  if(StopVoice)  
  {  
  mciSendCommand(wDeviceID,   MCI_CLOSE,   MCI_WAIT,   NULL);  
  StopVoice=FALSE;  
  return   (1L);  
  }  
  }  
  while(nowPosition<wavLength);  
  mciSendCommand(wDeviceID,   MCI_CLOSE,   MCI_WAIT,   NULL);  
  }  
   
  从我的程序中摘出来的,注重看各个功能函数,其它时序不要管,是我自己的需要.Top

相关问题

  • 哪位高手知道音阶的发音频率
  • 如何得到曲目的声音频率信息
  • 如何通过声卡获取输入音频(单频)的频率、幅度
  • 求2路16bit同频率音频混音算法 先抛砖引玉
  • 【SOS】如何设置系统CD音频的声音大小
  • 文件大小的获得!
  • 获得窗口大小
  • 如何得到硬件信息,如内存大小,cpu频率,硬盘大小
  • 用纯Java如何获得本机CPU的频率?多谢了...
  • 怎么获得cpu的频率?inter的和amd的都要

关键词

  • mci
  • mcierror
  • mciopenparms
  • wdeviceid
  • errstring
  • parms
  • opened
  • device
  • format
  • dword

得分解答快速导航

  • 帖主:zhangleiuser
  • gg

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo