AEC滤波系统

WebRTC AEC技术解析:从原理到实战,彻底消除实时语音回声 声学回声消除是实时音频通信中的核心信号处理技术,其原理是通过自适应滤波器估计并抵消由扬声器产生、被麦克风拾取的远端声音回声。这项技术对于保障语音清晰度、提升沟通效率具有关键价值,广泛应用于在线会议、游戏语音、直播连麦等实时互动场景。在工程实践中,WebRTC的AEC模块通过三代算法演进,持续优化对非线性回声和双讲场景的处理能力。本文聚焦于AEC3的核心机制,深入剖析延迟估计、双讲检测等关键环节,并提供针对游戏语音等高复杂度场景的实战调优方案与问题排查指南,帮助开发者系统性解决回声顽疾。 阅读详情

 

AEC滤波系统

AEC滤波系统是由软件实现的回声消除(AEC)和噪声抑制(NS)组成。此滤波器是windows XP及后续产品中的标准操作系统组件。通过Microsoft Windows SDK 的文档可得到如何通过DirectSoundCapture实现AEC滤波的信息。

 

AEC滤波系统的限制条件

   一个音频图包含音频采集并应用系统AEC滤波音效,它有如下的限制。

l         AEC系统滤波输入接口需要是PCM格式。

l         采集端的采样深度必须是16bit,播放端的采样深度是8bit或者16bit.

l         AEC系统滤波内部处理是按16 kHz采样率运行的,采集和播放的采样率也应是这个采样率,如果不同的话会进行采样率变换。

l         在windows XP 系统中,音频的采集和播放必须是相同的采样率。在windows XP SP1, windows Server 2003及以后系统,和AEC相连的采集和播放也必须是相同的采样率,但这相同的采集和播放采样率能被其它接口独立的选择(如下图)。采集的采样率可以是(按执行效率排序)16 kHz, 48 kHz, 44.1 kHz, or 8 kHz。(执行效率基于处理所需时间和语音质量)。播放端的采样率可以是(按执行效率排序)16 kHz, 48 kHz, or 44.1 kHz。注意:播放端是不支持8kHz的采样率的。

 

AEC滤波系统的接口和连接

l         AEC和NS仅支持单声道的麦克输入。如果采集是多声道的(如:立体声双声道),除第一个通道外其它通道音频输入会被忽略(和丢弃),只有单声道的播放能被处理。

l         在windows XP系统,采集和播放的时钟频率必须是相同的。AEC系统是不会匹配设备间的时钟频率。这个限制在作用于AEC运行在独立的采集和播放设备上。在windows XP SP1, windows Server 2003及以后系统,就没有这个限制了。AEC滤波能运行在不同时钟频率的采集和播放设备上并且可以分开使用采集和播放设备。

l         当AEC滤波系统正在使用时,系统的声音设备会关闭硬件混音,采样率转换,3D音效等。所以混音数据是在由软件仿真的KMixer system driver完成。有这个限制,才能确保AEC能在采集端除去所有播放端播出的音频数据。

l         所有进入AEC/NS的采集端和播放端的信号必须保证是线性的时长不变的。如果任意端的输入信号是非线性的或者是时长变化的都会阻止AEC从采集端除去回声。

l         系统音频在使用AEC时不要使用GFX滤波。因为在开启AEC时GFX滤波是不能在采集和播放端正常工作的。

l         AEC滤波仅能去除你电脑中AEC系统通道中的回声。当声音的播放路径不经过AEC系统时,回声是不能去掉的。比如,你旁边的电脑播放的声音在办公室产生的回音,你电脑中的AEC是搞不定的。

 

深入解析AEC回声消除技术:从原理到实践 本文深入解析了AEC回声消除技术的核心原理与工程实践。文章从声学回声的产生机制入手,详细阐述了自适应滤波器的工作逻辑,并重点剖析了时延估计、双讲检测、非线性失真等现实挑战。同时,文章提供了WebRTC AEC3等主流算法选型建议、关键参数调优经验,并针对智能音箱、蓝牙耳机、视频会议等不同应用场景,给出了具体的性能考量与优化方向。 阅读详情

