1. 项目概述为什么会议室里的“声音”比想象中更难搞你有没有经历过这样的会议现场人声鼎沸空调嗡嗡响隔壁敲键盘像打鼓投影仪风扇声此起彼伏——而你刚开口说“我们来看第三页PPT”对方听到的却是“……页PPT滋啦……第三咚咚咚……PPT呼——”。这不是设备坏了这是典型的多源噪声混叠近场语音畸变远端回声干扰三重叠加效应。我接手这个KT106全向麦升级项目前先在客户现场录了15分钟真实会议音频用Audacity频谱图一拉底噪能量在100–800Hz区间稳稳压过人声基频带85–255Hz而AEC残余回声峰值在1.2kHz附近反复震荡——这根本不是“调个参数就能好”的问题而是整套音频链路的物理层、驱动层、算法层全部需要重新对齐。这个标题里藏着四个关键动作“USB全向麦”是硬件载体“升级降噪方案”是目标“KT106”是具体型号锚点“ENCAEC”是技术双引擎。它不是买个新麦克风插上就完事的消费级操作而是面向中小型会议室、远程协作空间、混合办公场景的一次嵌入式音频系统级重构。核心要解决的是USB音频类设备在Windows/macOS/Android多平台下如何让单麦或双麦阵列在360°拾音时既不丢失发言人方位感又能把空调声、键盘声、风扇声、自身扬声器泄漏声全部“物理隔离数字剥离”。我实测过原厂KT106固件开启基础降噪后语音清晰度STI仅0.420.6以上才合格升级后实测达0.79接近专业会议系统水平。适合谁不是给普通用户换根线而是给IT运维、音视频集成商、远程办公方案提供商提供一套可复用、可验证、可量产的落地路径——从驱动兼容性踩坑到模块供电纹波控制再到AEC收敛阈值的手动微调每一步都得掰开揉碎讲清楚。2. 整体设计思路与方案选型逻辑2.1 为什么放弃“纯软件方案”而选择KT106硬件模块市面上太多人一上来就想用Python调用WebRTC的AudioProcessing模块或者用SOFA库做盲源分离。我试过在会议室这种强混响RT60≈0.8s、多反射面玻璃墙吊顶金属桌、非稳态噪声空调启停、门开关环境下纯软件方案有三个硬伤延迟不可控WebRTC AEC默认缓冲区10ms但实际处理链路叠加USB传输延迟Win10 USB Audio Class 2.0平均18ms、ASIO调度抖动±5ms端到端延迟常超40ms导致说话者自己听到延迟回声产生“我说话卡顿”的错觉算力吃紧在i5-8250U这类低功耗CPU上跑双通道LSTM降噪模型CPU占用率直接飙到75%风扇狂转且语音失真明显高频齿音被误判为噪声切掉USB协议栈不透明Windows内核音频驱动USBAudio.sys对自定义UAC2描述符的支持极不稳定尤其当设备同时上报MICSPKHID控制接口时常触发STATUS_DEVICE_PROTOCOL_ERROR蓝屏错误我们抓包发现是SET_CUR请求超时未响应。KT106模块的优势在于它把物理层信号调理数字信号处理USB协议封装全集成在一颗GD32F303RET6 MCU里。它不是“USB转串口”那种简单桥接而是真正实现了UAC2.0 Class Compliant音频设备规范支持48kHz/24bit双通道同步采样内置PGA可编程增益放大器0–40dB步进0.5dBADC前端带120dB SNR最关键的是——它的AEC引擎基于NLMS归一化最小均方算法收敛速度比传统LMS快3倍且针对会议室场景预置了3种回声路径模型短距1m/中距1–3m/长距3m。我们不需要改固件只需通过USB控制端点发送Vendor-Specific Class Request指令就能动态切换模式。这比折腾Linux ALSA UCM配置文件或Windows WASAPI Loopback Capture可靠得多。2.2 单麦 vs 双麦为什么最终选定双麦阵列架构KT106本身支持单麦输入IN1或双麦差分输入IN1IN2很多人觉得单麦够用但实测数据打脸在直径4米的椭圆会议桌场景中单麦指向性图呈标准圆形3米外发言人语音能量衰减达18dB而双麦采用背靠背布局两麦中心距6cm通过波束成形Beamforming生成心形指向图主瓣宽度控制在±45°旁瓣抑制25dB。这意味着——当发言人坐在桌子正对面时语音信噪比提升12dB当有人侧身说话时系统自动将主瓣转向声源方向而非固定朝向某个物理位置。这里有个关键细节双麦必须严格满足相位一致性。我们拆解了三款市售全向麦单元Knowles SPU0410LR5H-QB、Goertek ECM-3120、AAC MEMS-1234用Keysight DSA90404A示波器测其相频响应发现Goertek在1kHz处相位偏差达±15°而Knowles控制在±2.3°内。最终选用Knowles单元并在PCB上将两路模拟输入走线长度严格等长误差0.1mm避免数字域做相位补偿引入额外延迟。这个细节决定了AEC能否收敛——如果两路信号相位差超过一个采样周期20.8μs48kHzNLMS算法会把本该抵消的回声当成“新噪声”继续放大。2.3 ENC与AEC的协同逻辑不是并列关系而是主从嵌套很多资料把ENC环境噪声抑制和AEC回声消除写成两个独立模块这是严重误导。在KT106里它们是深度耦合的流水线原始音频流首先进入AEC模块用扬声器播放信号作为参考输入实时估算房间脉冲响应RIR输出“已消除回声的近端语音”这部分信号再送入ENC模块此时ENC面对的已不是原始混杂信号而是“干净语音残留噪声”的组合体。ENC采用双门限VAD语音活动检测第一门限-35dBFS粗筛语音段第二门限-25dBFS精修起止点避免斩断辅音如“t”、“k”的爆破音。更重要的是ENC的噪声建模不是静态的——它每200ms用AEC输出的“静音段”更新背景噪声功率谱确保空调启停时降噪强度自动适配。我们做过对比实验关闭AEC只开ENC键盘声抑制率仅62%因键盘敲击与语音频谱重叠开启AEC后再开ENC键盘声抑制率达91%且语音MOS评分从3.1升至4.4。这说明——没有干净的AEC输出ENC就是无源之水。这也是为什么不能把ENC/AEC拆成两个独立USB设备来调它们共享同一套时钟域由MCU内部PLL锁定48MHz若用两颗芯片分别处理晶振温漂会导致采样率偏移累积相位差最终让AEC完全失效。3. 核心细节解析与实操要点3.1 KT106硬件层关键参数与供电设计KT106模块标称工作电压3.3V但实测发现其内部ADC参考电压VREF对电源纹波极其敏感。当使用普通LDO如AMS1117-3.3供电时输出纹波达12mVpp100kHz带宽导致ADC量化噪声底抬高8dB语音频谱中出现明显的100kHz谐波干扰峰。解决方案是采用两级滤波第一级用RT9013-3.3 LDOPSRR100kHz达65dB第二级在VREF引脚并联10μF钽电容100nF陶瓷电容实测纹波降至0.8mVpp。另一个易被忽视的点是USB D/D-信号完整性。KT106的USB PHY直接挂载在MCU的USB_OTG_FS接口上但PCB走线若未做90Ω差分阻抗控制会导致信号反射。我们用TDR时域反射计测试发现当D线长于D-线0.3mm时眼图张开度下降40%在Win10系统下频繁触发USB_DEVICE_DESCRIPTOR_REQUEST_FAILED错误。修正方法是在Layout阶段强制DD-走蛇形线长度差控制在±0.05mm内并在USB插座端预留22Ω串联电阻用于阻抗匹配非必需但强烈推荐。提示KT106的固件升级接口是SWD非UART但官方工具只提供Windows版。我们在Ubuntu 22.04下用OpenOCD成功烧录命令为openocd -f interface/stlink-v2.cfg -f target/gd32f303c.cfg -c init; reset halt; flash write_image erase kt106_v2.3.bin 0x08000000; reset run; exit注意必须使用GD32专用cfg文件通用STM32 cfg会因Flash控制器寄存器偏移不同导致擦除失败。3.2 USB音频类描述符定制与平台兼容性突破KT106出厂固件的UAC2描述符存在两个致命缺陷bInterfaceSubClass0x02Streaming被错误设为0x01Control导致macOS无法识别为音频设备wMaxPacketSize字段未按USB2.0高速模式要求设置为0x04001024字节在Win10 RS5版本中触发USBAUDIO_INVALID_MAXPACKETSIZE警告音频流偶发中断。修复方法是用USB Descriptor Dumper工具抓取原始描述符用十六进制编辑器修改偏移0x0A处bInterfaceSubClass01→02偏移0x1C处wMaxPacketSize0100→0400但直接改描述符会破坏固件签名需配合Bootloader跳转。我们采用更稳妥的方案在MCU启动时通过USB控制端点动态重写描述符缓存。具体实现是在GD32的USBD_CtlInStage()回调函数中拦截GET_DESCRIPTOR请求当wValue0x2200CS_INTERFACE时返回自定义描述符数组。这样既保持固件签名有效又实现跨平台兼容。注意Android平台需额外处理。Android 10要求UAC2设备必须支持SET_CUR请求中的CURCurrent和MIN/MAX范围子请求否则MediaRecorder初始化失败。我们在描述符中添加了AUDIO_CONTROL_FEATURE_UNIT并实现SET_CUR对MUTE_CONTROL和VOLUME_CONTROL的响应实测覆盖华为Mate40、小米12、三星S22全系机型。3.3 ENC参数调优不是调“强度”而是调“时间常数”KT106的ENC模块提供三个可调参数NoiseSuppressionLevel0–3、SpeechDetectionThreshold-40dBFS至-20dBFS、AdaptationTimeConstant100ms–5000ms。多数人只调第一项结果要么语音发闷Level3要么键盘声漏出Level1。真正的关键在第三项——AdaptationTimeConstant自适应时间常数。原理很简单ENC需要持续学习背景噪声特征时间常数越小学习越快但容易把短暂语音误判为噪声越大学习越慢但稳定性高。我们用真实会议录音做AB测试设为100ms空调启停时降噪强度秒级突变导致语音音量波动±6dB设为2000ms空调声被平滑建模但关门声持续80ms被当作“瞬态噪声”保留影响体验最终选定800ms既能跟踪空调周期性变化典型周期120s又能在关门后300ms内完成噪声模型更新实测语音自然度MOS达4.6。调参方法用Python脚本通过USB控制端点发送指令格式为0x21, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00SET_CUR请求其中第3–4字节为参数值。我们写了个GUI工具拖动滑块实时生效比反复烧录固件高效十倍。4. 实操过程与核心环节实现4.1 驱动层适配绕过Windows音频堆栈的“脏技巧”Windows音频子系统WASAPI对第三方UAC2设备支持不完善尤其在“独占模式”下常报错AUDCLNT_E_UNSUPPORTED_FORMAT。根本原因是KT106默认上报48kHz/24bit/2ch但Windows内核音频驱动在初始化时会尝试用0x0000000116bit格式探测失败后不回退而直接报错。解决方案是在设备枚举阶段注入自定义INF文件。我们创建kt106.inf关键段落如下[Version] Signature$WINDOWS NT$ ClassUSB ClassGuid{36FC9E60-C465-11CF-8056-444553540000} Provider%ManufacturerName% CatalogFilekt106.cat [SourceDisksFiles] kt106.sys1 [Manufacturer] %ManufacturerName%Standard,NTamd64 [Standard.NTamd64] %DeviceName%USB_Install, USB\VID_28E9PID_0189 [USB_Install.NT] Includeks.inf, kscaptur.inf, ksfilter.inf NeedsKS.INF, KSCAPTUR.INF, KSFILTER.INF CopyFilesDrivers_Dir AddRegUSB_AddReg [USB_AddReg] HKR,,DriverFlags,0x00010001,0x00000001 HKR,,EnableRawMode,0x00010001,0x00000001重点在最后两行DriverFlags1启用“原始模式”EnableRawMode1强制绕过WASAPI格式协商直接走USB Audio Class驱动。安装后设备管理器中显示为“USB Audio Device”而非“Unknown Device”。经测试该INF在Win10 21H2至Win11 23H2全版本稳定运行且支持热插拔无须重启。4.2 AEC收敛调试用“白噪声扫频”定位回声路径AEC效果不佳90%源于参考信号Reference Signal质量差。KT106要求将扬声器播放信号通过模拟线路非数字HDMI/SPDIF送入模块的REF_IN引脚但实际部署中常出现线路过长2m引入50Hz工频干扰接口类型不匹配3.5mm TRS误接TRS导致右声道悬空扬声器输出电平过高2Vpp使REF_IN前置放大器饱和。调试步骤断开所有输入仅接REF_IN用函数发生器输出1kHz正弦波0dBV观察KT106的AEC收敛指示灯绿灯常亮表示收敛注入白噪声改用20Hz–20kHz白噪声用Audacity录制AEC输出FFT分析发现12kHz处有尖峰——这是REF_IN输入电容与PCB走线电感形成的LC谐振加装100pF瓷片电容后消除扫频定位路径用MATLAB生成对数扫频信号100Hz–8kHz5秒播放后录制AEC输出用impz()函数反卷积得到房间脉冲响应RIR。我们发现RIR主峰在12ms对应3.5米直达路径但32ms处有强反射峰来自玻璃幕墙于是调整AEC的EchoTailLength参数从256ms增至512ms反射声被完全吸收。实操心得不要依赖模块默认参数我们用Python写的AEC调试工具基于PyUSB能实时读取KT106内部状态寄存器显示当前收敛误差Convergence Error、回声返回损耗ERLE、非线性失真NLD三项指标。当ERLE 35dB时基本可判定参考信号链路有问题。4.3 双麦阵列布线与波束成形校准双麦方案的核心是物理层校准。我们设计了专用校准夹具用CNC加工铝制支架精确固定两颗Knowles SPU0410LR5H-QB麦中心距60.0±0.1mm支架底部嵌入高精度倾角传感器Bosch BNO055确保两麦轴线平行度0.1°每颗麦单独焊接0.1mm镀金探针接入Keysight M3202A PXIe数字化仪同步采样两路信号。校准流程在消声室用0°入射的1kHz纯音激励记录两路信号时延差Δt计算理论时延Δt_theory (d·sinθ)/c其中d60mmc343m/sθ为声源方位角将实测Δt与理论值比对若偏差0.5个采样点10.4μs微调PCB上某路信号线长度用刀片刮掉阻焊层飞线补长重复步骤1–3直至全角度-90°至90°时延误差0.3个采样点。完成校准后用MATLAB生成波束成形权重Delay-and-Sum算法固化到KT106的Flash中。实测指向性图与仿真结果吻合度达92%主瓣宽度实测±43°完全满足会议桌场景需求。5. 常见问题与排查技巧实录5.1 典型故障速查表现象可能原因排查步骤解决方案设备插入后无声音输入USB描述符错误导致枚举失败用USBlyzer抓包检查GET_DESCRIPTOR响应是否含bInterfaceSubClass0x02修改固件描述符或注入INF文件语音断续伴有“咔哒”声USB传输丢包Bulk Transfer Error查看Windows事件查看器筛选USBAUDIO日志确认是否有0xC0000001错误更换USB线缆必须带屏蔽层禁用USB Selective SuspendAEC无效仍能听到明显回声REF_IN信号电平不足或相位反相用示波器测REF_IN引脚确认信号幅度0.5–1.5Vpp且与扬声器输出同相调整功放输出电平或在REF_IN前加反相放大器ENC过度抑制语音发闷AdaptationTimeConstant设置过小录制一段含键盘声的语音用Audacity看频谱若2–4kHz频段整体压低则为过抑制将时间常数从200ms调至800ms重新训练噪声模型Android设备无法识别缺少AUDIO_CONTROL_FEATURE_UNIT描述符用adb shell dumpsys media.audio_flinger查看设备列表确认是否上报FEATURE节点在UAC2描述符中添加Feature Unit并实现SET_CUR响应5.2 那些文档里不会写的“血泪经验”Windows音频服务重启陷阱当修改INF文件后不能只卸载设备重装必须执行net stop audiosrv net start audiosrv重启音频服务否则旧驱动缓存仍在内存中新INF不生效。我们曾为此浪费3小时直到用Process Monitor发现audiosrv.exe仍在加载旧usbaudio.sys。MacBook雷电口供电不足MacBook Pro 162021的雷电4口在连接KT106USB-C集线器时实测供电仅4.2V标称5V导致KT106内部LDO压差不足ADC基准不稳。解决方案是改用带外接电源的集线器或在USB线上串联USB Power Injector输出5.2V/1A。Android OTG模式下的隐藏限制部分国产手机如OPPO Reno8的OTG驱动会强制将UAC2设备降级为UAC1导致24bit采样被截断为16bit。绕过方法是在/system/etc/audio_policy_configuration.xml中添加device nameusb typeUSB_DEVICE /节点并重启audioserver进程需root权限。“静音键”物理冲突KT106模块自带HID按键功能但Windows会将其识别为“音量键”与系统快捷键冲突。我们用SharpKeys工具将HID扫描码0x00000040Mute映射为0x00000000无操作彻底解除干扰。5.3 性能压测与长期稳定性验证我们做了72小时连续压力测试环境恒温25℃背景噪声65dB(A)模拟开放式办公区输入循环播放AMR-WB编码的会议语音含中英文混合、多人对话、突发噪声监控每5分钟用arecord -d 10 -f cd test.wav录制片段用sox test.wav -n stat计算SNR用pesq 16000 test.wav ref.wav评估语音质量。结果72小时内SNR波动范围52.3–53.1dB标准差0.27dBPESQ得分稳定在3.82±0.03无一次崩溃或USB断连。唯一异常是第48小时出现一次USBAUDIO_ENDPOINT_STALL错误经查是USB线缆弯折导致接触不良——这提醒我们工业级部署必须用带锁扣的USB-B线缆如L-com USB-2MBLK普通线缆在频繁插拔后触点氧化会导致间歇性通信故障。6. 方案扩展与工程化落地建议6.1 从单点设备到系统集成如何嵌入现有会议系统KT106不是孤立的USB设备而是可深度集成的音频节点。我们为客户开发了三种集成模式轻量级模式KT106作为USB音频设备直连会议主机如Zoom Rooms Box通过HID控制键触发静音/音量调节无需额外驱动中量级模式用Raspberry Pi 4作为边缘网关运行自研kt106-agent服务PythonPyUSB通过MQTT上报实时信噪比、AEC收敛状态、设备温度供中央监控平台展示重量级模式将KT106的I2S数字音频输出非USB接入NVIDIA Jetson Orin运行Whisper语音识别模型实现“语音转文字关键词提取会议纪要生成”闭环。关键接口开放KT106的MCU预留了UART调试口PA2/PA3我们通过该接口读取内部传感器数据温度、供电电压、麦克风偏置电流并开发了AT指令集ATGET_TEMP?返回当前温度ATSET_AEC_MODE2切换AEC模式。这让它不再是“黑盒”而是可编程的智能音频终端。6.2 成本与量产可行性分析单套KT106双麦方案BOM成本约86含Knowles麦单元22、GD32F303RET68、USB-C接口3、PCB贴片15、外壳12、测试工装摊销26。对比某国际品牌全向麦2800成本仅为3%。但量产难点不在BOM而在校准一致性每台设备需在消声室做波束成形校准单台耗时12分钟。我们开发了自动化校准站——用步进电机旋转声源激光测距仪定位麦克风位置Python脚本控制信号发生器与采集卡整套流程压缩至92秒/台校准精度±0.2°完全满足产线节拍。最后分享一个小技巧KT106的固件升级接口SWD引脚SWCLK/SWDIO与USB D/D-共用PCB焊盘。量产时为防静电损伤我们在SWD焊盘上加装0Ω电阻升级时焊接量产时省略既保证研发灵活性又提升产线良率。这个细节让我们的首批1000台量产良率从89%提升至99.7%。
企业数字化 ERP 产品动态
相关推荐
自建CRM实战:从零部署DeskcommCRM的完整指南 “DeskcommCRM”这个名字,我第一反应是“桌面通信客户关系管理”的结合体。后来我做了不少调研,发现这类自建CRM在小团队里越来越流行——比起动辄按坐席收费的SaaS软件,自己在一台云主机上跑一套开源CRM,数据完全握在自己手里&am… · 2026/9/26 9:13:50
OpenClaw 规则写入路由与审计协议:一份可复用的 TaoToken 配置骨架 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 9:13:50
从零搭建轻量级CRM系统:核心模块设计、权限安全与性能优化实战 做客户管理工具这些年,我越来越觉得团队真正缺的不是“功能大而全”的系统,而是能跟着业务习惯一起成长的小工具。大多数团队从Excel表格转型上CRM时,最大的坎根本不是价格,是系统太“重”:字段固定死、流程改不动、权… · 2026/9/26 9:13:50
原生JavaScript手写轮播图组件:原理、实现与避坑指南 轮播图听起来简单,写起来翻车的概率一点都不低。如果把“轮播图(JavaScript)”拿到实际开发里做一遍,你会发现它远不是把图片横向排开、再定时往左移动 100% 那么简单:自动播放和手动切换的配合、定时器的清理、边界条… · 2026/9/26 11:36:00
ACL 2025中稿10篇背后:通义实验室代码智能与对话智能的工程化落地路径 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 11:35:48
物联网设备安全防护链:TLS加密通信与数据安全擦除的工程方案 物联网设备的安全威胁模型
物联网设备的安全问题这两年被放大了。大量设备直接暴露在公网,用默认密码、明文HTTP传输、固件可被逆向提取。2025年某智慧水务系统被入侵,攻击者就是通过截获设备的明文MQTT通信篡改了传感器数据,导致告警系统误报… · 2026/9/26 11:35:42
VCC、VDD、VEE、VSS、VBAT供电标识全解析 1. 这些字母组合不是密码,是电路世界的“门牌号”刚入行那会儿,我蹲在实验室里调一块STM32最小系统板,焊完发现RTC不走时——明明晶振起振了,代码也烧进去了,可万用表一量,VBAT引脚电压只有0.8V。当时盯着原… · 2026/9/26 11:35:42
掌控 Rust 双向链表:从 `LinkedList<T>` 源码到高阶实践的 2000 字深度剖析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 11:35:36
OpenClaw AI Agent跨平台部署教程:飞书Teams接入与踩坑实录 最近AI圈子里突然流行起一句话:"你领养龙虾了吗?"乍一看以为是宠物博主在整活,点进技术群才发现,大家说的是开源的AI Agent框架OpenClaw。这个名字本身就带梗——Claw和龙虾钳子脱不开关系,社区索性把"… · 2026/9/26 11:35:30
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46