AliCloudDenoise 语音增强算法:助力实时会议系统进入超清音质时代
近些年,随着实时通信技术的发展,在线会议逐渐成为人们工作中不可或缺的重要办公工具,据不完全统计,线上会议中约有 75% 为纯语音会议,即无需开启摄像头和屏幕共享功能,此时会议中的语音质量和清晰度对线上会议的体验便至关重要。
作者|七琦
审校|泰一
前言
在现实生活中,会议所处的环境是极具多样性的,包括开阔的嘈杂环境、瞬时非平稳的键盘敲击声音等,这些对传统的基于信号处理的语音前端增强算法提出了很大的挑战。与此同时伴随着数据驱动类算法的快速发展,学界 [1] 和工业界 [2,3,4] 逐渐涌现出了深度学习类的智能语音增强算法,并取得了较好的效果,AliCloudDenoise 算法在这样的背景下应运而生,借助神经网络卓越的非线性拟合能力,与传统语音增强算法相结合,在不断的迭代优化中,针对实时会议场景下的降噪效果、性能消耗等方面进行了一系列的优化与改进,最终可以在充分保证降噪能力的同时保有极高的语音保真度,为阿里云视频云实时会议系统提供了卓越的语音会议体验。
语音增强算法的发展现状
语音增强是指干净语音在现实生活场景中受到来自各种噪声干扰时,需要通过一定的方法将噪声滤除,以提升该段语音的质量和可懂度的技术。过去的几十年间,传统单通道语音增强算法得到了快速的发展,主要分为时域方法和频域方法。其中时域方法又可以大致分为参数滤波法 [5,6] 和信号子空间法 [7],频域方法则包括谱减法、维纳滤波法和基于最小均方误差的语音幅度谱估计方法 [8,9] 等。
传统单通道语音增强方法具有计算量小,可实时在线语音增强的优点,但对非平稳突发性噪声的抑制能力较差,比如马路上突然出现的汽车鸣笛声等,同时传统算法增强后会有很多残留噪声,这些噪声会导致主观听感差,甚至影响语音信息传达的可懂度。从算法的数学理论推导角度来说,传统算法还存在解析解求解过程中假设过多的问题,这使得算法的效果存在明显上限,难以适应复杂多变的实际场景。自 2016 年起,深度学习类方法显著提升了许多监督学习任务的性能,如图像分类 [10],手写识别 [11],自动语音识别 [12],语言建模 [13] 和机器翻译 [14] 等,在语音增强任务中,也出现了很多深度学习类的方法。
图一 传统单通道语音增强系统的经典算法流程图
基于深度学习类的语音增强算法根据训练目标的不同大致可分为以下四类:
• 基于传统信号处理的混合类语音增强算法(Hybrid method)
这类算法多将传统基于信号处理的语音增强算法中的一个或多个子模块由神经网络替代,一般情况下不会改变算法的整体处理流程,典型代表如 Rnnoise[15]。
• 基于时频掩模近似的语音增强算法(Mask_based method)
这类算法通过训练神经网络来预测时频掩模,并将预测的时频掩模应用于输入噪声的频谱来重构纯净语音信号。
常用的时频掩模包括 IRM[16],PSM[17], cIRM[18] 等,训练过程中的误差函数如下式所示:
• 基于特征映射的语音增强算法(Mapping_based method)
这类算法通过训练神经网络来实现特征的直接映射,常用的特征包括幅度频谱、对数功率频谱和复数频谱等,训练过程中的误差函数如下式所示:
• 基于端到端的语音增强算法(End-to-end method)
这类算法将数据驱动的思想发挥到了极致,在数据集分布合理的前提下,抛却频域变换,直接从时域语音信号进行端到端的数值映射,是近两年广泛活跃在学术界的热门研究方向之一。
AliCloudDenoise 语音增强算法
一、算法原理
在综合考虑业务使用场景,对降噪效果、性能开销、实时性等诸多因素权衡后,AliCloudDenoise 语音增强算法采用了 Hybrid 的方法,将带噪语音中噪声能量和目标人声能量的比值作为拟合目标,进而利用传统信号处理中的增益估计器如最小均方误差短时频谱幅度 (MMSE-STSA) 估计器,求得频域上的去噪增益,最后经逆变换得到增强后的时域语音信号。在网络结构的选择上,兼顾实时性和功耗,舍弃了 RNN 类结构而选择了 TCN 网络,基本网络结构如下图所示:
二、实时会议场景下的算法优化
1、开会时旁边人多很吵怎么办?
问题背景
在实时会议场景中,有一类较为常见的背景噪声是 Babble Noise,即多个说话者的交谈声组成的背景噪声,此类噪声不仅仅是非平稳的,而且和语音增强算法的目标语音成分相似,导致在对这类噪声的抑制过程中算法处理的难度增大。以下列举了一个具体的实例:
问题分析与改进方案
经过对数十小时含有 Babble Noise 的办公室场景音频进行分析,同时结合人类的语音发声机制,发现这类噪声具有类长时平稳存在特性,众所周知,在语音增强算法中,上下文信息(contextual information)对算法效果有着非常重要的影响,所以针对 Babble Noise 这种对上下文信息更加敏感的噪声类型,AliCloudDenoise 算法通过空洞卷积(dilated convolutions)系统性地聚合模型中的关键阶段性特征,显式的增大感受野,同时额外的融合了门控机制(gating mechanisms),使得改进后的模型对 Babble Noise 的处理效果有了明显的改善。下图展示了改进前(TCN)与改进后(GaTCN)的关键模型部分的对比图。
在语音测试集上的结果表明,所提 GaTCN 模型在 IRM 目标下语音质量 PESQ[19] 较 TCN 模型提升了 9.7%,语音可懂度 STOI[20] 较 TCN 模型提升了 3.4%;在 Mapping a priori SNR[21] 目标下语音质量 PESQ 较 TCN 模型提升了 7.1%,语音可懂度 STOI 较 TCN 模型提升了 2.0%,且优于所有的 baseline 模型,指标详情见表一和表二。
表一 客观指标语音质量 PESQ 对比详情
表二 客观指标语音可懂度 STOI 对比详情
改进效果展示:
2、关键时刻怎能掉字?
问题背景
在语音增强算法中,吞字或特定字词消失如语句尾音消失的现象是影响增强后语音主观听感的一个重要因素,在实时会议场景中,因涉及到的语种多样,语者说话内容多样,这种现象更为常见,以下列举了一个具体的实例:
问题分析与改进方案
在分类构建的 1w+ 条语音测试数据集上,通过对增强后吞字、掉字现象发生的时机进行统计,并可视化其对应的频域特征,发现该现象主要发生在清音、叠音及长音等几类特定的音素或字词上;同时,在以信噪比为维度的分类统计中发现低信噪比情况下的吞字、掉字现象显著增多,据此,进行了以下三方面的改进:
• 数据层面:首先进行了训练数据集中特定音素的分布统计,在得出占比较少的结论后,针对性的丰富了训练数据集中的语音成分。
• 降噪策略层面:降低低信噪比情况,在特定情况下使用组合降噪的策略,即先进行传统降噪,再进行 AliCloudDenoise 降噪,此方法的缺点体现在以下两方面,首先组合降噪会增加算法开销,其次传统降噪不可避免的会出现频谱级音质损伤,降低整体的音质质量。此方法经实测确实会改善吞字、掉字现象,但因其缺点明显,并未在线上使用。
• 训练策略层面:在针对性的丰富了训练数据集中的语音成分后,确实会改善增强后吞字、掉字的现象,但仍存在该现象,进一步分析后,发现其频谱特征与某些噪声的频谱特征高度相似,导致网络训练局部收敛困难,基于此,AliCloudDenoise 算法采用了训练中辅助输出语音存在概率,而推演过程中不采纳的训练策略,SPP 的计算公式如下:
在语音测试集上的结果表明,所提双输出的辅助训练策略在 IRM 目标下语音质量 PESQ 较原模型提升了 3.1%,语音可懂度 STOI 较原模型提升了 1.2%;在 Mapping a priori SNR 目标下语音质量 PESQ 较原模型提升了 4.0%,语音可懂度 STOI 较原模型提升了 0.7%,且优于所有的 baseline 模型,指标详情见表三和表四。
表三 客观指标语音质量 PESQ 对比详情
表四 客观指标语音可懂度 STOI 对比详情
改进效果展示:
三、如何让算法的适用设备范围更广
对于实时会议场景来说,AliCloudDenoise 算法的运行环境一般包括 PC 端、移动端以及 IOT 设备等,尽管在不同运行环境中关于能耗的要求不同,但 CPU 占用、内存容量及带宽、电量消耗等都是我们关注的关键性能指标,为了使 AliCloudDenoise 算法能够广泛地为各个业务方提供服务,我们采用了一系列能耗优化手段,主要包括模型的结构化裁剪、资源自适应策略、权值量化与训练量化等,并通过一些辅助收敛策略在精度降低 0.1% 量级的情况下最终得到了约 500KB 的智能语音增强模型,极大地拓宽了 AliCloudDenoise 算法的应用范围。
接下来我们首先对优化过程中涉及到的模型轻量化技术做简单的回顾,然后对资源自适应策略和模型量化展开介绍,最后给出 AliCloudDenoise 算法的关键能耗指标。
1、采用的模型轻量化技术
针对深度学习模型的轻量化技术,一般指对模型的参数量及尺寸、运算量、能耗、速度等 “运行成本” 进行优化的一系列技术手段。其目的是便于模型在各类硬件设备的部署。同时,轻量化技术在计算密集型的云端服务上也有广泛的用途,可以帮助降低服务成本、提升相应速度。
轻量化技术的主要难点在于:在优化运行成本的同时,算法的效果与泛化性、稳定性不应受到明显的影响。这对于常见的 “黑箱式” 神经网络模型来说,在各方面都具有一定的难度。此外,轻量化的一部分难点也体现在优化目标的差异性上。
比如模型尺寸的降低,并不一定会使得运算量降低;模型运算量的降低,也未必能提高运行速度;运行速度的提升也不一定会降低能耗。这种差异性使得轻量化难以 “一揽子” 地解决所有性能问题,需要从多种角度、利用多种技术配合,才能达成运行成本的综合降低。
目前学术界与工业界常见的轻量化技术包括:参数 / 运算量子化、剪枝、小型模块、结构超参优化、蒸馏、低秩、共享等。其中各类技术都对应不同的目的与需求,比如参数量化可以压缩模型占用的存储空间,但运算时依然恢复成浮点数;参数 + 运算全局量子化可以同时降低参数体积,减少芯片运算量,但需要芯片有相应的运算器支持,才能发挥提速效果;知识蒸馏利用小型的学生网络,学习大型模型的高层特征,来获得性能匹配的轻量模型,但优化存在一些难度且主要适合简化表达的任务(比如分类)。
非结构化的精细剪裁可以将最多的冗余参数剔除,达成优良的精简,但需要专用硬件支持才可以减少运算量;权重共享可显著降低模型尺寸,缺点是难以加速或节能;AutoML 结构超参搜索能自动确定小型测试结果最优的模型堆叠结构,但搜索空间复杂度与迭代估计的优良度限制了其应用面。下图展示了 AliCloudDenoise 算法在能耗优化过程中主要采用的轻量化技术。
2、资源自适应策略
资源自适应策略的核心思想是模型可以在资源不充足的情况下自适应的输出满足限定条件的较低精度的结果,在资源充足时就做到最好,输出最优精度的增强结果,实现此功能最直接的想法是训练不同规模的模型存放在设备中,按需使用,但会额外增加存储成本,AliCloudDenoise 算法采用了分级训练的方案,如下图所示:
将中间层的结果也进行输出,经联合 loss 最终进行统一约束训练,但实际验证中发现存在以下两个问题:
• 比较浅层的网络抽取的特征比较基础,浅层网络的增强效果较差。
• 增加了中间层网络输出的结构后,最后一层网络的增强结果会受到影响,原因是联合训练过程中会希望浅层网络也可以输出较为不错的增强结果,破坏了原有网络结构抽取特征的分布布局。
针对以上两个问题,我们采用了多尺度 Dense 连接 + 离线超参预剪枝的优化策略,保证了模型可动态按需输出精度范围不超过 3.2% 的语音增强结果。
3、模型量化
在模型所需的内存容量及带宽的优化上,主要采用了 MNN 团队的权值量化工具 [22] 和 python 离线量化工具 [23] 实现了 FP32 与 INT8 之间的转换,方案示意图如下:
4、AliCloudDenoise 算法的关键能耗指标
如上图所示,在 Mac 平台的算法库大小上,竞品为 14MB,AliCloudDenoise 算法目前主流输出的算法库为 524KB、912KB 和 2.6MB,具有显著优势;在运行消耗上,Mac 平台的测试结果表明,竞品的 cpu 占用为 3.4%,AliCloudDenoise 算法库 524KB 的 cpu 占用为 1.1%,912KB 的 cpu 占用为 1.3%,2.6MB 的 cpu 占用为 2.7%,尤其在长时运行条件下,AliCloudDenoise 算法有明显优势。
四、算法的效果技术指标评测结果
针对 AliCloudDenoise 算法的语音增强效果的评估目前主要集中在两个场景上,通用型场景和办公室会议场景。
1、通用场景下的评测结果
通用型场景的测试集中,语音数据集由中文和英文两部分组成(共计约 5000 条),噪声数据集则包含了常见的四类典型噪声,平稳噪声(Stationary noise)、非平稳噪声(Non-stationary noise)、办公室噪声(Babble noise)和室外噪声(Outdoor noise),环境噪声强度设置在 - 5 到 15db 之间,客观指标主要通过 PESQ 语音质量与 STOI 语音可懂度来衡量,两项指标都是值越大表示增强后的语音效果越好。
如下表所示,在通用型场景的语音测试集上的评测结果表明,AliCloudDenoise 524KB 算法库较传统算法在 PESQ 上分别有 39.4%(英文语音)和 48.4%(中文语音)的提升,在 STOI 上分别有 21.4%(英文语音)和 23.1%(中文语音)的提升,同时和竞品算法基本持平。而 AliCloudDenoise 2.6MB 算法库较竞品算法在 PESQ 上分别有 9.2%(英文语音)和 3.9%(中文语音)的提升,在 STOI 上分别有 0.4%(英文语音)和 1.6%(中文语音)的提升,展现出了显著的效果优势。
2、办公室场景下的评测结果
结合实时会议的业务声学场景,我们针对办公室场景做了单独的评测,噪声为实际录制的真实办公场景下的嘈杂噪声,共构建了约 5.3h 的评测带噪语音。下图展示了 AliCloudDenoise 2.6MB 算法库和竞品 1、竞品 2、传统 1 及传统 2 ,这四种算法在 SNR、P563、PESQ 和 STOI 指标上的对比结果,可以看到 AliCloudDenoise 2.6MB 算法库具有明显优势。
未来展望
在实时通信场景下,AI + Audio Processing 还有很多待探索和落地的研究方向,通过数据驱动思想与经典信号处理算法的融合,可以给音频的前端算法(ANS、AEC、AGC)、音频的后端算法(带宽扩展、实时美声、变声、音效)、音频编解码及弱网下的音频处理算法(PLC、NetEQ)带来效果上的升级,为阿里云视频云的用户提供极致的音频体验。
参考文献
[1] Wang D L, Chen J. Supervised speech separation based on deep learning: An overview[J]. IEEE/ACM Transactions on Audio, Speech, and Language Processing, 2018, 26(10): 1702-1726.
[2] https://venturebeat.com/2020/04/09/microsoft-teams-ai-machine-learning-real-time-noise-suppression-typing/
[3] https://venturebeat.com/2020/06/08/google-meet-noise-cancellation-ai-cloud-denoiser-g-suite/
[4] https://medialab.qq.com/#/projectTea
[5] Gannot S, Burshtein D, Weinstein E. Iterative and sequential Kalman filter-based speech enhancement algorithms[J]. IEEE Transactions on speech and audio processing, 1998, 6(4): 373-385.
[6] Kim J B, Lee K Y, Lee C W. On the applications of the interacting multiple model algorithm for enhancing noisy speech[J]. IEEE transactions on speech and audio processing, 2000, 8(3): 349-352.
[7] Ephraim Y, Van Trees H L. A signal subspace approach for speech enhancement[J]. IEEE Transactions on speech and audio processing, 1995, 3(4): 251-266.
[8] Ephraim Y, Malah D. Speech enhancement using a minimum-mean square error short-time spectral amplitude estimator[J]. IEEE Transactions on acoustics, speech, and signal processing, 1984, 32(6): 1109-1121.
[9] Cohen I. Noise spectrum estimation in adverse environments: Improved minima controlled recursive averaging[J]. IEEE Transactions on speech and audio processing, 2003, 11(5): 466-475.
[10]Ciregan D, Meier U, Schmidhuber J. Multi-column deep neural networks for image classification[C]//2012 IEEE conference on computer vision and pattern recognition. IEEE, 2012: 3642-3649.
[11]Graves A, Liwicki M, Fernández S, et al. A novel connectionist system for unconstrained handwriting recognition[J]. IEEE transactions on pattern analysis and machine intelligence, 2008, 31(5): 855-868.
[12]Senior A, Vanhoucke V, Nguyen P, et al. Deep neural networks for acoustic modeling in speech recognition[J]. IEEE Signal processing magazine, 2012.
[13]Sundermeyer M, Ney H, Schlüter R. From feedforward to recurrent LSTM neural networks for language modeling[J]. IEEE/ACM Transactions on Audio, Speech, and Language Processing, 2015, 23(3): 517-529.
[14]Sutskever I, Vinyals O, Le Q V. Sequence to sequence learning with neural networks[C]//Advances in neural information processing systems. 2014: 3104-3112.
[15] Valin J M. A hybrid DSP/deep learning approach to real-time full-band speech enhancement[C]//2018 IEEE 20th international workshop on multimedia signal processing (MMSP). IEEE, 2018: 1-5.
[16] Wang Y, Narayanan A, Wang D L. On training targets for supervised speech separation[J]. IEEE/ACM transactions on audio, speech, and language processing, 2014, 22(12): 1849-1858.
[17] Erdogan H, Hershey J R, Watanabe S, et al. Phase-sensitive and recognition-boosted speech separation using deep recurrent neural networks[C]//2015 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2015: 708-712.
[18] Williamson D S, Wang Y, Wang D L. Complex ratio masking for monaural speech separation[J]. IEEE/ACM transactions on audio, speech, and language processing, 2015, 24(3): 483-492.
[19] Recommendation I T U T. Perceptual evaluation of speech quality (PESQ): An objective method for end-to-end speech quality assessment of narrow-band telephone networks and speech codecs[J]. Rec. ITU-T P. 862, 2001.
[20] Taal C H, Hendriks R C, Heusdens R, et al. A short-time objective intelligibility measure for time-frequency weighted noisy speech[C]//2010 IEEE international conference on acoustics, speech and signal processing. IEEE, 2010: 4214-4217.
[21] Nicolson A, Paliwal K K. Deep learning for minimum mean-square error approaches to speech enhancement[J]. Speech Communication, 2019, 111: 44-55.
[22] https://www.yuque.com/mnn/cn/model_convert
[23] https://github.com/alibaba/MNN/tree/master/tools/MNNPythonOfflineQuant
「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。公众号后台回复【技术】可加入阿里云视频云技术交流群,和作者一起探讨音视频技术,获取更多行业最新信息。
AliCloudDenoise 语音增强算法:助力实时会议系统进入超清音质时代的更多相关文章
- 基于Matlab的MMSE的语音增强算法的研究
本课题隶属于学校的创新性课题研究项目.2012年就已经做完了,今天一并拿来发表. 目录: --基于谱减法的语音信号增强算法..................................... ...
- EasyIPCamera实现Windows PC桌面、安卓Android桌面同屏直播,助力无纸化会议系统
最近在EasyDarwin开源群里,有不少用户私信需求,要做一种能够多端同屏的系统,细分下来有屏幕采集端和同屏端,屏幕采集端细想也就是一个低延时的流媒体音视频服务器,同屏端也就是一个低延时的播放器,负 ...
- EMD——EEMD——CEEMD语音增强算法基础
首先,HHT中用到的EMD详细介绍:https://wenku.baidu.com/view/3bba7029b4daa58da0114a9a.html 本文具体参考 https://zhuanlan ...
- 美景听听Ai语音导游,助力华为荣耀PLAY手机发布
6月6日,荣耀PLAY科技酷玩新品发布会在北京大学生体育馆如期举办,美景听听Ai语音讲解助力新EUMI系统智慧旅行成新卖点,震撼登场! 随着生活水平的不断提升,出门旅行已经成了许多亲们释放压力.调节自 ...
- 【红外DDE算法】数字细节增强算法的缘由与效果(我对FLIR文档详解)
[红外DDE算法]数字细节增强算法的缘由与效果(我对FLIR文档详解) 1. 为什么红外系统中图像大多是14bit(甚至更高)?一个红外系统的性能经常以其探测的范围来区别,以及其对最小等效温差指标.首 ...
- 项目-基于视频压缩的实时监控系统--tiny6410
项目-基于视频压缩的实时监控系统--tiny6410 @国嵌linux学习笔记. 1. 构造服务端结构体 server struct server { int epfd; //保存epoll指针 st ...
- 转: 透过CAT,来看分布式实时监控系统的设计与实现
评注: 开源的分布式监控系统 转:http://www.infoq.com/cn/articles/distributed-real-time-monitoring-and-control-syste ...
- RTC实时时间系统学习笔记(一)---------------UART串口
临近研三了,自己倾向于要找数字IC方面的工作,苦于教研室的项目一直都是调板子调板子调板子,真正用到FPGA的很少,,本着"工欲善其事必先利其器"的原则,在网上搜寻如何自学FPGA, ...
- 使用 Kafka 和 Spark Streaming 构建实时数据处理系统
使用 Kafka 和 Spark Streaming 构建实时数据处理系统 来源:https://www.ibm.com/developerworks,这篇文章转载自微信里文章,正好解决了我项目中的技 ...
随机推荐
- 异步阻塞,Manager模块,线程
一.异步阻塞 1.并没有按照执行顺序等待结果 2.而是所有的任务都在异步执行着 3.但是我要的结果又不知道谁的结果先来,谁先结束我就先取谁的结果 很明显的异步,大家都相互执行着(异步过程),谁先结束我 ...
- 有哪些适用于律师事务所的CRM系统?
中国的经济发展和政治稳定给律师行业带来了巨大的空间.而互联网的发展也让律师事务所遍地开花.如何在大大小小的律所中脱颖而出,是每个律所都迫切需要解决的问题.为了让您的律师事务所在激烈的竞争中脱颖而出,今 ...
- 关于.NET微服务最热门的问题解答
在我们最近让我们一起学习.NET的微服务专场活动中,我们收到了一些很好的问题.我们在现场已经回答很多问题,但我们想继续回答一些在会议中出现的最热门的问题.如果你错过了现场直播,不要担心,因为你可以按需 ...
- swagger上的接口写入数据库
一.依赖 virtualenv -p python3.6 xx pip install scrapy pip install pymysql 二. 1.创建项目和spider1 scrapy star ...
- Ansible_实施处理程序
一.Ansible配置处理程序 1.处理程序 1️⃣:处理程序是响应由其他任务触发的通知的任务 2️⃣:仅当任务在受管主机上更改了某些内容时,任务才通知其处理程序 3️⃣:每个处理程序具有全局唯一的名 ...
- python3 读取txt文件数据,绘制趋势图,matplotlib模块
python3 读取txt文件数据,绘制趋势图 test1.txt内容如下: 时间/min cpu使用率/% 内存使用率/% 01/12-17:06 0.01 7.61 01/12-17:07 0.0 ...
- Elasticsearch快速入门和环境搭建
内容概述 什么是Elasticsearch,为什么要使用它? 基础概念简介 节点(node) 索引(index) 类型映射(mapping) 文档(doc) 本地环境搭建,创建第一个index 常用R ...
- 在Spring Bean实例过程中,如何使用反射和递归处理的Bean属性填充?
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! <Spring 手撸专栏>目录 [x] 第 1 章:开篇介绍,我要带你撸 Spri ...
- gin框架路由拆分与注册
gin框架路由拆分与注册 本文总结了我平时在项目中积累的关于gin框架路由拆分与注册的若干方法. gin框架路由拆分与注册 基本的路由注册 下面最基础的gin路由注册方式,适用于路由条目比较少的简单项 ...
- openresty 学习笔记二:获取请求数据
openresty 学习笔记二:获取请求数据 openresty 获取POST或者GET的请求参数.这个是要用openresty 做接口必须要做的事情.这里分几种类型:GET,POST(urlenco ...