跳到主要内容

第二部

· 阅读需 7 分钟

忙里偷闲,先把strudel相关的写了,不然我画漫画就会忘掉这个事情,其实是换个事情做休息一下,构思漫画的前期可太累了。

用strudel做第二首音乐🎶,相比第一首写得有点吵,这次像是打通任督二脉一样,感觉非常流畅,应该是熟练起来了,不过还是挺辛苦的。

为了给大脑减负,我还画了个流程图,在制作的时候能减少一些脑容量,我是在做了前三分一的流程才画的,这个概念版的模式已经变成我的日常工作流了。

(本地的话用obsdian的白板功能,我更多则是用Kinopio)

从水下第一个生命的萌芽开始​

最先的并没有什么想法,而是尝试随便用strudel做点什么loop玩一下,跟ai随便瞎聊,从聊的过程产生具体的想法,然后具体锁定成节奏、风格、配器、和弦,让ai生成基础的JavaScrip代码。

目前我用的DeepSeek会把.sound("sawtooth")里面的音色默认生成为sawtooth一个基础合成器音色,我则是把bass改为了gm_electric_bass_finger一个Strudel音色包里面比较硬的电bass音色。

改写、调试,一轮操作得出来的效果是这样的。

(导出export为.wav格式化后,bass有点小,不过还能接受。)

一直做一直改只会听觉疲劳,然后变烦。所以我就只作为一个background到此为止,保留扩展性。

现在听起来就是一个作为游戏背景的氛围音乐,醉意的庭院,酔いの庭(よいのにわ)什么的,就很咋咋呼呼。

石器时代的巨型野兽​

即兴用的笛子​

之后我进了Tenacity录制了旋律即兴,用的是10¥的PVC塑料笛子,应该也能算竖笛recorder吧。


它吹到高音E(大概是E4?)就会跑得很厉害。而且很容易漏气或者啸叫,而已有一些奇怪的不可控的微分音。


这可不是缺点哦,我觉得是一种很有特点的残破音色。

正式进入Tenacity录制即兴​

其实就是正常操作,把background放进去,想象成伴奏乐团,然后上面solo呼吸、配合,边吹边想边吹,自然就流露出来了。

录完后有点干,我就再进了Reaper加一点混响。 (加了一点增益、压缩、混响,三件套)

音频在之后完成版里面。

人类第一次直立行走​

既然都做了一大堆东西了,那干脆做成EP规格,画一个封面图。
于是我参考John Coltrane在1965年发布的自由爵士专辑《A Love Supreme》封面,致敬了一版。
(参考的封面图)

(用Krita绘制一张封面)

完成版​

最后得到就是这样一个封面图+音乐的完整Ep。


《Just-love》 © 2026 顾游Gizeku,采用 CC BY-NC-SA 4.0 许可协议。

后续工作​

用ffmpeg把图片和音频合成mp4视频,之后发布b站就行了,这么多灵活的版本多平台发布想怎么发都行。

这样就算是跑完一套完整的制作流程,虽然截止现在发布两天只有45的播放量,不过作为一个纯音乐/精神爵士Spiritual Jazz风格,有人听就不错啦😊。

当然,喜欢的话可以在b站用yt-dlp下载。记得给我结账就行,可以先欠着,等我做完十首单曲做出专辑再来支持就行💿。

对了,如果你们看了整个流程有什么启发,或者喜欢我的音乐,请一定要发邮件到gizeku@outlook.com来鼓励我,我会更有动力的,也欢迎来分享交流你是怎么创作的,写成blog让我看那就更好了。


额外的代码部分​

我把用到代码和指令放这里了,大家需要的话拿去玩吧,随便改。

用到的ffmpeg合成指令​

ffmpeg -loop 1 -i 你的图片.png -你的音频.wav -c:v libx264 -tune stillimage -c:a aac -b:a 192k -pix_fmt yuv420p -shortest output.mp4

Just-love的背景音乐代码,扔进Strudel就能播了。​

// LOADING// 电爵士 / 碎拍 / Chill
// 在 Strudel REPL 中运行

setcpm(85/4)

// ---------- 鼓组(带混响)----------
let drums = s("bd ~ ~ [~ bd] sd ~ [~ bd] ~")
.bank("RolandTR808")
.room(0.25)
.roomsize(0.4)

