当前位置: 首页 > news >正文

波形捕捉:(4)创建一个“捕捉缓冲区”

创建一个“捕捉缓冲区

调用 IDirectSoundCapture8::CreateCaptureBuffer 方法创建一个捕捉缓冲区。
该方法的其中一个参数是一个 DSCBUFFERDESC 结构体,该结构体描述了你想得到的缓冲区的特性。该结构体的最后一个成员是一个 WAVEFORMATEX 结构体。这个结构体必须用具体的WAV格式来初始化。

注意:如果你的应用程序在播放声音的同时捕捉这些声音,当捕捉缓冲区的格式和主缓冲区的不一样,那么捕捉缓冲区的创建将会失败。其原因是有些声卡只有单一的时钟频率,不支持以两种不同的频率来捕捉和播放。

下面的函数创建了一个捕捉缓冲区,这个缓冲区将会容纳1秒钟的数据。注意:捕捉设备对象的接口要作为一个参数传入时,该接口必须通过 DirectSoundCaptureCreate8 函数得到,而不是使用以前的 DirectSoundCaptureCreate 函数;否则这个缓冲区将不支持IDirectSoundCaptureBuffer8 接口。
ContractedBlock.gif ExpandedBlockStart.gif Code
HRESULT CreateCaptureBuffer(LPDIRECTSOUNDCAPTURE8 pDSC, 
                            LPDIRECTSOUNDCAPTUREBUFFER8
* ppDSCB8)
{
  HRESULT hr;
  DSCBUFFERDESC               dscbd;
  LPDIRECTSOUNDCAPTUREBUFFER  pDSCB;
  WAVEFORMATEX                wfx 
=
    {WAVE_FORMAT_PCM, 
2441001764004160};
    
// wFormatTag, nChannels, nSamplesPerSec, mAvgBytesPerSec,
    
// nBlockAlign, wBitsPerSample, cbSize
 
  
if ((NULL == pDSC) || (NULL == ppDSCB8)) return E_INVALIDARG;
  dscbd.dwSize 
= sizeof(DSCBUFFERDESC);
  dscbd.dwFlags 
= 0;
  dscbd.dwBufferBytes 
= wfx.nAvgBytesPerSec;
  dscbd.dwReserved 
= 0;
  dscbd.lpwfxFormat 
= &wfx;
  dscbd.dwFXCount 
= 0;
  dscbd.lpDSCFXDesc 
= NULL;
 
  
if (SUCCEEDED(hr = pDSC->CreateCaptureBuffer(&dscbd, &pDSCB, NULL)))
  {
    hr 
= pDSCB->QueryInterface(IID_IDirectSoundCaptureBuffer8, (LPVOID*)ppDSCB8);
    pDSCB
->Release();  
  }
  
return hr;
}

 

 

查看其它:
      导 言
      1.枚举“捕捉设备”
      2.创建“捕捉设备对象”
      3.“捕捉设备”性能
      4.创建一个“捕捉缓冲区”
      5.“捕捉缓冲区”信息
      6.“捕捉缓冲区”通知
      7. “捕捉缓冲区”特效
      8.使用“捕捉缓冲区”
      9.写入到WAV文件 

转载于:https://www.cnblogs.com/stg609/archive/2008/10/21/1314040.html

相关文章:

  • DirectX编程:[初级]C#中利用DirectSound播放WAV格式声音[最少只要4句话]
  • isnull rollup group by 三个关键字
  • 自我职业规划
  • 似影似梦的故事
  • ×××加密技术的应用
  • 我的十年感言
  • 工欲善其事,必先利其器——图文并茂详解VisualStudio使用技巧二
  • 如何修改已架好的域控制器的域名
  • Google Suggest .net 实现
  • 一个比赛的题目,大家出出主意看,我请他吃饭
  • 请高手帮助,网站被黑了,数据库中出现kill_kk表.不知道怎么解决!
  • 用 MapFileAndCheckSum 函数检测 exe 或 dll 是否被修改 - 回复 Joe Lo 的问题
  • 执行sql函数
  • 调试分布式 Web 应用程序
  • flex gumbo实例:重复填充BitmapGraphic对象
  • CentOS7 安装JDK
  • Linux链接文件
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • php中curl和soap方式请求服务超时问题
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 分享一份非常强势的Android面试题
  • 基于游标的分页接口实现
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 浏览器缓存机制分析
  • 数据可视化之下发图实践
  • 选择阿里云数据库HBase版十大理由
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • !!Dom4j 学习笔记
  • (06)Hive——正则表达式
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (Python) SOAP Web Service (HTTP POST)
  • (二)c52学习之旅-简单了解单片机
  • (二)丶RabbitMQ的六大核心
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (九)c52学习之旅-定时器
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (一)Java算法:二分查找
  • (转) ns2/nam与nam实现相关的文件
  • (转载)CentOS查看系统信息|CentOS查看命令
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .gitattributes 文件
  • .NET 反射的使用
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .net反编译工具
  • //解决validator验证插件多个name相同只验证第一的问题
  • /etc/sudoer文件配置简析
  • []常用AT命令解释()
  • [20161101]rman备份与数据文件变化7.txt
  • [2018][note]用于超快偏振开关和动态光束分裂的all-optical有源THz超表——
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [APUE]进程关系(下)
  • [C#]winform利用seetaface6实现C#人脸检测活体检测口罩检测年龄预测性别判断眼睛状态检测