当前位置: 首页 > news >正文

Bytebeat Moog City Reconstruction v3.2 (JS-big) - 技术解析与实现

1. 项目概述

Bytebeat 版 Moog City 近似重构存档(含超时静音)📌 本文为个人开发存档,记录一版基于 Bytebeat 的《Moog City》近似重建代码,使用 JavaScript 编写,可在 Bytebeat composer 中直接运行。后续有时间会继续打磨。

《Moog City》是 C418 为《Minecraft - Volume Alpha》创作的曲目,发行于 2011 年 3 月 4 日,曲长 02:40,风格为 Ambient。原曲特征为循环上行旋律 + Moog 风格合成器音色,中段加入钢琴,弦乐渐强后再收束。

Bytebeat是一种极简的生成音乐形式:用一个关于时间变量 t 的表达式直接生成波形,通常以 8000Hz 采样输出 8bit 单声道音频。Dollchan Bytebeat Composer是一个在线实时编辑播放器,支持多种模式:经典 Bytebeat(输出 0–255 整数)、Signed Bytebeat、Floatbeat(输出 -1.0 到 1.0)、以及 JS-big 模式(支持大于 1KB 的 JavaScript Bytebeat 代码)。本存档代码属于 JS-big / Floatbeat 风格,利用了 JS 的数组、浮点运算、Math.random() 等能力。

项目状态:可运行 / 开发中 (WIP),最后更新于 2026-07-22。

2. 核心架构与算法原理

2.1 时间与音高处理

  • 时间缩放t /= 6将原始时间变量放慢,形成乐曲的基础速度。
  • 音高映射:采用十二平均律 (12-TET) 公式2**(p/12)将半音序号转换为频率倍数。
  • 音高量化函数EqT = p => 32/d * round(d/32 * 2**(p/12 - 0.02))对计算出的频率进行量化对齐,确保音高稳定在网格上,同时微调 -0.02 半音以模拟模拟合成器的轻微失谐感。

2.2 波形生成与静音逻辑

  • 波形生成:使用三角波算法abs(modulation) % 4 - 2的变体(代码中体现为abs(t*M/8 % 4 - 2) - 1)生成主旋律与和声层的波形。
  • 微观休止:在 8 步序列的第 7 步(R > 6)触发静音门控 (S = R > 6),为节奏注入呼吸感。
  • 全局静音门:当样本计数t超过MAX_T = 25000000时,IS_SILENT标志置为 true,所有信号路径乘以该标志,确保输出归零。

2.3 反馈延迟线 (Echo)

项目采用反馈延迟线 (FDL) 制造回声效果:

  • 延迟缓冲区a是一个长度为n ≈ d * 9的环形数组,用于存储历史音频样本。
  • 反馈注入:每帧计算出的混合信号ev会累加到缓冲区当前位置:a[T % n] += ev
  • 衰减:缓冲区值随后除以 3 (a[T % n] /= 3),形成指数衰减的回声。
  • 混合输出:最终输出ev是原始信号与衰减后延迟信号的混合。

3. 声部与旋律结构

3.1 主旋律 (Lead)

M = EqT([5,10,12,17,20,24,27,32][c]) * (!S) * (!IS_SILENT)

主旋律音高数组M[5,10,12,17,20,24,27,32](半音偏移)。索引cint((t + random()*D) / d) % 8决定,并加入随机抖动random()*D模拟模拟振荡器的不稳定性。

3.2 和声层 (Harmony)

M2 = EqT([-7,-4,0,3,5,10,12,15][c]) * (!S) * (!IS_SILENT)

和声层音高数组M2[-7,-4,0,3,5,10,12,15],与主旋律形成和弦进行。需注意在代码中M2必须在ev计算前定义,避免 ReferenceError。

3.3 低音/噪音层 (Bass/Noise)

C = 8 * EqT([12,12,12,15,10,10,10,3,5,5,5,5,8,8,8,5,10,10,10,10,8,8,8,3,5,5,5,5,8,8,8,10][int((t + d*32 + random()*D) / d / 2) % 32]) * (!S) * (!IS_SILENT)

低音部分使用一个 32 步的复杂音序数组,步进速度是主旋律的一半 (/2),并加入固定偏移d*32。乘以系数 8 增强低频能量。

3.4 音量包络 (Volume Envelopes)

  • 主旋律音量MV = t < 54864 ? t/128E3 : .42,实现开场淡入。
  • 和声层音量MV2 = (t > 164592 && t < 219456 ? (t-164592)/128E3 : .42) * (!S) * (!IS_SILENT),在乐曲中段引入淡入。
  • 低音音量CV = (t > 274320 && !S) * .5 * (!IS_SILENT),在特定时间点切入。

4. 完整源代码