相关推荐

AEC_Pc_中文

非常专业的前极(效果器)调音软件,用于专业酒吧,KTV,夜总会

回声消除(AEC)原理、算法及实战——卡尔曼滤波

中使用卡尔曼滤波是非常理想的,它具有占用内存小的优点(除了前一个状态量外,不需要保留其它历史数据),并且速度很快,很适合应用于实时问题和嵌入式系统。,即使伴随着各种干扰,卡尔曼滤波总是能指出真实发生的情况。的动态系统中使用卡尔曼滤波,对系统下一步的走向做出。

qq_42233059的博客 2263

带你了解如何分析Jmeter监听器常用图表并定位瓶颈

1.1 Jmeter监听器常用图表 目录 1.1 Jmeter监听器常用图表 1.1-1 查看结果树 1.1-2 汇总报告 1.1-3 集合报告 1.1-4 综合图 1.1-5 断言结果 1.1-6 图形结果 1.1-7 响应时间图 1.2 Jmeter性能瓶颈定位 1.2-1 性能瓶颈产生的原因 1.2-2 性能瓶颈的解决方法 1.2-3 性能瓶颈如何定位 1.1-1 查看结果树 查看结果树:调试利器。可以查看每个请求具体的详情,方便进行测试的比对。有点类似我...

weixin_49029722的博客 4451

音频处理: AEC、AGC、NS、VAD

实时通话中的音频问题:1. 回声 (Echo)- 扬声器播放的声音被麦克风采集- 对方听到自己的声音2. 噪声 (Noise)- 环境噪声: 风扇、空调、交通- 设备噪声: 电流声、底噪3. 音量不一致- 不同设备音量差异大- 说话距离变化4. 静音检测- 不说话时浪费带宽- 需要检测语音活动模块功能关键参数AEC消除回声滤波器长度、收敛速度AGC自动增益目标电平、攻击/释放时间NS噪声抑制抑制强度、噪声估计VAD语音检测能量阈值、挂起时间。

yk_18的博客 979

大模型越狱指令数据集全解析:从AdvBench到HarmBench

本文全面解析了AdvBench、HarmBench等主流大模型越狱指令数据集。AdvBench作为基础测试集,用于快速评估模型安全基线;HarmBench则以其全面的文本、多模态及对抗性攻击评估,成为当前权威的深度安全审计工具。文章还介绍了MaliciousInstruct、JailbreakBench等特色数据集,并提供了根据实际场景选择与使用这些数据集的具体实战指南。

weixin_29327525的博客 621

Python环境搭建和LabVIEW中的调用

本文主要介绍Python相关的环境搭建、Anaconda的使用以及在LabVIEW中调用Python的方法。

lvxisi的博客 6390

音频专业名词

音频专业名词 (一)音频基础 (二)音效调试 AEC回音消除 ANS噪声抑制 AGC/VAD自动增益控制 RX TX

weixin_41274501的博客 321

告别裸机:在FreeRTOS上为STM32移植SOEM EtherCAT主站的思路与实战

本文详细介绍了在FreeRTOS环境下为STM32移植SOEM EtherCAT主站的工程实践。通过重构任务调度模型、优化内存管理和中断响应,成功将通信周期抖动控制在±100ns以内,满足工业控制系统的严苛实时性要求。文章包含完整的移植策略、性能优化方法和实测数据,为开发者提供了一套可靠的EtherCAT主站解决方案。

weixin_30342363的博客 388

matlab help tone,THD+N Measurement with Tone-Tracking

IntroductionAudio input and output devices are non-linear in nature. This causes harmonic distortion in the audio signal. Apart from the unwanted signals that may be harmonically related to the signal...

