strudelで音楽を作る

strudelで音楽を作りましょう。

strudelを使って音楽をならしてみましょう

  • 以下のプログラムを右上の「Copy」をクリックしてコピーしてください。

    <!doctype html>
    <script src="https://unpkg.com/@strudel/embed@latest"></script>
    <strudel-repl>
      <!--
    	note("48 52 55 59").sound("piano")
    -->
    </strudel-repl>
    </script>
    
  • コピーしたら「テキストエディタ(またはマウスパッドなど)」を開いて、コピーしたプログラムをControl-Vではりつけます。

  • 「ファイル」→「名前を付けて保存」で、mcc1/code/htmlの下に「music.html」という名前でファイルをほぞんします。

  • ファイルマネージャーを実行し、mcc1/code/htmlにいどうして、music.htmlをクリックします。

  • ブラウザが開いて黒い画面が表示されたら、音量をてきとうな音がでるようにちょうせいした後、黒い画面の中央にある「play」をクリックして、ピアノの音がなるのをかくにんしてください。

  • かくにんしたら、右上の「☓」マークをクリックして音を止めます。

ためしてみよう

music.htmlの中のnote("48 52 55 59")という部分に書かれている数字は音階(音の高さ)を表しています。「48」は「ド」、「49」は「ド#」のように数字が1つふえるごとに半音階ずつ高くなっていきます。「48 52 55 59」は「ドミソシ」になります。

  • 数字を書きかえて、音の高さをいろいろかえてみましょう。

    • 書きかえたら、ファイルをほぞんし、ブラウザの↷をクリックして書きかえたないようをよみなおし、書きかえたないようが、表示されていることをかくにんしてから、「play」をしましょう。
  • 「55.5」のようなあたいを入れたらどんな音がするでしょうか。

数字の代わりに文字をいれてみましょう

