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

淄博网站定制禁止网站收录

淄博网站定制,禁止网站收录,徐州手机网站营销公司哪家好,做文具的网站[WASAPI] 从Qt MultipleMedia 来看WASAPI 最近在学习有关Windows上的音频驱动相关的知识#xff0c;在正式开始说WASAPI之前#xff0c;我想先说一说Qt的Multiple Media#xff0c;为什么呢#xff1f;因为Qt的MultipleMedia实际上是WASAPI的一层封装#xff0c;它在是线…[WASAPI] 从Qt MultipleMedia 来看WASAPI 最近在学习有关Windows上的音频驱动相关的知识在正式开始说WASAPI之前我想先说一说Qt的Multiple Media为什么呢因为Qt的MultipleMedia实际上是WASAPI的一层封装它在是线上替我做了很多事就好像在Microsoft的文档上会推荐你先学习Windows.Media.Capture然后再看low level的WASAPI。 我这篇文章中一方面是我Qt MultipleMedia用的比较多,另一方面Qt MultiMedia也比较简单为音频相关的API做了很多封装这样就不需要你自己一个个HRESULT的去调试和测试了。 Qt MultiMedia Audio Recorder 由于Qt在5进6之后对Qt MultiMedia进行了大范围重构所以这里Qt的项目我做了两个版本分别为 audio-record-qt audio-record-qt6 在调用上Qt6和Qt5没有本质区别所以这里我将着重聊一聊qt5上的录音机 在Qt5中录音机的数据流如图所示 流程大概如下 获取所有设备的信息根据名称匹配获取我们需要的那个设备的QAudioDeviceInfo使用QAudioDeviceInfo获取到QAudioInput输入和QAudioOutput输出设备重写一个QIODevice类修改其writeData方法并在其中完成你想要做的事情包括但不限于保存为文件获得耳返数据进行算法的处理等等。将你继承了QIODevice的类的成员变量放进QAudioInput和QAudioOutput的start中这样一个完整的流就完成了。 其实WASAPI实际上也就是沿着这个Qt的MultiMedia的思路进行开发就可以了但是在WASAPI中没有Qt的封装接口上会更加复杂一点而已。但是总的流程并没有本质区别。 还有需要注意的一点就是QIODevice和QByteArray对数据流的封装做的很好在纯C中只能自己手动管理所以这个地方可能会出现内存泄漏的风险在开发的时候需要多多注意内存泄漏的问题。 WASAPI Audio Recorder 工程地址 LeventureQys/Windows_Audio_Driver/WASAPI_Testbench 在WASAPI中和Qt的MultiMedia中大的流程是一样的但是在接口上来说往往更加复杂简单的来说流程大致如下 其中和QtMultiMedia中最重要的区别就是没有一个专门的QIODevice去帮我处理线程和数据的关系而是需要自己单开一个线程然后从Capture/Render实例中去GetBuffer然后从中获取数据或者往里面写入数据再手动释放。 这个过程非常自由同样也非常容易出现意外所以在操作WASAPI的过程中需要谨慎谨慎再谨慎。 具体的代码详情见Github链接 LeventureQys/Windows_Audio_Driver/WASAPI_Testbench 我这里只简单说说我在工程中遇到的几个小问题。 输入设备的IAudioClient Initialize方法失败 我的调用函数如下 hr this-ptr_audio_client-Initialize(AUDCLNT_STREAMFLAGS_LOOPBACK | AUDCLNT_STREAMFLAGS_EVENTCALLBACK,AUDCLNT_STREAMFLAGS_EVENTCALLBACK,hnsDefaultDevicePeriod,hnsDefaultDevicePeriod,format_wav,NULL);在这个函数中第二个参数我设置的是AUDCLNT_STREAMFLAGS_LOOPBACK | AUDCLNT_STREAMFLAGS_EVENTCALLBACK 这个地方具体要取决于设备是否允许进行回环录制和是否允许回调并不是所有麦克风都支持这俩。 录制后的声音播放出来有很强的噪音但我能确定声音是从麦克风传来的。 这种情况大概率是两边的声音没有对齐这个根据wav的编码方式来的。简单地说就是两边的channel和bitrate不匹配导致声音无法对齐。具体你需要比对这两个format,然后再根据实际情况在音频处理处做应对和调整 WAVEFORMATEX* format_wav NULL; hr ptr_audio_client-GetMixFormat(format_wav); if (FAILED(hr)) throw std::exception(Cant Get Mix Format!);WAVEFORMATEX* format_wav_output NULL; hr ptr_output_audio_client-GetMixFormat(format_wav_output); if (FAILED(hr)) throw std::exception(Cant Get Mix Format Output!);具体怎么调整详情可以看 [音视频学习笔记]二、什么是PCM音频一些常见的PCM处理 比如我这里我的麦克风的channels是1但是耳机的channels是2所以这里在播放的时候需要调整一下将每一个bit都复制一份放到输出的音频流中如代码所示 BYTE* pRenderData; hr ptr_output_audio_client_render-GetBuffer(numFramesAvailable, pRenderData); if (FAILED(hr)) {std::cerr GetBuffer (render) failed: hr std::endl;return hr; } float* inputData reinterpret_castfloat*(pData); float* outputData reinterpret_castfloat*(pRenderData);for (UINT32 i 0; i numFramesAvailable; i) {// 将单声道复制到立体声的两个通道outputData[i * 2] inputData[i];outputData[i * 2 1] inputData[i]; } 到立体声的两个通道outputData[i * 2] inputData[i];outputData[i * 2 1] inputData[i]; }
http://www.tj-hxxt.cn/news/219901.html

相关文章:

  • 免费网站建设多少钱友情链接检测659292
  • 网站首页设计方案网站建设的培训心得
  • 客户说做网站没效果实际缴纳多少
  • 单页建站系统大连旅游必去景点
  • 网站开发的基础课程怎么查自己的网站备案编号
  • 免费网站空间可访问100m光纤做网站
  • 我有服务器怎么做网站太原建筑市场网站
  • 境外电商平台排行榜百度seo快速
  • 机械网站优化wordpress视频网站模板
  • 免费表格模板网站wordpress微信分享带缩略图
  • 昆明网站服务网站开发融资
  • 手机网站下拉列表咸阳网络推广
  • seo网站建站公司的主页郫县网站制作
  • 北京产品网站设计哪家专业5网站建设
  • 锡盟做网站大连网站程序开发
  • 长沙做网站 必看 磐石网络wordpress详细安装说明
  • 湖南网络推广公司泉州网站建设优化公司
  • 现在市场网站建设怎么样自贡市住房和城乡建设局网站
  • 如何利用视频网站做推广需要郑州网站建设
  • 网站不备案有什么后果网站订单系统模板下载
  • 网投网站怎样建北京网站建设 招聘信息
  • 关于网站建设的合同杭州网站制作蒙特
  • 中铁建设投资集团有限公司招聘网站推荐门户网站建设公司
  • 做图表用的网站欧美风格外贸网站建设
  • 天津南开做网站公司个人如何做网站软件
  • 西安公司网站晋城企业网站建设价格
  • 网站开发需求书模板重庆建设部网站官网
  • 贵阳哪些公司建网站商标可以做网站吗
  • 个人注册网站怎么注册柳州建站
  • 怎么做淘宝链接网站网络服务商官方网站