嘻嘻

如果你阅读了我的上一篇帖子,my previous thread,你应该知道,我开始这个旅途与简单的Python脚本来生成静态的声音文件。这个社区的反馈既尖厉又深刻,使我的工程从预先渲染的音轨转变为一个真实时间的程序化引擎,基于C++。

这是新JSON逻辑的简化看法:


json

{

  "name": "Act 1.1: The Awakening",

  "base\_notes": \[0, 3, 4, 0\],

  "channels": {

"piano": {

"pattern": \[\[0, 0.0\], \[4, 0.0\], {...}\],

"rhythms": \[\[16.1, 12.1, 12.1\], {...}\]

},

"brass": { ...},

"strings": { ... },

"percussion": { ... }

  },

  "events": {

"FUEL\_LOW": { "overrides": { "piano": { "vol": 0.8 }, "strings": { "speed": 0.75 } } }

  }

}

你的反馈改变了这个引擎:

调性的基础:为了解决「随机电脑声音」问题,我添加了基音(scale degrees)和模式。现在,乐器通过按位相关系来播放音符,而不是仅仅随机选择频率。

节奏的多样性:节奏现在是组合了序列的组。引擎在一个周期结束时随机选择一个,并使用小数值(如16.1)来触发这样的功能,例如踏板的延续,为声音添加更加自然的声音。

动态事件:你建议音乐应该与游戏互动,现在的事件系统允许游戏状态覆盖任何参数(音量,速度,音符)在真实时间内。

公演与进程:为了避免耳朵疲劳,我实施了公演(acts)。Act 1.1进入Act 1.2,保持相同的主题但进化了复杂度。

C++的力量:将工程转移到GDExtension允许我在无削帧的情况下运行多个调幅器和复杂的ADSR.envelope 在44100KHz。

查看进度:

🎬 C++的新演示(真实时间引擎): https://youtu.be/nb_vfBaLpIs

🎬 旧版本(Python脚本): https://youtu.be/nb_vfBaLpIs

如果你想深入学习C++的架构以及每个JSON参数,请查看我的博客:

https://bizkaidroid.itch.io/retro-burn/devlog/1511378/devlog-2-optimizing-with-c-and-melody-management-via-json

再次感谢,你们促使我去建立比“随机声音”更好的东西!