d=1714.5,D=0,T=t, MAX_T = 25000000, IS_SILENT = t > MAX_T, t?(t/=6, R=(0|t/d)%8, S=R>6, EqT=p=>32/d*round(d/32*2**(p/12-.02)), c=int((t+random()*D)/d)%8, M=EqT([5,10,12,17,20,24,27,32][c])*(!S)*(!IS_SILENT), M2=EqT([-7,-4,0,3,5,10,12,15][c])*(!S)*(!IS_SILENT), C=8*EqT([12,12,12,15,10,10,10,3,5,5,5,5,8,8,8,5,10,10,10,10,8,8,8,3,5,5,5,5,8,8,8,10][int((t+d*32+random()*D)/d/2)%32])*(!S)*(!IS_SILENT), MV=t<54864?t/128E3:.42, MV2=(t>164592&&t<219456?(t-164592)/128E3:.42)*(!S)*(!IS_SILENT), CV=(t>274320&&!S)*.5*(!IS_SILENT), ev=(abs(t*M/8%4-2)-1)*MV + (abs(t*M2/8%4-2)-1)*MV2/2 + t*C%256*CV/192 -.5 + a[T%n], a[T%n]+=ev, a[T%n]/=3, IS_SILENT ? 0 : ev/2 ):( a=Array(n=round(d*6*1.5)).fill(0) )

5. 已知问题与未来工作

5.1 已知问题

  • 宏观休止未实现:当前仅实现每周期的微观休止,缺少基于绝对时间的结构性静音(例如约 1:30 和 2:25 处的休止)。
  • 缺少钢琴音色层:原曲中的钢琴音色尚未合成。
  • 缺少弦乐渐强:原曲中的弦乐 crescendo 段落缺失。

5.2 未来工作计划

  • 实现基于绝对时间的结构性静音。
  • 添加第二遍合成通道,生成钢琴音色。
  • 重构音高数组,使其完全匹配 E 小调音阶的标准频率。
  • 优化代码结构,提高可读性与可维护性。

6. 运行与调试说明

将上述完整代码复制到 Dollchan Bytebeat Composer 的 JS-big 模式编辑器中,点击播放即可听到合成效果。注意调整浏览器音频上下文,避免自动暂停。

开发时建议:

  1. 使用console.log输出关键变量(如R,S,M)以调试时序逻辑。
  2. 逐步注释掉IS_SILENT或音量包络,单独聆听每个声部。
  3. 尝试修改d(基础速度除数)、延迟反馈系数(当前为 3)或音高数组,探索不同听感。
http://www.jsqmd.com/news/1240496/

相关文章:

  • 2026金价持续高位震荡!无锡上半年黄金回收订单暴涨47%,现在出手是时机吗? - 一日一测评
  • Spring Boot事务管理核心原理与实战避坑指南
  • 2026年湖南发电机组维修怎么选?从应急响应、维保体系和配件保障看清服务差异 - 中国品牌企业观察网
  • 强化学习 / OPD】OpenClaw-RL 源码阅读笔记 --- (7)--- Policy Serving
  • Claude Code监控代码事件的技术解析与防御
  • 多团队协作下的AI审查策略:规则继承、覆盖与冲突解决的治理模型
  • 2026杭州跨城旅游大巴包车核心需求与筛选标准 - 资讯快报
  • 2026年衡水宏锦聚乙烯闭孔泡沫板厂家挑选攻略及行业优质企业盘点 - 每天一杯纯牛奶
  • Rust实现Ping工具:模块化设计与错误处理实践
  • 百达翡丽**保养价格查询|维修地址与客服电话**信息公告(2026年7月最新) - 百达翡丽官方售后中心
  • 大模型微调评估:系统化框架与实战方案
  • 从零开始学习Hadoop大数据(一)
  • 2026深圳Herms爱马仕闲置包包高价正规回收哪家靠谱? - 生活时报
  • 2026年珠海全案整装公司盘点:本土落地能力与全周期服务才是核心壁垒 - 热点速览
  • 暑假集训__cdq分治
  • 256款创意工具如何提升团队效率与创意产出
  • WAIC 2026 双展区登场 沐曦全栈自研算力深耕千行百业
  • 株洲黄金回收去哪卖?湘奢汇(天元店)领衔5家靠谱店铺,全资质无套路,覆盖全城! - 生活测评小能手
  • Qt 一次性把多线程实现同步方式说清楚
  • 金融理财与英语学习:Meta芯片战略与非农数据解析
  • 2026年7月最新帝舵合肥巢湖万达广场维修保养服务电话 - 帝舵中国官方服务中心
  • 手机一贴近耳朵就“黑屏”?原来是?
  • 开源AI私有化部署实战:从零搭建高可用LLM推理平台的7个关键步骤(含K8s+GPU调度秘籍)
  • 苹果手机维修的“信任缺口”:2026年长沙白苹果/无法开机**售后中心深度测评 - 苹果手机电脑维修
  • 计算机毕业设计之学科竞赛管理平台
  • 2026 年 7 月宝玑中国**授权售后网点完整名录|**搬迁、新店启用统一公示公告 - 亨得利腕表服务中心
  • Unity资源热更新实战:基于YooAssets的高效策略与避坑指南
  • PHP生产环境Docker镜像优化实践
  • 【论文解读】复数CVNet:跳过 FFT,Jetson 上 2.75 ms 如何完成雷达手势识别?
  • 智赋岐黄:搭建中医全链条数字化基础设施,助推中医药现代化落地