weixin_29514317的博客 1072

SAP MM ME21N保存前检查增强

想在ME21N保存前做一些数据检查, 可以做一个增强功能,  运行 CMOD 新增,   增强接口 输入 MM06E005  (  EXIT_SAPMM06E_012 ) ,在 NCLUDE ZXM06U43 .  里写代码功能。  例子如下: *&---------------------------------------------------------------------*

heng0757的专栏 1万+

基于模糊神经网络实现水质评价预测 - Matlab源码

首先定义输入层、隐含层和输出层的节点数,并初始化权重和阈值,然后开始训练模型,在每轮训练中通过比较模型的输出值与实际值的误差来更新权重和阈值,直到误差达到最小值,为了提高模型的性能,我们可以采用交叉验证等技术进行优化。首先需要准备好数据集,使用的是嘉陵江的水质监测数据集,数据集包含了多个指标,如 pH 值、溶解氧、总氮、总磷等,以及相应的水质等级,我们需要将数据集分为训练集和测试集。在当今环境日益恶化的情况下,水质监测变得越来越重要,模糊神经网络作为一种新型的。

weixin_50547796的博客 147

webrtc 的回声抵消(aec、aecm)算法简介

webrtc 的回声抵消(aec、aecm)算法简介      webrtc 的回声抵消(aec、aecm)算法主要包括以下几个重要模块:1.回声时延估计 2.NLMS(归一化最小均方自适应算法) 3.NLP(非线性滤波) 4.CNG(舒适噪声产生),一般经典aec算法还应包括双端检测(DT)。考虑到webrtc使用的NLMS、NLP和CNG都属于经典算法范畴,故只做简略介绍,本文重点介绍web

u012931018的专栏 1万+

目标检测YOLO实战应用案例100讲-基于YOLOv7的番茄采摘机械手场景感知及试验(下)

根据软件系统的设计需求,制定系统的可行性方案分析,编写系统的相关程序和 调试运行环境,对系统进行测试,以实现对番茄数据的采集及监测。登陆界面登陆后,进入选择界面,菜单包括了对番茄种植棚室的固定相机数据的监测、 对番茄采摘机械手的双目相机采集的番茄的静态、动态数据的获取、对番茄静态、动态数 据处理的功能菜单等选项。与利用人工去进行对于番茄果实的识别和数目的统计相比,番茄视觉系统自动记录番 茄数量以及红色已经成熟的番茄、青色未成熟番茄的数量,减轻人工记录的工作量,减少 人工记录的误差,从经济方面是可行的。

qq_36130719的博客 812

AEC回声系统

远端A侧mic录音作为取为。

jackzhouyu的专栏 822

基于STC8G1K08A单片机的EC11旋转编码器控制(江科大同款,代码可直接使用)

本文介绍了STC8G系列单片机与EC11旋转编码器的接口实现方案。硬件方面详细说明了EC11编码器的机械结构、电气特性及与单片机的典型连接电路,包括上拉电阻和消抖设计。软件部分重点阐述了状态检测算法,通过状态机和查找表实现方向判断,采用中断方式检测信号变化,并配合定时器进行软件消抖处理。文章还提供了完整的代码实现,包括GPIO初始化、中断服务函数、状态转换逻辑等关键模块,展示了如何通过串口输出验证旋转计数。最后讨论了抗抖动优化、高低速应用场景等实际问题解决方案。该方案在菜单导航、参数调节等场景中具有实用价值

weixin_74013772的博客 322

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

了解CV和RoboMaster视觉组(五)滤波器、观测器和预测方法:自适应滤波器的应用

介绍了自适应滤波器的应用,如降噪、系统辨识、序列信号预测等。并以AEC为例,详细的说明了具体应用,并且指出了大量网上其他博客和资料中出现的讹误

HNU跃鹿战队的博客 1155

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

WebRTC AEC算法

