实验性 MPEG-1 Audio Layer 3 (MP3) 音频编码器,可在Web浏览器中实时运行。依据 ISO/IEC 11172-3 及其配套的参考代码“dist10”实现。仅用于个人学习研究,请勿将本编码器用于正式目的,例如存档、广播等。
Experimental MPEG-1 Audio Layer 3 (MP3) encoder. Available on web browser. Implemented according to ISO/IEC 11172-3 and its reference code "dist10" for personal research. Do NOT use this encoder for formal purposes (e.g. archiving, broadcasting, etc.).
▶ 立即体验 Online Demo | 子带滤波器组可视化 Visual Demo for Subband Filter
- 已实现:采样率32kHz/44.1kHz/48kHz,恒定码率64/128/224/320kbps。
- 待实现:第二心理声学模型。
- 不实现:混合块、尺度因子预测(即scfsi)、低采样率支持、VBR、ID3标签、回放增益、联合立体声等。
- 可视化用户界面:下载仓库,直接在浏览器中打开
index.html即可。 - 控制台命令:执行
node aqua.js,用于批量编码。待完善。 - 构建:
npx tsc
2026年8月,使用本地部署的 DeepSeek-V4-Flash-0731 + Codex,将 JS 编码器移植为 C99 CLI,并附带一个解码器,编码/解码带终端进度条。
cd aqua-c && make # gcc + libm,生成 ./aqua
./aqua encode in.wav out.mp3 128 44100 # kbps: 64/128/224/320;hz: 32000/44100/48000
./aqua decode out.mp3 out.wav
bash tools/smoke.sh # 冒烟测试(生成音调→编解码→结构校验→确定性)
python3 tools/mp3check.py out.mp3 # MP3 帧结构校验与 JS 版相比,C 版额外完成了:确定性攻击检测驱动的窗切换(长块/短块)、
若干 artifact 修复(huffman 回退写残留位、短块 SFB 布局对齐标准、解码端短块 IMDCT 累加)。
更多说明见 aqua-c/README.md。
- 2019-11-01:开始资料调研
- 2019-11-09:实现WAV解析原型
- 2019-11-14:实现简单低通滤波(支线工作)
- 2019-11-16:初步实现分析子带滤波器
- 2019-11-21:研究并尝试实现第二心理声学模型
- 2019-11-23:分析子带滤波器可视化
- 2019-11-27:开始开发MDCT和长块去混叠
- 2019-11-29:开始开发内/外层循环和哈夫曼编解码
- 2019-12-04:切换新仓库,完善版本控制
- 2019-12-24:实现比特储备机制
- 2020-01-05:实现比特流组装
- 2020-01-07:输出第一个格式正确的MP3文件
- 2020-01-15:首次成功编码若干个完整的音乐文件
- 2020-01-19:项目取名“Aquarius”并设计图标
- 2020-05-23:项目更名“Aqua”
- 2020-05-28:固化首个基线版本(V0.1)
- 2022-07-08:首次实现端到端的基于本编码器和GNURadio的无线MP3音频传输
- 待办:彻底的性能优化,使编码器实现真正的实时编码(最高优先级)
- 待办:优化
quantanf量化步长初始值设置算法 - 待办:实现第二心理声学模型和高频预加重
- 待办:完善文档和笔记;处理掉所有TODO
版权所有 © 2019~2025 BD4SUR,保留所有权利。
本系统“按原样”提供,采用MIT协议授权。本系统为作者个人以学习和自用目的所创作的作品。作者不对本系统的质量作任何承诺。作者不保证提供有关本系统的任何形式的解释、维护或支持。作者不为任何人使用此系统所造成的任何正面的或负面的后果负责。
第三方组件