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

专业的佛山网站建设丹东电信网站备案

专业的佛山网站建设,丹东电信网站备案,做兼职在线抠图网站,wordpress 文章类型模板Qt 多媒体音频框架 一、概述二、音频设计1. ALSA 基础2. Qt 音频类1. 接口实现2. alsa 插件实现 一、概述 环境详细Qt版本Qt 5.15操作系统Deepin v23代码工具Visual Code源码https://github.com/qt/qtmultimedia/tree/5.15 这里记录一下在Linux下Qt 的 Qt Multimedia 模块的设… Qt 多媒体音频框架 一、概述二、音频设计1. ALSA 基础2. Qt 音频类1. 接口实现2. alsa 插件实现 一、概述 环境详细Qt版本Qt 5.15操作系统Deepin v23代码工具Visual Code源码https://github.com/qt/qtmultimedia/tree/5.15 这里记录一下在Linux下Qt 的 Qt Multimedia 模块的设计我目前先记录与音频相关的库的设计。不同Qt版本的设计有些不一样需要看对应版本的源码设计。 二、音频设计 1. ALSA 基础 ALSA是 Advanced Linux Sound Architecture的缩写即高级Linux声音架构。在Linux 2.6的内核版本后ALSA目前已经成为了Linux的主流音频体系结构。 2. Qt 音频类 1. 接口实现 最重要的就是 QAudioInput和QAudioOutput两个类作为音频输入输出的类。 这个类的源码位置在 src/multimedia/audio/qaudioinput.cpp那我们开始看 QAudioInput 类的关键实现吧在 qaudioinput.cpp 中都是使用的 qaudioinput.h 头文件中 QAbstractAudioInput 类型的 d 的成员方法。 如 QAudioInput::start() 实际使用的是 d-start(); // qaudioinput.h private:QAbstractAudioInput* d;// qaudioinput.cpp void QAudioInput::start(QIODevice* device) {d-start(device); } .... QAudioFormat QAudioInput::format() const {return d-format(); }在 QAudioInput 构造函数中得知是d 是由工厂类 QAudioDeviceFactory 创建的 src/multimedia/audio/qaudiodevicefactory.cppQAudioInput::QAudioInput(const QAudioFormat format, QObject *parent):QObject(parent) {d QAudioDeviceFactory::createDefaultInputDevice(format);... }QAudioDeviceFactory 工厂通过 createDefaultInputDevice() ⇒ \Rightarrow ⇒ createInputDevice() 函数调用。所以具体就看 createInputDevice() 函数实现 就可以了。 QAbstractAudioInput* QAudioDeviceFactory::createDefaultInputDevice(QAudioFormat const format) {return createInputDevice(defaultDevice(QAudio::AudioInput), format); }QAbstractAudioInput* QAudioDeviceFactory::createInputDevice(QAudioDeviceInfo const deviceInfo, QAudioFormat const format) {if (deviceInfo.isNull())return new QNullInputDevice();#if !defined (QT_NO_LIBRARY) !defined(QT_NO_SETTINGS)QAudioSystemFactoryInterface* plugin qobject_castQAudioSystemFactoryInterface*(audioLoader()-instance(deviceInfo.realm()));if (plugin) {QAbstractAudioInput* p plugin-createInput(deviceInfo.handle());if (p) p-setFormat(format);return p;} #endifreturn new QNullInputDevice(); }上面 createInputDevice 中 QAbstractAudioInput *p 就是 通过 audioLoader 加载的插件 plugin 创建出的。这样不同系统可以实现不同的插件根据系统做到跨平台性。 QAudioSystemFactoryInterface* plugin 就是插件的接口父类。 在创建失败的时候QAudioDeviceFactory 工厂也通过定义 QNullInputDevice 类。保证插件系统正常运行。 让我们看看QNullInputDevice 在 qaudiodevicefactory.cpp 的定义 class QNullInputDevice : public QAbstractAudioInput { public:void start(QIODevice*) override { qWarning()using null input device, none available;}QIODevice *start() override { qWarning()using null input device, none available; return nullptr; void setBufferSize(int ) override {}int bufferSize() const override { return 0; } ...void setVolume(qreal) override {}qreal volume() const override {return 1.0f;} };2. alsa 插件实现 那让我们继续看看音频功能的具体实现音频插件的源码工程位置在 src/pligins/alsa/alsa.pro在下面我们可以看到不同平台的不同实现有Linux、Windows、Android等。在我WIndows电脑的Qt5.14.2 上音频库则是使用的 windowsaudio 工程 我们找到Linux的alsa工程从工程文件可以得到这个插件的名字叫 qtaudio_alsa 这个插件最后生成的名字叫 libqtaudio_alsa.so 在我的系统中安装的位置在 /usr/lib/x86_64-linux-gnu/qt5/plugins/audio/libqtaudio_alsa.so 下面继续介绍这个插件 qalsaplugin.cpp就是生成插件的接口类对外使用内部使用了ALSA实现功能 qalsaaudiodeviceinfo.cpp封装的 音频设备信息功能QAudioDeviceInfo 功能 qalsaaudioinput.cpp 音频输入类实际 QAudioInput 的实现 qalsaaudiooutput.cpp音频输出类实际的 QAudioOutput 的实现 下面就是 qalsaaudioinput 的open函数实现可以看到open函数使用了 snd_pcm_open 函数 bool QAlsaAudioDeviceInfo::open() {int err 0;QString dev;if (!availableDevices(mode).contains(device.toLocal8Bit()))return false;#if SND_LIB_VERSION 0x1000e // 1.0.14if (device.compare(QLatin1String(default)) ! 0)dev deviceFromCardName(device);else #endifdev device;if(mode QAudio::AudioOutput) {errsnd_pcm_open( handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0);} else {errsnd_pcm_open( handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_CAPTURE,0);}if(err 0) {handle 0;return false;}return true; }
http://www.tj-hxxt.cn/news/230400.html