AEC和AECM:AECM适用于嵌入式设备 LMS自适应算法:https://blog.youkuaiyun.com/heda3/article/details/82860463 AEC算法主要在aec_ProcessBlock函数中完成:下图是该函数流程图: 参考: https://www.docin.com/p-1404248898.html https://blog.youkuaiyun.com/ffmpeg4...

我的博客 3169

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

智能音箱语音前端AEC降回声系统调试

本文深入探讨智能音箱中AEC技术的原理、实现与优化,涵盖自适应滤波算法、双讲检测、非线性补偿及WebRTC架构解析,并结合硬件选型、参数调优和实际场景测试,提出系统级部署策略与持续演进方案。

weixin_35189483的博客 718

卡尔曼滤波

建议没有阅读前一篇文章的同学先看一下。

jackzhouyu的专栏 683

小智音箱AEC回声消除提升通话清晰度

本文深入解析小智音箱AEC回声消除技术,涵盖自适应滤波、双讲检测与非线性抑制等核心算法,并探讨其在硬件选型、实时软件架构及多模块协同中的工程实现路径,结合客观指标与主观优化构建完整性能评估体系。

weixin_42361478的博客 1213

回声消除(AEC)原理、算法及实战——完整的回声消除算法框架所涉及到的模块介绍

x(n) 通过自适应滤波器 w(n) 得到估计的回声信号,并与近端输入信号 s(n) 相减得到误差信号 e(n),即 e(n)=s(n)−conj(w(n))x(n),自适应滤波算法所估计的回声路径就越接近实际的回声路径,得到的误差就越小,回声残留就越小。为了实现更好的回声消除效果,除了自适应滤波器之外,在设计线性回声消除模块时,还需要引入双讲检测。回声路径可能是变化的,一旦出现变化,回声消除算法要能判断出来,因为自适应滤波器学习要重新开始,也就是 h(n) 需要一个新的收敛过程,以逼近新的回音路径h。

qq_42233059的博客 1万+

AEC部分核心源码

AEC部分核心源码 由于该是在别人的github里边下载到的,先把代码贴上: /* * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree

weixin_44856859的博客 1849

ESP-SR项目中AEC滤波器长度参数解析

ESP-SR项目中AEC滤波器长度参数解析 概述 在ESP-SR音频前端处理库中,afe_config_t.aec_filter_length是一个关键参数,它直接影响声学回声消除(AEC)模块的性能表现。本文将深入解析该参数的技术含义及其对系统的影响。 参数技术解析 aec_filter_length参数定义了AEC滤波器的时间长度,其单位为"feed_chunksize"的...

gitblog_07393的博客 486

回声消除(AEC)原理、算法及实战——AEC背景介绍

回声就是声音信号经过一系列反射之后,又听到了自己讲话的声音,这就是回声。一些回声是必要的,比如剧院里的音乐回声以及延迟时间较短的房间回声;而大多数回声会造成负面影响,比如在有线或者无线通信时重复听到自己讲话的声音(回想那些年我们开黑打游戏时,如果其中有个人开了外放,他的声音就会回荡来回荡去)。因此消除回声的负面影响对通信系统是十分必要的。针对回声消除(Acoustic Echo Cancellation,AEC )问题,现如今最流行的算法就是基于自适应滤波的回声消除算法。

qq_42233059的博客 1万+

Android WebRTC AEC 实战:从算法原理到回声消除优化

基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。架构理解:掌握实时语音应用的完整技术链路(ASR→LLM→TTS)技能提升:学会申请、配置与调用火山引擎AI服务定制能力:通过代码修改自定义角色性格与音色,实现“从使用到创造”从0到1构建生产级别应用,脱离Demo,点击打开。

2600_94960200的博客 461
上一篇: winxp平台的内置AEC(回声消除)和噪声抑制
下一篇: DVI,HDMI接口显示器无显示的解决
marchbirdcode
博客等级 码龄17年 11粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值