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

怎么做黑客把网站余额更改友情链接又称

怎么做黑客把网站余额更改,友情链接又称,外贸业务员做网站,社区类网站开发实践[WASAPI] 从Qt MultipleMedia 来看WASAPI 最近在学习有关Windows上的音频驱动相关的知识,在正式开始说WASAPI之前,我想先说一说Qt的Multiple Media,为什么呢?因为Qt的MultipleMedia实际上是WASAPI的一层封装,它在是线…

[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中,录音机的数据流如图所示:

在这里插入图片描述

流程大概如下:

  1. 获取所有设备的信息
  2. 根据名称匹配,获取我们需要的那个设备的QAudioDeviceInfo
  3. 使用QAudioDeviceInfo,获取到QAudioInput(输入)和QAudioOutput(输出)设备
  4. 重写一个QIODevice类,修改其writeData方法,并在其中完成你想要做的事情,包括但不限于:保存为文件,获得耳返数据,进行算法的处理等等。
  5. 将你继承了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 我这里只简单说说我在工程中遇到的几个小问题。

  1. 输入设备的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 这个地方具体要取决于设备是否允许进行回环录制和是否允许回调,并不是所有麦克风都支持这俩。

  1. 录制后的声音播放出来有很强的噪音,但我能确定声音是从麦克风传来的。

这种情况大概率是两边的声音没有对齐,这个根据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_cast<float*>(pData);
float* outputData = reinterpret_cast<float*>(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.hkea.cn/news/714357/

相关文章:

  • 上海做手机网站建设盐城网站优化
  • html论坛模板东营seo整站优化
  • 天津网站建设582345网址导航桌面版
  • 东莞纸箱厂东莞网站建设经典模板网站建设
  • 贺州同城购物网站建设中国网站排名100
  • 黄骅港旅游景点爱站网seo工具包
  • 网站 图文混编提高网站搜索排名
  • 北京怀柔网站制作教育机构
  • 网站建设费 大创友链交换平台
  • o2o商城网站系统开发微信群拉人的营销方法
  • 帝国cms做淘宝客网站网页设计用什么软件
  • 营销型网站建设的优缺点视频优化软件
  • 珠海响应式网站建设推广公司网络营销发展方案策划书
  • 中国人自己的空间站每日英语新闻
  • 教师可以做网站吗seo常用工具包括
  • 武山建设局网站什么是seo
  • 做文案需要用到的网站全网模板建站系统
  • 苏州乡村旅游网站建设策划书网站建设百度推广
  • 12380网站建设情况总结百度浏览器入口
  • 直播网站开发要多久排行榜前十名
  • 网站备案完才能建站吗企业建站公司
  • 网站开发外包合同西安网站优化公司
  • 2022网页设计尺寸规范和要求怎么做seo关键词优化
  • 北京大学两学一做网站十大收益最好的自媒体平台
  • 网站开发服务费企业网站建设的一般要素
  • 台州企业网站制作公司郴州网站推广
  • 如何做移动端网站邮件营销
  • 网站制作佛山crm管理系统
  • 网站综合营销方案设计网页设计教程
  • 东莞做网站制作宁波技术好的企业网站制作