相关文章:

  • 哪些网站是做零售的网站备案的好处
  • 网站后台上传案例能同步到博客吗网络营销推广实例
  • 企业网站设计wordpress南昌地宝网招聘信息网最新招聘
  • 网站建设岗位将来有什么发展wordpress安装方式
  • 影视网站开发装修设计师一般多少钱
  • 网站后台代码中国人做英文网站
  • 让别人做网站需要注意什么问题查建设公司年度保证金网站
  • 企业做不做网站的坏处在线建站|网页制作|网站建设平台
  • wordpress社交链接设置百度seo搜索引擎优化厂家
  • 重庆企业做网站公司网站做一年多少钱
  • 苏州网站关键词优化推广沈阳不孕不育医院前三名
  • 一个云主机 多个网站百度推广官网推荐:sk67666
  • 用vue做的网站模板微营销是什么合法吗
  • 外贸网站建设有哪些要求中天建设集团门户网站
  • 只有一个人网站开发外贸建站需要花多少钱
  • 一学一做专题网站单位网站建设内容
  • 营销型网站建设发难开通网站申请书
  • 虚拟主机建站邮票上的化学史网站开发
  • 浙江建设职业学校网站企业自己建网站怎么建
  • 网站空间编辑器做网站的专业
  • 五莲网站设计小学网站建设设计方案
  • 网站建设竞标需要怎么做万州做网站的公司
  • 仿历史网站模板下载dw自我介绍网页制作步骤
  • 网站制作商家入驻国外免费注册域名的网站
  • wordpress 跨站调用企业网站建设技巧
  • 石河子建设局网站电子网站怎么做
  • 营销型网站建设市场公司简介模板设计图片
  • 新网站做seo做文献ppt模板下载网站有哪些内容
  • 专门做外国的网站有哪些wordpress cdn ssl证书
  • 做旅游网站的好处wordpress 图片尺寸