Skip to content

Instantly share code, notes, and snippets.

@aike
Created December 31, 2024 08:58
Show Gist options
  • Select an option

  • Save aike/030b02d357c27c44a38009b5a96a5e5c to your computer and use it in GitHub Desktop.

Select an option

Save aike/030b02d357c27c44a38009b5a96a5e5c to your computer and use it in GitHub Desktop.
New Year Bell written in mimium
// New Year Bell 2024.12.31 aike
include("osc.mmm")
include("env.mmm")
include("filter.mmm")
fn osc(freq) {
sinwave(freq,0.0)
}
fn filterDelay(sig, sec) {
delay(441000.0, lowpass(sig, 900.0, 0.3), sec * samplerate)
}
// Dry/Wetバランス調整がしやすい簡易ディレイ
fn echo(sig, sec) {
let delay1 = filterDelay(sig,sec) * 0.8
let delay2 = filterDelay(delay1,sec) * 0.7
sig + delay1 + delay2
}
// FM合成する高階関数
fn fm(o1, o2) {
let o1 = o1()
let o2 = o2()
|f| o1(f + o2(f))
}
// オペレーターを関数で定義
let op1 = |freq| { osc(freq * 1.0) * 1.0 }
let op2 = |freq| { osc(freq * 3.5) * 300.0 }
let op3 = |freq| { osc(0.7) * 0.3 }
// オペレーター同士をFM合成
let op4 = fm(| | op1, | | op2) // 金属音
let op5 = fm(| | op4, | | op3) // うなり
// 11秒ごとにノートオン
let bang = 0.0
let noteOff = | | { bang = 0.0 }
fn noteOn(){
bang = 1.0
noteOff@(now + 10.0 * samplerate)
noteOn@( now + 11.0 * samplerate)
}
[email protected]
fn dsp(){
let sig = op5(110.0) * adsr(0.015, 9.0, 0.0, 0.0, bang) * 0.5
let r = echo(sig, 1.5)
(r, r)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment