前橋工科大学 – 工学デザイン実習 IIIc 2025
音符と旋律、コード (和音) とスケール (旋法)


ここまでの内容は、主にドラムサウンドを用いてStrudelのプログラミングの導入を行いました。今回も引き続きStrudelによるサウンドプログラミングを学びます。前回はドラムでしたが、今回はシンセサイザーで旋律を演奏していきます。note() 関数を用いて音程を指定することで様々な方法でメロディーを生成することが可能です。実際に音を聞きながら試していきましょう。
後半は、和音 (コード) と旋法 (スケール) について解説していきます。和音とは、高さの異なる複数の音が同時に響き合うことで生まれる音の調和です。最も基本的なものは3つの音で構成される三和音で、明るい響きの長三和音(メジャーコード)や、少し影のある響きの短三和音(マイナーコード)などがあります。これらは楽曲の土台となり、曲の雰囲気や感情を豊かに表現します。一方、旋法とは、ある音階(ドレミファソラシドなど)の中で、中心となる音(主音)が決められ、その音を中心に他の音が配置された音の並び方です。代表的なものに、明るく楽しい雰囲気の長調(メジャースケール)や、哀愁を帯びた雰囲気の短調(マイナースケール)があります。旋法はメロディを作る際の基礎となり、楽曲の性格を決定づけます。和音は、この旋法を構成する音を元に作られるため、両者は密接に関係しています。
参考:
スライド資料
映像資料
レナード・バーンスタインによるレクチャー。数世紀に渡る西洋音楽の和声の発展の歴史を2分に圧縮して解説!!
映像資料その2:
(主にJ-POPの) いろいろな有名な楽曲は、実は同じコード進行から作られていた! 「カノン進行」と「王道進行」。
サンプルコード
音符と旋律
// シンプルにシンセを鳴らしてみる
$: s("supersaw*4").note(60)
// 音階で指定
$: s("supersaw*4").note("c4")
// 半音階、シャープ
$: s("supersaw*4").note("cs4")
// 半音階、フラット
$: s("supersaw*4").note("df4")
// シンセの音色の種類を変えてみる
$: s("supersaw sine square triangle").note(60)
// 音階を弾く
$: s("supersaw*4").note("c d e f")
// ランダムな音階
$: s("supersaw*4").note(irand(12).add(40))
// 短かい持続
$: s("supersaw*4")
note(irand(12).add(40)).legato(0.2)
// 短かい持続と長い持続
$: s("supersaw*4")
.note(irand(12).add(40)).legato("<0.2 1.0>*4")
// メロディーの生成
$: s("supersaw*8")
.legato("<1.2 0.5>*8")
.note("<c4 e4 f4 g4 b4>*8"
// メロディーの生成
$: s("supersaw*8")
.legato("<0.5 1.2>*8")
.note("<c4 e4 f4 g4 b4>*8"
.add("0 -12")
.add("[0, 7, 12]"))
// メロディーの生成2
$: s("supersaw*8")
.note("{40 44 45 47 49 52}%11".add("[0, <5 7>, 12], 24"))
// メロディー + フィルター + エフェクト
$: s("supersaw*8")
.note("{40 44 45 47 49 52}%11".add("[0, <5 7>, 12]"))
.lpf("<400 2000 1200 8000>*8").delay(0.75).delaytime(0.125)
// メロディー + フィルター + エフェクト その2
$: s("supersaw(11, 16)")
.note("{40 47 52}%21"
.add("[0, <5 7 -5>]")
.add("<0 12 -12 24>*4"))
.lpf(sine.segment(32).range(400, 8000)).resonance(12)
.delay(0.75).delaytime(0.125).delayfeedback(0.7)
// メロディー + フィルター + エフェクト + リズム
$: s("supersaw(5, 16, [0, 5, 12])")
.note(
"<c d e f g a>*2"
.add("[0, <12 -12>]")
.add("[0, 7, 12]")
.add("<-12 -12 -12 0>/8")
)
.legato("<0.5 1.7>*2")
.delay(0.75).delaytime(0.625).delayfeedback(0.5)
.lpf(sine.segment(32).range(100, 8000)).resonance(10)
$: s("bd(3, 8), [~ hh]*4")
.bank("RolandTR909")
.gain(1.3)
// メロディー + リズム その2
$: s("supersaw(7, 16, [0])")
.note("<c f g>*8".add("[0, 7] [0, 12]".add("<0 7 -12>*8")))
.legato("0.7 1.5")
.lpf(sine.slow(32).range(1200, 8000)).resonance(10)
.delay(0.2).delaytime((3/8))
.jux(iter(16)).gain(0.7)
$: s("supersaw(11, 16, [3])").note("<c2 f2 g2>, <c1 g1>*4".add("[0, 7, 12]"))
.legato("0.9 0.5")
.lpf(sine.slow(12).range(2000, 4000)).resonance(10)
.delay(0.7).delaytime((5/8)).delayfeedback(0.8)
.gain(1.0)
$: s("hh(9, 16, 3), cp(9, 16, 5)")
.delay(0.7).delaytime((4/8)).delayfeedback(0.8)
$: s("bd(3, 8)").gain(2.0).bank("RolandTR909")
コードとスケール
// 音を同時に鳴らす
$: s("piano*4")
.note("[c, e, g]")
// --------------------------------------------
// コード (Chord = 和音)
// コードを演奏する
$: s("piano*4")
.chord("C").voicing()
// いろいろなコードを試してみる
$: s("piano*4")
.chord("<C F G>").voicing()
// カノン
$: s("piano*4")
.n("[1, 2, 3, 4]")
.chord("<C G Am Em F C F G>").voicing()
// 王道進行
$: s("piano*2")
.n("[1, 2, 3, 4, 5]")
.chord("<FM7 G7 Em7 Am>").voicing()
// 王道進行アンサンブル
$: s("supersaw(11, 16)")
.n("[1, 2, 3, 4, 5]")
.chord("<FM7 G7 Em7 Am>").voicing()
.lpf(sine.slow(32).range(1000, 8000)).resonance(10)
.room(0.9)
$: s("supersaw(9, 16)")
.note("<F2 G2 A2 E2>".add("< -12 0 12>*4"))
.lpf(sine.slow(24).range(1000, 8000)).resonance(8)
.room(0.9).gain(1.8)
$: s("bd(3, 8), hh(4, 8, 1)").bank("RolandTR909")
.gain(1.2)
// 王道進行アンサンブル + 分数コード
$: s("supersaw(9, 16, 3)")
.n("[1, 2, 3, 4, 5]")
.chord("<FM7 G7 Em7 Am>").voicing()
.lpf(sine.slow(32).range(1000, 8000)).resonance(10)
.room(0.9)
$: s("supersaw(9, 16)")
.note("<F2 E2 D2 [C2 A1]>/2".add("< -12 0 12>*4"))
.lpf(sine.slow(24).range(1000, 4000)).resonance(10)
.gain(1.8)
$: s("bd(4, 8), hh(4, 8, 1)").bank("RolandMC303")
.delay(0.5).delaytime(3 / 8)
.gain(1.3)
// --------------------------------------------
// スケール (scale = 旋法)
// イオニアンスケール
$: s("piano*8")
.n("0 1 2 3 4 5 6 7")
.scale("C:ionian")
// スケール内の音をランダムに演奏する
$: s("piano*8")
.n(irand(12))
.scale("C:hirajoshi")
// スケールによる即興
$: s("supersaw(5, 8)")
.n(irand(19))
.scale("C1:pentatonic").jux(rev).room(0.8)
.delay(0.7).delaytime(3 / 8)
.lpf(rand.range(400, 5000)).resonance(12).legato(1.2)
$: s("supersaw*16")
.n(irand(19))
.scale("C3:pentatonic").jux(rev).room(0.8)
.lpf(rand.range(400, 4000)).resonance(8)
.delay(0.7).delaytime(5 / 8).legato(0.75)
// スケールによる即興 (スケールを変数に)
let sc = "C:iwato";
$: sound("supersaw(4, 8)")
.n(irand(19).add(-12))
.scale(sc).jux(rev).room(0.2)
.delay("0.4").delaytime(3 / 8)
.lpf(rand.range(400, 8000)).resonance(15).legato(1.2)
.gain("1.2")
$: sound("z_sawtooth(9, 16)")
.n(irand(24).add(-12))
.scale(sc).jux(rev).room(0.3)
.lpf(rand.range(400, 8000)).resonance(15)
.delay(0.4).delaytime(5 / 8).legato("1.0")
$: s("bd(3, 8), hh(5, 8, 1)").bank("tr909").gain("2.0")
// スケール名 (scale names) ※抜粋
aeolian, altered, arabian, augmented,
balinese, bebop, blues, chinese, chromatic,
diminished, dominant, dorian, egyptian,
enigmatic, flamenco, gypsy, hindu, hirajoshi,
indian, ionian, iwato, kumoijoshi,
kumoi, locrian, lydian, major, minor,
mixolydian, oriental, overtone, pelog,
pentatonic, persian, phrygian, piongio,
prometheus, ritusen, scriabin,
アンケート
