数据学院
【来源:OSCHINA】编辑字符图
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>> 在开始搜索框中输入“专用字符编辑程序”
多媒体
2018-11-01 21:52:00
【来源:OSCHINA】Qt之QSlider
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>> 1、新建QtGUI应用,选取QWidget为基类,取消创建界面 2、widget.h中 #ifndef WIDGET_H #define WIDGET_H #include #include class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = 0); ~Widget(); private: QSlider *slider[6]; QLabel *lbl[3]; private slots: void valueChanged1(int value); void valueChanged2(int value); void valueChanged3(int value); }; #endif // WIDGET_H widget.cpp中 #include "widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) { int xpos = 20, ypos = 20; for(int i = 0 ; i < 6 ; i++) { if(i <= 2) { slider[i] = new QSlider(Qt::Vertical, this); slider[i]->setGeometry(xpos, 20, 30, 80); xpos += 30; } else if(i >= 3) { slider[i] = new QSlider(Qt::Horizontal, this); slider[i]->setGeometry(130, ypos, 80, 30); ypos += 30; } slider[i]->setRange(0, 100); slider[i]->setValue(50); } xpos = 20; for(int i = 0 ; i < 3 ; i++) { lbl[i] = new QLabel(QString("%1").arg(slider[i]->value()), this); lbl[i]->setGeometry(xpos+10, 100, 30, 40); xpos += 30; } connect(slider[0], SIGNAL(valueChanged(int)), this, SLOT(valueChanged1(int))); connect(slider[1], SIGNAL(valueChanged(int)), this, SLOT(valueChanged2(int))); connect(slider[2], SIGNAL(valueChanged(int)), this, SLOT(valueChanged3(int))); } void Widget::valueChanged1(int value) { lbl[0]->setText(QString("%1").arg(value)); slider[3]->setValue(slider[0]->value()); } void Widget::valueChanged2(int value) { lbl[1]->setText(QString("%1").arg(value)); slider[4]->setValue(slider[1]->value()); } void Widget::valueChanged3(int value) { lbl[2]->setText(QString("%1").arg(value)); slider[5]->setValue(slider[2]->value()); } Widget::~Widget() { } 效果:
多媒体
2018-09-18 09:50:00
【来源:OSCHINA】WebRTC系列之音频的那些事
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>> 年初因为工作需要,开始学习 WebRTC ,就被其复杂的编译环境和巨大的代码量所折服,注定是一块难啃的骨头。俗话说万事开头难,坚持一个恒心,终究能学习到 WebRTC 的设计精髓。今天和大家聊聊 WebRTC 中音频的那些事。 WebRTC 由语音引擎,视频引擎和网络传输三大模块组成,其中语音引擎是 WebRTC 中最具价值的技术之一,实现了音频数据的采集、前处理、编码、发送、接受、解码、混音、后处理、播放等一系列处理流程。 音频引擎主要包含:音频设备模块 ADM 、音频编码器工厂、音频解码器工厂、混音器 Mixer 、音频前处理 APM 。 音频工作机制 想要系统的了解音频引擎,首先需要了解核心的实现类和音频数据流向,接下来我们将简单的分析一下。 音频引擎核心类图: 音频引擎 WebrtcVoiceEngine 主要包含音频设备模块 AudioDeviceModule 、音频混音器 AudioMixer 、音频 3A 处理器 AudioProcessing 、音频管理类 AudioState 、音频编码器工厂 AudioEncodeFactory 、音频解码器工厂 AudioDecodeFactory 、语音媒体通道包含发送和接受等。 1. 音频设备模块 AudioDeviceModule 主要负责硬件设备层,包括音频数据的采集和播放,以及硬件设备的相关操作。 2. 音频混音器 AudioMixer 主要负责音频发送数据的混音(设备采集和伴音的混音)、音频播放数据的混音(多路接受音频和伴音的混音)。 3. 音频 3A 处理器 AudioProcessing 主要负责音频采集数据的前处理,包含回声消除 AEC 、自动增益控制 AGC 、噪声抑制 NS 。 APM 分为两个流,一个近端流,一个远端流。近端( Near-end )流是指从麦克风进入的数据;远端( Far-end )流是指接收到的数据。 4. 音频管理类 AudioState 包含音频设备模块 ADM 、音频前处理模块 APM 、音频混音器 Mixer 以及数据流转中心 AudioTransportImpl 。 5. 音频编码器工厂 AudioEncodeFactory 包含了 Opus 、 iSAC 、 G711 、 G722 、 iLBC 、 L16 等 codec 。 6. 音频解码器工厂 AudioDecodeFactory 包含了 Opus 、 iSAC 、 G711 、 G722 、 iLBC 、 L16 等 codec 。 音频的工作流程图: 1. 发起端通过麦克风进行声音采集 2. 发起端将采集到的声音信号输送给 APM 模块,进行回声消除 AEC ,噪音抑制 NS ,自动增益控制处理 AGC 3. 发起端将处理之后的数据输送给编码器进行语音压缩编码 4. 发起端将编码后的数据通过 RtpRtcp 传输模块发送,通过 Internet 网路传输到接收端 5. 接收端接受网络传输过来的音频数据,先输送给 NetEQ 模块进行抖动消除,丢包隐藏解码等操作 6. 接收端将处理过后的音频数据送入声卡设备进行播放 NetEQ 模块是 Webrtc 语音引擎中的核心模块 在 NetEQ 模块中,又被大致分为 MCU 模块和 DSP 模块。 MCU 主要负责做延时及抖动的计算统计,并生成对应的控制命令。而 DSP 模块负责接收并根据 MCU 的控制命令进行对应的数据包处理,并传输给下一个环节 . 音频数据流向 根据上面介绍的音频工作流程图,我们将继续细化一下音频的数据流向。将会重点介绍一下数据流转中心 AudioTransportImpl 在整个环节中扮演的重要角色。 数据流转中心 AudioTransportImpl 实现了采集数据处理接口 RecordDataIsAvailbale 和播放数据处理接口 NeedMorePlayData 。 RecordDataIsAvailbale 负责采集音频数据的处理和将其分发到所有的发送 Streams 。 NeedMorePlayData 负责混音所有接收到的 Streams ,然后输送给 APM 作为一路参考信号处理,最后将其重采样到请求输出的采样率。 RecordDataIsAvailbale 内部主要流程: 由硬件采集过来的音频数据,直接重采样到发送采样率 由音频前处理针对重采样之后的音频数据进行 3A 处理 VAD 处理 数字增益调整采集音量 音频数据回调外部进行外部前处理 混音发送端所有需要发送的音频数据,包括采集的数据和伴音的数据 计算音频数据的能量值 将其分发到所有的发送 Streams NeedMorePlayData 内部主要流程: 混音所有接收到的 Streams 的音频数据 1.1 计算输出采样率 CalculateOutputFrequency() 1.2 从 Source 收集音频数据 GetAudioFromSources(), 选取没有 mute ,且能量最大的三路进行混音 1.3 执行混音操作 FrameCombiner::Combine() 特定条件下,进行噪声注入,用于采集侧作为参考信号 对本地伴音进行混音操作 数字增益调整播放音量 音频数据回调外部进行外部前处理 计算音频数据的能量值 将音频重采样到请求输出的采样率 将音频数据输送给 APM 作为一路参考信号处理 由上图的数据流向发现,为什么需要 FineAudioBuffer 和 AudioDeviceBuffer ?因为 WebRTC 的音频流水线只支持处理 10 ms 的数据,不同的操作系统平台提供了不同的采集和播放时长的音频数据,不同的采样率也会提供不同时长的数据。例如 iOS 上, 16K 采样率会提供 8ms 的音频数据 128 帧; 8K 采样率会提供 16ms 的音频数据 128 帧; 48K 采样率会提供 10.67ms 的音频数据 512 帧 . AudioDeviceModule 播放和采集的数据,总会通过 AudioDeviceBuffer 拿进来或者送出去 10 ms 的音频数据。对于不支持采集和播放 10 ms 音频数据的平台,在平台的 AudioDeviceModule 和 AudioDeviceBuffer 还会插入一个 FineAudioBuffer ,用于将平台的音频数据格式转换为 10 ms 的 WebRTC 能处理的音频帧。在 AudioDeviceBuffer 中,还会 10s 定时统计一下当前硬件设备过来的音频数据对应的采样点个数和采样率,可以用于检测当前硬件的一个工作状态。 音频相关改动 音频 Profile 的实现,支持 Voip 和 Music 2 种场景,实现了采样率、编码码率、编码模式、声道数的综合性技术策略。 iOS 实现了采集和播放线程的分离,支持双声道的播放。 音频 3A 参数的兼容性下发适配方案。 耳机场景的适配,蓝牙耳机和普通耳机的适配,动态 3A 切换适配。 Noise_Injection 噪声注入算法,作为一路参考信号,在耳机场景的回声消除中的作用特别明显。 支持本地伴音文件 file 和网络伴音文件 http&https 。 Audio Nack 的实现,提高音频的抗丢包能力,目前正在进行 In-band FEC 。 音频处理在单讲和双讲方面的优化。 iOS 在 Built-In AGC 方面的研究: Built-In AGC 对于 Speech 和 Music 有效,对于 noise 和环境底噪不会产生作用。 不同机型的麦克风硬件的增益不同, iPhone 7 Plus > iPhone 8 > iPhone X; 因此会在软件 AGC 和硬件 AGC 都关闭的情况下,远端听到的声音大小表现不一样。 iOS 除了提供的可开关的 AGC 以外,还有一个 AGC 会一直工作,对信号的 level 进行微调;猜想这个一直工作的 AGC 是 iOS 自带的 analog AGC ,可能和硬件有关,且没有 API 可以开关,而可开关的 AGC 是一个 digital AGC 。 在大部分 iOS 机型上,外放模式 “ 耳机再次插入后 ” , input 的音量会变小。当前的解决方案是在耳机再次插入后,增加一个 preGain 来把输入的音量拉回正常值。 音频问题排查 和大家分享一下音频最常见的一些现象以及原因: 更多技术干货,欢迎关注 vx 公众号 “ 网易智慧企业技术 +” 。系列课程提前看,精品礼物免费得,还可直接对话 CTO 。 听网易 CTO 讲述前沿观察,看最有价值技术干货,学网易最新实践经验。网易智慧企业技术 + ,陪你从思考者成长为技术专家。
多媒体
2020-07-07 15:40:00
【来源:OSCHINA】ffmpeg
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>> 安装 https://github.com/Bingnan/ffmpeg3.0.1 注:安装完会在/root/bin下,但是这样有时在脚本里就没法执行ffmpeg,所以把文件都到/usr/bin下,问题解决 一次编译安装完成,/root/bin/ff* 下的文件就可以拷贝到其他机器上使用了 参数 -codecs 列出编解<和谐>码器 -formats 列出分装格式 -f 格式化 一般会自动识别,不需要这个字段 -i input -c / -codec指定,编解<和谐>码器 -c copy 不用重新编码 例子 ffmpeg -i index_1-0.wmv -c:v libx264 -c:a libfdk_aac out.mp4 ffmpeg -f concat -i /home/lsr/record/42887.txt -c copy /home/lsr/record/42887-test.flv ffmpeg -i rtmp://strtmpplay.cdn.suicam.com/sclive/46508 -f segment -codec copy -map 0 -vbsf h264_mp4toannexb -flags -global_header -segment_format mpegts -segment_list 46508.m3u8 -segment_time 10 -segment_list_entry_prefix /home/lsr/data/ -segment_list_size 5 seg-%03d.ts 推流: ffmpeg -re -i 123.mp4 -c copy -f flv rtmp://xxx/xxx
多媒体
2019-02-21 18:17:00
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>> 设计师都喜欢浏览一些设计网站,那么什么样的网站是对我们平时的工作学习有一定的帮助的呢?今天小编给大家整理了20个设计网站,用途不同,觉得有用的小伙伴可以收藏学习。 设计的网站推荐: 1, dribbble-追波 比较潮流的设计内容查看。 2, Behance 国外的站酷。内容优质全面 3.站酷 国内设计师平台,每天必看。 4.UI中国 国内UI交流平台 5. 有很多非常棒的高清创意视频 6. UI素材搜索引擎,提供大量的PSD源文件免费下载 7.找字网 找字网提供大量的中英文字体 8.网页设计师联盟 国内专业网页设计人才基地 9.优设网 一线设计师,总监干货分享。 10.花瓣 Huabanpro.com 你想要的花瓣回来了 11.C4D之家 12.。直线教程网 视频学习网 13.千图网 素材下载 14.包图网 15.92素材网 16.JVshi 正版素材 17.映速社区 很好的教学平台 18.doyoudo 小莫老师不容错过 19.盒子UI 20.FONTS 全球最大的字体提供者
多媒体
2019-02-20 11:36:00
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>> 下载Essential Studio for Xamarin最新版本 Essential Studio for Xamarin 是全面的Xamarin.iOS、Xamarin.Android和Xamarin.Forms组件套包,包含最快的图表和网格。 分段控制不定开关 在进一步定制分段控制时,它可以作为典型开关或具有三种状态的不确定开关:开、关和平衡。 Indeterminate switch with Syncfusion’s Xamarin.Forms Segmented Control. 功能丰富范围滑块 范围滑块控件允许用户使用优雅的界面选择最小和最大范围内的值或值范围。 Syncfusion’s Xamarin.Forms Range Slider. 带有单选按钮组的组选项 单选按钮控件为用户提供了一个优雅的界面,可以从两个或多个选项中进行选择,而不会占用太多空间。 Syncfusion’s Xamarin.Forms Radio Button. 不确定复选框 使用复选框控件,当一组子选项同时具有未选中和已选中状态时,通过用不确定状态指示,确保选中或未选中所有子选项。 Syncfusion’s Xamarin.Forms CheckBox. 自定义视图分级 您可以自定义我们的Xamarin.Forms分级控制,而不是像传统的明星一样的外观,通过建立一个反应或情绪界面来改善用户体验,就像Facebook等社交网络应用程序中的那样。 Syncfusion’s Xamarin.Forms Rating control. 总结 在这篇文章中,我们介绍了用于创建表单的Syncfusion Xamarin.Forms输入控件。可以看到DataForm控件本身在应用程序需要大量表单的地方创建基于对象的数据表单是多么容易。
多媒体
2019-02-19 10:37:00
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>> 下载Essential Studio for Xamarin最新版本 Essential Studio for Xamarin 是全面的Xamarin.iOS、Xamarin.Android和Xamarin.Forms组件套包,包含最快的图表和网格。 用于日期选择的轻量级日历 使用强大的日历控件获取精确的日期输入。用户可以从月视图导航到年视图。 Syncfusion’s Xamarin.Forms Calendar. 使用文本输入布局使条目现代化 文本输入布局控件通知用户预期要输入的类型数据,如果输入的类型数据错误,则使用验证消息通知用户。它允许您添加密码切换图标以显示或隐藏密码;辅助标签(如浮动标签)以及条目控件顶部的提示、错误和帮助文本。 Syncfusion’s Xamarin.Forms Text Input Layout. 自定义格式的数字项 使用数字输入控件将输入限制为数值。控件根据区域适应设备文化。 Syncfusion’s Xamarin.Forms Numeric Entry 用NumericUpDown旋转数字 使用NumericUpDown控件以频繁的步骤限制数字输入。它就像一个重复按钮,通过简单的按钮单击来增加或减少数值。 Syncfusion’s Xamarin.Forms NumericUpDown. 使用屏蔽项指定模式 通过提供自定义掩码或regex,将用户输入限制为某些类型的字符(如电话号码、IP地址和产品ID等输入的文本),确保使用屏蔽输入控件的输入符合特定模式。 Syncfusion’s Xamarin.Forms Masked Entry. 可滚动分段控件 使用分段控件为用户提供一个优雅的界面,从两个或多个上下文中进行选择。表单分段控制可以取代传统的单选按钮。 Syncfusion’s Xamarin.Forms Segmented Control.
多媒体
2019-02-19 10:24:00
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>> 下载Essential Studio for Xamarin最新版本 Essential Studio for Xamarin 是全面的Xamarin.iOS、Xamarin.Android和Xamarin.Forms组件套包,包含最快的图表和网格。 如何将Syncfusion输入控件添加到数据表单中 从Visual Studio模板创建项目 从NuGet添加引用 添加控件初始化代码 在以下步骤中,已添加必要的XAML代码以初始化控件。 步骤1:在相应的页面中包含SfAutoComplete命名空间。 1 2 < contentpage xmlns:autocomplete = "clr-namespace:Syncfusion.SfAutoComplete.XForms;assembly=Syncfusion.SfAutoComplete.XForms" x:class = "GettingStarted.MainPage" > 步骤2:通过将高度定义为40来声明内容页的SfAutoComplete,因为地址栏需要40像素的高度。 1 2 3 < contentpage xmlns:autocomplete = "clr-namespace:Syncfusion.SfAutoComplete.XForms;assembly=Syncfusion.SfAutoComplete.XForms" x:class = "GettingStarted.MainPage" > < autocomplete:sfautocomplete heightrequest = "40" > 注意:前面的步骤适用于将所有Syncfusion的Xamarin.Forms输入控件添加到Xamarin.Forms应用程序中。 添加建议项 当然,自动完成控件可以与数据源以及直接字符串项绑定。 1 2 3 4 5 6 7 8 9 10 11 12 13 < contentpage xmlns:autocomplete = "clr-namespace:Syncfusion.SfAutoComplete.XForms;assembly=Syncfusion.SfAutoComplete.XForms" xmlns:listcollection = "clr-namespace:System.Collections.Generic;assembly=mscorlib" x:class = "GettingStarted.MainPage" > < autocomplete:sfautocomplete heightrequest = "40" > < autocomplete:sfautocomplete.autocompletesource > < listcollection:list x:typearguments = "x:String" > < x:string >Aqua < x:string >Blue < x:string >Indigo < x:string >Red < x:string >Purple 带切换操作的高级按钮 Xamarin.Forms按钮是一个自定义按钮控件,具有用户界面自定义、切换状态和主题支持。您可以设置图标、背景图像和角边半径,也可以使用可视状态管理器自定义不同可视状态的外观。 Syncfusion’s Xamarin.Forms Button. 可编辑组合框 表单组合框控件是一种数据输入控件,允许用户从固定的项目列表中选择选项。组合框用于选择一个国家,可以打开下拉列表,也可以简单地键入开始键入其名称。 Syncfusion’s Xamarin.Forms ComboBox. 多功能选择器 我们甚至提供了一个通用的选择器控件,可以用来从任何类型的列表数据中进行选择。这决定了选取器作为日期选取器、时间选取器、语言选取器、颜色选取器等的性质。直观的多列选项支持层叠选择。选择器控件是唯一一个根据数据源结构自动生成其列的组件。在此表单中,选取器控件可以提供一个通用的UI来选取日期值。 Syncfusion’s Xamarin.Forms Picker.
多媒体
2019-02-19 09:54:00
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>> 下载Essential Studio for Xamarin最新版本 Essential Studio for Xamarin 是全面的Xamarin.iOS、Xamarin.Android和Xamarin.Forms组件套包,包含最快的图表和网格。 介绍 欢迎学习使用Syncfusion的一些输入控件(如用于Xamarin.Forms平台的内置DataForm控件)创建数据输入表单。 Xamarin.Forms数据表单控件用于显示和编辑任何数据对象的属性,使用各种内置编辑器来处理不同的数据类型。它简化了各种表单的开发,如登录、保留和数据输入。 除DataForm控件外, Syncfusion Essential Studio for Xamarin 还提供其他单独的输入控件,使您可以根据自己的喜好创建自己的数据输入窗体: Autocomplete、Button、Badge View、Chips、ComboBox、Picker、Calendar、Numeric Entry、NumericUpDown、Masked Entry、CheckBox、Radio Button、Range Slider、Rating和Segmented Control,使您能够根据规范创建自己的数据输入表单。 如果有预定义的模型,请使用DataForm控件 如果您的应用程序有很多表单,并且您有预定义的模型,那么我们提供一个DataForm控件,它可以基于您的数据对象创建表单,从而简化表单创建过程。DataForm可以帮助您以多种方式呈现数据,例如在预定义的布局中呈现模型项的集合。 以下步骤说明如何使用DataForm创建具有预定义模型的表单: 步骤1:导入控件命名空间 “xmlns:dataForm=”clr-namespace:Syncfusion.XForms.DataForm;assembly=Syncfusion.SfDataForm.XForms” 在XAML页中,创建DataForm控件的实例并将其作为视图添加到线性布局中。 1 2 3 < contentpage xmlns:dataform = "clr-namespace:Syncfusion.XForms.DataForm;assembly=Syncfusion.SfDataForm.XForms" x:class = "GettingStarted.MainPage" > < dataform:sfdataform > 步骤2:数据表单是一个数据编辑控件,因此创建一个数据对象来编辑数据对象。这里,名为ItemInfo的数据对象是用一些属性创建的。 1 2 3 4 5 6 7 8 public class ItemInfo { public ItemInfo() { } public int TotalAmount { get; set; } public DateTime? Date { get; set; } public string Name { get; set; } public bool IsBillable { get; set; } } 步骤3:在一个新的类文件中创建一个具有用必需数据初始化的ItemInfo属性的模型存储库类,如下面的代码示例所示。 1 2 3 4 5 6 7 8 public class ViewModel { public ItemInfo ItemInfo { get; set; } public ViewModel() { ItemInfo= new ItemInfo(); } } 步骤4:要在数据表单中填充标签和编辑器,请设置DataObject属性。 1 2 3 4 5 6 < contentpage xmlns:local = "clr-namespace:GettingStarted" xmlns:dataform = "clr-namespace:Syncfusion.XForms.DataForm;assembly=Syncfusion.SfDataForm.XForms" x:class = "GettingStarted.MainPage" > < contentpage.bindingcontext > < local:viewmodel > < dataform:sfdataform dataobject = "{Binding ItemInfo}" > Syncfusion’s Xamarin.Forms DataForm. Syncfusion的Xamarin.Forms输入控件表单无模型数据表单 到目前为止,我们讨论了Syncfusion的Xamarin.Forms数据表单控件如何帮助创建预定义的模型数据表单。现在,让我们看看Syncfusion输入控件如何通过丰富的功能显著改善最终用户的数据输入体验。 快速且功能丰富的自动完成功能 Syncfusion的Xamarin.Forms自动完成控件在用户键入建议列表时提示用户进行选择,从而使数据输入更快、更不容易出错。例如,在表单中,用户可以通过使用此控件进行搜索来选择邮政编码。 高性能搜索引擎可以在不到一秒钟的时间内加载和搜索100000个项目。自定义搜索的打字公差功能、有效数据利用的按需加载、带标记表示的多重选择、匹配文本的突出显示和音调符号敏感性是此控件的其他几个重要功能。 Syncfusion’s Xamarin.Forms Autocomplete.
多媒体
2019-02-18 09:55:00
【来源:OSCHINA】Alembic 编译
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>> 编者注 记录Alembic(三维中间件)的编译过程。 安装编译环境 安装Clion 略 安装MinGW 作者偷懒,直接下载DEVCpp,其中内置MinGW。路径为C:\Program Files (x86)\Dev-Cpp\MinGW64 CMake检查 Alemic项目检查 ====================[ Build | abcdiff | Debug ]================================= C: