タイトルに「並んだデータ」って書いてありますが、どういうことですか?
例えば「一時間ごとの気温」のように、たくさんのデータが順番に並んだもののことだ。この「並んだデータ」を上手く扱うことで、マイクロビットに様々な機能を持たせることができるのだ。
なんだか漠然としていて、ピンとこないですね。
では、実際のプログラムで試してみよう。
並んだデータの例:音楽の演奏データ
「並んだデータ」の具体例として、音楽の演奏データを見てみよう。マイクロビットに音楽を演奏させたのは覚えているかな?
ベートーベンの「運命」を演奏させましたね!(以下をご覧ください。音楽を演奏させるためのスピーカーの接続方法も説明してあります。新しいタブで開きます。)
【マイクロビット入門】(10)マイクロビットの機能を使ってみよう。
この時は、マイクロビット用ライブラリにあらかじめ用意されたデータを使用したのだが、オリジナルの曲も演奏させることができるのだ。
そういえば、そんな話もあったような。マイクロビットのホームページに書かれているのでしたね。(以下をご覧ください。新しいタブで開きます。)
英語版:https://microbit-micropython.readthedocs.io/en/latest/
日本語版:https://microbit-micropython.readthedocs.io/ja/latest/index.html
この中から、オリジナル曲の演奏を行うためのプログラムを見てみよう。
- _1行目 import music
- _2行目 tune = [“C4:4”, “D4:4”, “E4:4”, “C4:4”, “C4:4”, “D4:4”, “E4:4”, “C4:4”, “E4:4”, “F4:4”, “G4:8”, “E4:4”, “F4:4”, “G4:8”]
- _3行目 music.play(tune)
マイクロビットにプログラムを書き込んで・・・(マイクロビットにプログラムを書き込むには、パイソンエディターを使います。詳しくは以下をご覧ください。新しいタブで開きます。)
【マイクロビット入門】(2)パイソンエディターを使ってみよう。
音楽が鳴りましたよ!「グーチョキパーで何作ろう♩」の曲ですね!
「配列」とは?
先ほどのプログラムの1行目は「import」文なので、音楽のライブラリの組み込んでいて、3行目で演奏しているのですね。2行目は見たことがないヤツですが・・・
- _1行目 import music
- _2行目 tune = [“C4:4”, “D4:4”, “E4:4”, “C4:4”, “C4:4”, “D4:4”, “E4:4”, “C4:4”, “E4:4”, “F4:4”, “G4:8”, “E4:4”, “F4:4”, “G4:8”]
- _3行目 music.play(tune)
この2行目が「並んだデータ」なのだ。”C4:4″、”D4:4”などのデータが、「,」で区切られて並んでいる、という訳なのだ。
ウーン、分かったような、分からないような・・・ところで、”C4:4″とかって、一体どういうものなのですか?
これは、曲の中の一つの音を表している。「C」が音階を表しており、最初の「4」がオクターブ、次の「4」が音を鳴らす長さを表している。音階には「C#」なども使えるのだ。
[音階][オクターブ]:[音を鳴らす長さ]
すなわち、”C4:4″は、一つの音符を表すデータなのだ。
音符のデータが並んでいる、ということですね・・・そうか、楽譜ということになりますね!
その通りだ!プログラムの2行目では、この楽譜を「tune」という変数に格納している。
- _2行目 tune = [“C4:4”, “D4:4”, “E4:4”, “C4:4”, “C4:4”, “D4:4”, “E4:4”, “C4:4”, “E4:4”, “F4:4”, “G4:8”, “E4:4”, “F4:4”, “G4:8”]
音符データの並びを「[」と「]」でくくってひとまとまりとして、「tune」という変数でひとまとめに扱えるようにしているのだ。
ということは、3行目では、「tune」という楽譜を音楽ライブラリの「music.play()」という関数に渡して、演奏してもらっている、ということになるのですか?
- _3行目 music.play(tune)
ウム、その通りだ。そして、この並んだデータを「[」と「]」でくくって作った変数には、「配列」という名前が付けられているのだ。
「配列」というのは音符のデータが集まった楽譜のような「並んだデータ」ということなのですね。
「リスト」と「タプル」
実は、パイソンの「配列」には、「リスト」と「タプル」の2種類がある。
また、ややこしい話が出てきましたね・・・
ここでは簡単に違いを説明しておこうと思う。
お手柔らかにお願いします。
「リスト」は、中のデータを後で変更することができる。一方、「タプル」は後で変更することができないのだ。
フムフム。作った後で変えられるかどうかの違いかぁ・・・。
「リスト」は「[」と「]」でデータをくくって作るが、タプルは「(」と「)」を使う。
リスト
tune = [“C4:4”, “D4:4”, “E4:4”, “C4:4”,・・・・]
タプル
tune = (“C4:4”, “D4:4”, “E4:4”, “C4:4”, ・・・・)
さっきの楽譜データは「リスト」だったのですね?
イエ~ス。ちなみに「music.play()」はタプルの楽譜データも再生できるのだ。
- _1行目 import music
- _2行目 tune = (“C4:4”, “D4:4”, “E4:4”, “C4:4”, “C4:4”, “D4:4”, “E4:4”, “C4:4”, “E4:4”, “F4:4”, “G4:8”, “E4:4”, “F4:4”, “G4:8”)
- _3行目 music.play(tune)
マイクロビットに書き込んで・・・本当だ!ちゃんと演奏されましたね!
当面は「リスト」を使ってプログラムを作成していこうと思う。
リョーカイです!
「リスト」をつなげてみよう。
「配列」には、様々な操作を行うことができる。例えば、複数の「リスト」をつなげて、新しい「リスト」を作ることができる。
そんなこともできるのですか!では、さっきの「グーチョキパー」の歌の続きも繋げられますね!
さっそくやってみよう。ちなみにオクターブと音を鳴らす長さは、省略することもできる。省略すると、ひとつ前の音と同じになるのだ。
- _1行目 import music
- _2行目 tune1 = [“C4:4”, “D”, “E”, “C”, “C”, “D”, “E”, “C”, “E”, “F”, “G:8”, “E:4”, “F”, “G:8”]
- _3行目 tune2 = [“G:2”, “A”, “G”, “F”, “E:4”, “C”]
- _4行目 tune3 = [“C:4”, “G3”, “C4:8”]
- _5行目 tune = tune1 + tune2 + tune2 + tune3 + tune3
- _6行目 music.play(tune)
ここには出てこないけど、音階を「R」とすると休符になるのだ。
5行目で「tune2」と「tune3」を二つづつ足しているのはどういうことですか?
これは、繰り返しの部分を1つだけ作っておいて、二つ足すことで繰り返しの楽譜データとしているのだョ。
マイクロビットに書き込んで・・・続きも演奏されましたね。いろいろな曲を作れそうですね!
まとめ
「配列」のまとめなのだ。
- 「配列」は並んだデータを一つの変数にまとめたもの。
- 「リスト」と「タプル」がある。「リスト」は後で変更できるが、「タプル」は出来ない。
- 「リスト」を作るときは、データを「[」と「]」でくくる。
- 「タプル」を作るときは、データを「(」と「)」でくくる。
- 複数の配列を「+」でつないで新しい配列を作ることができる。
次回もお楽しみに~
コメント