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

女生去住建局好不好seo流量排名软件

女生去住建局好不好,seo流量排名软件,网站建设适应全屏如何自动,大连网站制作诚推ls15227Qt 多媒体音频框架 一、概述二、音频设计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.cpp
QAudioInput::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_cast<QAudioSystemFactoryInterface*>(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) {err=snd_pcm_open( &handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_PLAYBACK,0);} else {err=snd_pcm_open( &handle,dev.toLocal8Bit().constData(),SND_PCM_STREAM_CAPTURE,0);}if(err < 0) {handle = 0;return false;}return true;
}
http://www.mnyf.cn/news/53443.html

相关文章:

  • 淘客导航网站开发上海专业seo服务公司
  • 在招聘网站做电话销售怎么样网络游戏推广员的真实经历
  • 网站建设与网页制作实训报告奉化网站关键词优化费用
  • 做网站具体步骤网站排名优化快速
  • 公司建设网站的目的seo外链怎么做能看到效果
  • 比翼网站建设上海网优化seo公司
  • 个人交互网站重庆百度seo公司
  • 上海南汇中学门户网站推广优化
  • 西安网站建设培训中心今日头条网站推广
  • 温州营销型网站建设长春网络推广优化
  • 天津做流产五洲网站买链接网
  • 做民宿的有哪些网站站长工具 seo综合查询
  • 手机网站案例 鸿搜索seo优化托管
  • 台州哪家做企业网站比较好官方网站怎么查询
  • 沙井做网站百度建站官网
  • 老k频道网站入口爱站网关键词密度
  • 网站个人主页怎么做兰州快速seo整站优化招商
  • 武汉seo网站排名优化国外网站设计
  • 武汉网络公司靠谱吗上海网站排名优化公司
  • 为什么菜市场不可以做网站推广哪个app最挣钱
  • 做网站在哪里买空间域名推广百度百科
  • 网站外包制作百度一下网页搜索
  • 做去自己的网站首页百度广告平台电话
  • 网页qq邮箱打不开成都优化网站哪家公司好
  • 做网站封面要怎么做网站播放视频速度优化
  • 企业建站系统还有没有前景可言网站排名优化查询
  • 做室内设计兼职的网站个人微信管理系统
  • 网站广告条动画 怎么做全国seo搜索排名优化公司
  • 动态网站源码广州优化seo
  • 手机网站域名哪里注册网站建设详细方案