数字の部分に、数字の代わりに音階を文字で入れることができます。使える文字はC(ド)、D(レ)、E(ミ)、F(ファ)、G(ソ)、A(ラ)、B(シ)の7種類とそれらにフラット(b)またはシャープ(#)を付けたものです。

  • note("c e g b").sound("piano")に書きかえて、同じ音がするのをかくにんしてください

  • note("db eb gb ab bb").sound("piano")に書きかえると、5つの黒鍵(こっけん)を押したときの音になります。

  • これをすべてシャープで表すとnote("c# d# f# g# a#").sound("piano")になり、同じ音がします。

オクターブ高い音や低い音を出したいときはnote("c2 e3 g4 b5").sound("piano")のように音階を示す文字の後に数字を入れます。何も入れないときは3の高さの音になります。

ためしてみよう

  • 1〜8のいろいろな数字を入れて、オクターブの音を出してみましょう。

音色を変えてみましょう

sound("piano")の「piano」の部分を変えるといろいろな楽器の音色に変わります。

ためしてみよう

以下のさまざまな楽器の音色で音を出してみましょう。

  • gm_electric_guitar_muted

    • エレキギター
  • gm_acoustic_bass

    • ウッドベース(コントラバス)
  • gm_voice_oohs

    • 人の声
  • gm_blown_bottle

    • ビンにいきをふきこむ音
  • sawtooth

    • のこぎり波形(シンセサイザー)
  • square

    • 四角波形(シンセサイザー)
  • triangle

    • 三角波形(シンセサイザー)
  • bd, sd, hh

    • ドラムの音(bd : バスドラ、sd:スネアドラム、hh:ハイハット)
  • .sound()の部分を完全にとりのぞく

    • 電子音

途中で音色を変えたり、同時にいくつもの音色を出す

  • 途中で音色を変える
note("48 67 63 [62, 58]")
.sound("piano gm_electric_guitar_muted")

最初の2音はピアノで後の2音はエレキギターで演奏されます。なお[62, 58]の部分は同じ小節で2つの音を同時にならすといういみです。

  • 同時にいくつもの音色を出す
note("48 67 63 [62, 58]")
.sound("piano, gm_electric_guitar_muted")

「piano」と「gm_electric_guitar_muted」の間に「,」を入れると、こうごにではなく2つの楽器が同時になります。

より長い音節

音節を「/」でわると、音節がゆっくりになります。

note("[36 34 41 39]/4").sound("gm_acoustic_bass")

「/4」をすることで[]の中が4小節分(8秒間)でえんそうされます。そのため、各音階は2秒ずつになります。

ためしてみよう

[]の中の音階を増やしていくと各音階がどんどんはやくなるのをかくにんしましょう。

各音階を1小節ずつにする

<>を使うと、<>内の各音階がそれぞれ1小節になります。

note("<36 34 41 39>").sound("gm_acoustic_bass")

一見先ほどの「/4」をしたときと同じようですが、<>の中の音階を増やしても、各音階のはやさは変わりません。

<>はじつは以下と同じことになります。

<a b c> = [a b c]/3
<a b c d> = [a b c d]/4

[]と<>を組み合わせてつかう

[]と<>を組み合わせてつかうことで、いろいろな音節をひょうげんすることができます。

note("<[36 48]*4 [34 46]*4 [41 53]*4 [39 51]*4>")
.sound("gm_acoustic_bass")

<>をつかうことで、中に入っている各音節が1小節ずつ(2秒間)えんそうされます。各音節の[]の中には2つずつ音階が入っていて1小節の間にそれらの2つの音階が[]*4で4回えんそうされるので、それぞれの音は1/8小節ずつえんそうされることになります。

以下のようにするとこうごにえんそうさせることもできます。

note("60 <63 62 65 63>")
.sound("gm_xylophone")

60 と <63 62 65 63>がこうごにえんそうされるので60 63 60 62 60 65 60 63のようにえんそうされることになります。

さらに以下のようにして楽器の同時えんそうと組み合わせることもできます。

sound("bd*4, [~ <sd cp>]*2, [~ hh]*4")
.bank("RolandTR909")

スケール(音階)をつかう

スケール(音階)をつかって相対で音符をつくることもできます。

n("0 2 4 <[6, 8] [7, 9]>")
.scale("C:minor").sound("piano").cpm(60)

上の例ではCメジャー(ハ短調)で「ドミソ(シとレ)(ドとミ)」をえんそうします。

ためしてみよう

上の音を下のいろんなスケールでえんそうしてみましょう。

  • C:major

    • Cメジャー(ハ長調)
  • A2:minor

    • 1オクターブ低いAマイナー(イ短調)
  • D:dorian

    • Dのドリアンスケール(レミファソラシドレ)
  • G:mixolydian

    • Gのミクソリディアンスケール(ソラシドレミファソ)
  • A2:minor:pentatonic

    • 1オクターブ低いAマイナーのペンタトニックスケール(ラドレミソラ)
  • F:majaor:pentatonic

    • Fメジャーのペンタトニックスケール(ファソラドレファ)

自動スケール

パターンによって自動的にスケールを変更させることもできます。

n("<0 -3>, 2 4 <[6, 8] [7, 9]>")
.scale("<C:major D:mixolydian>/4")
.sound("piano").cpm(60)

なお、これは単なる例にすぎないので、スケールのいみがわからなくても気にしないでください。

くりかえす、音をのばす

@をつかって音をのばします。

note("c@3 eb").sound("gm_acoustic_bass")

@を@1のように使ってはいけません。上の例ではcは3回分の長さでebは1回分の長さになります。

ためしてみよう

@の後の数字をかえて、音の長さがどうなるかためしてみましょう。

音節の中で音をのばす

n("<[4@2 4] [5@2 5] [6@2 6] [5@2 5]>*2")
.scale("<C2:mixolydian F2:mixolydian>/4")
.sound("gm_acoustic_bass").cpm(60)

このリズムを「シャッフル」とよびます。各ビートは最初の音符は次の音符より2倍長い2つの音符をもっています。これらは三連符とも呼ばれます。ブルースやジャズでよく使われます。

音をくりかえす

note("c!2 [eb, <g a bb a>]").sound("piano").cpm(60)

ためしてみよう

「!」の部分を「*」や「@」にかえてみましょう。何が違うのかな?

まとめ

今まで学んだことをまとめてみましょう。

  • おそくえんそうする

    •  /

    • 例    note("[c a f e]")

  • こうごにえんそうする

    • <>

    • 例 note("c a f <e g>")

  • 音をのばす

    • @

    • 例 note("c@3 e")

  • 音をくりかえす

    • !

    • 例 note("c!3 e")

新しいしくみ

  • 音節(note)

    • 音符を数字や文字で書く

    • 例 note("b g e c").sound("piano")

  • スケール(scale)

    • スケールの番号で書く

    • 例 n("6 4 2 0").scale("C:minor").sound("piano")

さまざまな例

  • おしゃれなベースライン

    note("<[c2 c3]*4 [bb1 bb2]*4 [f2 f3]*4 [eb2 eb3]*4>")
    .sound("gm_synth_bass_1")
    .lpf(800)
    
  • おしゃれなメロディ

    n(`<
    [~ 0] 2 [0 2] [~ 2]
    [~ 0] 1 [0 1] [~ 1]
    [~ 0] 3 [0 3] [~ 3]
    [~ 0] 2 [0 2] [~ 2]
    >*4`).scale("C4:minor")
    .sound("gm_synth_strings_1")
    
  • おしゃれなドラム

    sound("bd*4, [~ <sd cp>]*2, [~ hh]*4")
    .bank("RolandTR909")
    
  • これらのパターンをすべて同時にえんそうする。

    $: note("<[c2 c3]*4 [bb1 bb2]*4 [f2 f3]*4 [eb2 eb3]*4>")
    .sound("gm_synth_bass_1")
    .lpf(800)
    
    $: n(`<
    [~ 0] 2 [0 2] [~ 2]
    [~ 0] 1 [0 1] [~ 1]
    [~ 0] 3 [0 3] [~ 3]
    [~ 0] 2 [0 2] [~ 2]
    >*4`).scale("C4:minor")
    .sound("gm_synth_strings_1")
    
    $: sound("bd*4, [~ <sd cp>]*2, [~ hh]*4")
    .bank("RolandTR909")