// 碎拍军鼓,不规则交错
let breakbeat = s("~ ~ sd ~ ~ sd ~ ~ sd ~ ~ sd sd ~ ~ ~")
.bank("RolandTR808")
.room(0.2)

// ---------- 电 Bass(Slap 感)----------
let bassLine = note("d2 ~ d3 ~ f2 a2 ~ c3")
.sound("gm_electric_bass_finger") //电bass
.lpf(600)
.gain(sine.slow(2).range(2, 5))
.attack(0.005).decay(0.08).sustain(0.2).release(0.12)
.distort(0.3)
.sometimes(x => x.note("d2 ~ d3 f2 ~ a2 c3 ~ b2")) // 偶尔切到 Dorian 特征音 b2,同时打乱切分位置
.sometimes(x => x.note("d2 d3 ~ f2 ~ a2 ~ c3")) // 偶尔重复根音,制造 funk 的八度击弦感
.sometimes(x => x.note("d2 ~ f2 ~ a2 ~ [c3|b2] ~")) // 偶尔拉宽线条,留更多空白,让律动呼吸


// ---------- Roland 电钢琴(一点点混响)----------
let epianoChords = note("[d3,f3,a3,c4,e4] [g3,b3,d4,f4,a4]")
.sound("sawtooth") //这里用了原本的合成器,不改成电钢琴也行,需要可以替换。
.lpf(1800)
.attack(0.01).decay(0.4).sustain(0.6).release(0.8)
.gain("[0.6|0.7|0.8|0.75|0.7|0.6|0.75|0.6|0.7|0.8] [0.4|0.5|0.7|0.6|0.75|0.6|0.7|0.8]") //有变化不会那么无聊,太抢注意力可以选择注释掉。
//.swing(4, 0.1) ///加上太懒了,可选
.nudge(0.2) ///←追加这个前后随机,拖或者抢一点
.room(0.15)
.roomsize(0.3)

// ---------- 电小号(近似)----------
let motifA = note("f4 ~ a4 ~ g4 ~ ~ ~")
.sound("sawtooth") // 用锯齿波模拟铜管质感
.bpf(1200) // 带通滤波,收窄频率,靠近小号音色
.attack(0.03).decay(0.2).sustain(0.7).release(0.3) // 包络:慢起音+短衰减+长延续+短释放
.gain(sine.slow(2).range(0.05, 2)) // 音量自动起伏,每 2 个循环一次,若隐若现
.room(0.2) // 混响湿度 0.2
.roomsize(sine.slow(4).range(0.15, 0.6)) // 混响空间动态变化,每 4 个循环一次,0.15~0.6
.sometimes(x => x.note("[e4|f4|fs4] ~ a4 ~ [g4|ab4] ~ ~ ~"))
// 约一半的循环里,随机替换第 1 拍和第 5 拍:
// 第 1 拍在 E4 / F4 / F#4 中随机选一个
// 第 5 拍在 G4 / Ab4 中随机选一个
// 打破原旋律的呆板感,制造意外和变化

let motifB = note("c5 ~ bb4 a4 g4 ~ f4 ~")
.sound("sawtooth")
.bpf(1400)
.attack(0.03).decay(0.2).sustain(0.7).release(0.3)
.gain(sine.slow(2).range(0.05, 1.5))
.room(0.2)
.roomsize(0.35)

// C 句:只在特定小节替换切入
let motifC = note("d5 ~ c5 bb4 ~ a4 ~ g4")
.sound("sawtooth")
.bpf(1600)
.attack(0.03).decay(0.2).sustain(0.7).release(0.3)
.gain(sine.slow(2).range(0.05, 1.5))
.room(0.2)
.roomsize(0.35)

// 原来那句,保留不动
let trumpetMelody = seq(motifA, motifA, motifB).slow(2)

// C 句独立成线,每 8 个循环替换切入一次
let cLine = seq(motifC).slow(2)

// 用 mask 控制谁在什么时候出声
let trumpetFinal = stack(
trumpetMelody.mask("<1 1 1 1 1 0>"),
cLine.mask("<0 0 1 1 0 1 1>")
)

// ---------- 演奏 ----------
stack(
drums,
breakbeat,
bassLine,
epianoChords,
trumpetFinal
).slow(1)