展示HN:我认为我制作了自己的极简主义Audacity网页版本
高保真客户端音频处理引擎。HERTZ是一个基于网络的数字音频工作站(DAW)工具,旨在实现即时人声美化。它利用了Web音频API进行实时信号处理,并使用FFmpeg.wasm进行客户端编码。与依赖于服务器端处理的传统工具(Linux上的FFmpeg二进制文件)不同,HERTZ完全在用户的浏览器线程中通过WebAssembly运行。 核心架构 该应用构建在“零服务器”架构上,目标是消除由于将敏感音频数据上传到云存储而带来的延迟、带宽成本和隐私风险。 数据流 摄取:将各种输入格式(WAV、MP3、M4A、OGG)解码为原始32位浮点AudioBuffer。 处理:提供非破坏性编辑层,使用Wavesurfer.js区域,允许用户定义样本准确的起始/结束点。 数字信号处理(DSP):构建一个OfflineAudioContext以实现快于实时的渲染。将音频路由通过一个硬编码的人声链(均衡器->压缩器->限制器)。分析通过确定峰值振幅以实现准确的归一化。 编码:将处理后的缓冲区传输到ffmpeg.wasm虚拟文件系统。以192kbps VBR执行LAME MP3编码。将生成的Blob直接流式传输到用户的下载管理器。 信号链规范 HERTZ不使用通用预设。音频引擎实现了一个特定的人声链,优化了口语和播客的清晰度。 1. 高频滤波器截止:80Hz Q:1.4 目的:去除消费类麦克风中常见的次低音轰鸣声和直流偏移伪影。 2. 动态压缩器 一个硬拐点压缩器,旨在平衡人声动态范围而不引入冲击伪影。阈值:-20.0 dB 比率:3.1:1 拐点:5.0 dB 攻击时间:0.03秒(30毫秒)释放时间:0.1秒(100毫秒) 3. 归一化 压缩后的增益分级确保符合广播响度标准。目标:-3.0 dB 峰值方法:基于绝对最大振幅扫描的线性增益计算。 技术限制与浏览器安全 HERTZ依赖SharedArrayBuffer来促进FFmpeg.wasm的多线程处理。现代浏览器将此功能限制在严格的安全头后,以防止Spectre/Meltdown漏洞。要在本地或生产中运行HERTZ,主机必须提供以下头信息: Cross-Origin-Opener-Policy: same-origin Cross-Origin-Embedder-Policy: require-corp 如果缺少这些头信息,ffmpeg.wasm将无法初始化,应用程序将抛出缓冲区分配错误。随附的vite.config.ts为本地开发处理此问题。 安装与开发要求 Node.js 18.x或更高版本 NPM或Bun包管理器 具有WebAssembly支持的现代浏览器(Chrome 90+,Firefox 90+,Safari 15+) 设置 # 克隆仓库 git clone [https://github.com/askpext/hertz.git](https://github.com/askpext/hertz.git) # 进入目录 cd hertz # 安装依赖 npm install 本地运行 npm run dev 应用程序将在http://localhost:5173启动。 生产构建 npm run build 这将在/dist中生成一个静态资源包。注意,您不能简单地在本地打开index.html;它必须通过支持所需COOP/COEP头的Web服务器提供(例如Vercel,Netlify或GitHub Pages)。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