您好,
作为“RetroBurn”的一个 solo 开发者,我面临一个常见的独立游戏制作人障碍:我需要一首原声专辑但是没有任何音乐背景。 我无法演奏乐器,也没有超过基础的音乐理论知识。然而,我熟悉Python。
我面临着两条路:聘请一位作曲家(哪我无法承担) 或使用AI生成器。 对于这款游戏,我决定不使用 AI,因为我想要这款游戏完全由自己构思,用逻辑和数学来生成,而不是一个“黑盒子”的提示。所以,我花时间写了一个名为“综合器”的Python工具。
算法
而不是绘制音乐符号,我写了规则。 我使用了大吕四音阶作基本组成部分 —- 因为十分難以通过数学方法来產生无法“聽得見”的音乐- —- 并且创建了一个4层混合引擎。
整个脚本都可以在单个通行的pass中完成:
-节奏低调:一个低频率的基调(55HZ)伴随着一副侧链效果来制造张力。
-吕四音阶伴奏:一层主件带,带有指数减少的信号衰减器形成一种“弹指”空气效果。
-快速旋律 : sixteen-note模式被分配到一个随机種子為紋理的基调。
-対位乐音:中音频带来充满声音空间填充的音色。
代码
这里是一个简化的例子,展示这个引擎是如何工作的。 它使用基本的振盪振子和数学信号衰减器来mix不同的层次,合成成一个单一的原始 PCM 流:
import math, struct
def get_sample(t, freq):
#纯正弦波振子带有指数下降的信号衰减器
envelope = math.exp(-6 * (t % 0.5))
return math.sin(2 * math.pi * freq * t) * envelope
#简化的混合循环
for i in range(n_samples):
t = float(i) / sample_rate
#与不同基底的数学信号结合
layer_bass = get_sample(t, 55.0) * 0.4
layer_lead = get_sample(t, current_melody_freq) * 0.2
combined = layer_bass + layer_lead
sample = int(combined * 32767)
# ...写入PCM至wave 文件
结果
我已经预先渲染了最好的主题来最终游戏中。 您可以在那里听到世界一的样本:https://youtu.be/nbvfBaLpIs?is=OKgsRla7UWgoApU6
对于您对过程音乐的看法是什么吗?是否感觉像是一首“魂灵”般的主题来您的项目?
我正在考虑开启一个开发日志,来分享更多这些解决方案。您是否认为这种“程序员优先”来游戏设计的方式,是一种有趣的话题来说?
我很想听到您的看法!
评论 (0)