rakushoo blog

ジャズとプログラミングがやりたい人

music21を使って五線譜に表示させる

音符のパターンはプログラムで作成できるようになったけど、五線譜でないと使ってもらえないことがわかりました。 表示させる音は大体できてるからあとは見た目だけなんだけど、もうすでにそういう技術あるよね?ってことで、"python 五線譜 ライブラリ"とかで検索してみました。

qiita.com

なんかそれっぽいものが見つかったのでとりあえず使ってみることに。流行ってる言語はさすがって感じ。組み込みやってた頃とは雲泥の差。Python様様です。

(この後このライブラリに悩まされることになるけどそれはまた別の話...)

music21とは

MIT(マサチューセッツ工科大学)で開発されている音楽解析のためのPythonで動くオープンソースソフトウェアです。 MusicXMLやABC、ly言語(後述のLilypond用言語)のような記譜用のマークアップ言語で書かれたファイルを入力とし、音楽構造の抽出、変換、編集などといったことを記号操作によって行うことができます。(前述リンク記事より)

MITとか聞いただけでめちゃくちゃイケてるのでは??となりましたが、日本語の情報が少ない。

この方のブログが参考になりました。(他にはほとんど見つからず) ameblo.jp

とりあえず何か音符を出そう。。

% from music21 import *
% n=note.Note("C4", quarterLength=1)
% n.show('lily.png')

f:id:rakushoo:20200610181621p:plain

出た。

見えるものが出来ると楽しいです。

Oleoのコードからスケールを表示させてみる。

ここから3〜4週間くらいかけて、英字テキストで出力させていたものを五線譜で表示するように対応しました。

f:id:rakushoo:20200610182255p:plain

ここまででもプログラミング的には結構満足。

まだこれだけではアドリブ練習にはならないので、どんな風に表示させたら良いか、もう少し検討してみます。

自分が好きなフレーズを作成できるようにする。

前回、コードに沿ってスケールを表示させる機能まで実装しました。ここまではIonian/Dorian...などの Available Note Scale の通りで、臨時記号なしのスケールだけ。まだ練習が楽しくまではならないかな。

ライブなどでよく聞く、盛り上がったところでの"たたみかけるフレーズ"が好きなので、その表示機能を追加しようと思います。

実装方法

中でどんな実装をしているか少しだけ説明します。

C Ionian を定義する場合、 [C, D, E, F, G, A, B] といった英字のままだとプログラム上は扱いづらいので、音をC=0とした数値のリストに置き換えます。

f:id:rakushoo:20200609172027p:plain

こうしておけば、C Ionian であればこのリストのまま、F Ionianであればリスト+5を表示すれば良い、というように簡単に移調ができます。 スケールごとに、こうしたリストを持つことにしました。

f:id:rakushoo:20200609172105p:plain

そして、畳み掛けるフレーズとは何か? CDG DEA EFB FGC... と続くような、3音ずつ開始音を変えながら続けるフレーズのことです。

これもリストのインデックスを [0,1,4] のパターンで 1 ステップずつ移動させれば計算できそう。 というわけで、

f:id:rakushoo:20200609170633p:plain

お気に入りのフレーズが曲中のコードに合わせて展開できるようになりました。

ここで、友達に見てもらったところ、音名だけだと練習できないから譜面にしてほしい、との要望が。そりゃそうだ。

というわけで、次回は五線譜へ書き出す方法を検討することにします。

アドリブ練習をプログラムで楽しくできないか?

会社を退職して半年ほど経った2020年3月ごろ、何か自分のポートフォリオとなるサービスを作ろうと考えていました。

最近思うのは、考えていることを形に(アウトプット)しないと存在してないことになってしまうなあ、ということ。どんな良いアイディアでも知られていなければ価値にならない。

そして、作成の経過や、途中でぶつかった課題や解決方法などが誰かのアイディアに繋がることを期待し、ブログに書いて残していくことにしました。

(2020年6月現在までの経過を遡って記事に書いていきます。)

 

自分らしいサービスを作る

題材を決めるにあたり、自分が利用できるものでないと熱中できないので、楽器の練習に役立つツールにしようと考え始めました。

実際に練習していると何に詰まるのか?何があれば飽きずに練習が続けられるのか?をどんどんと深掘りしていきました。

 

コンピュータは、データが何であれ1対1で答えが決まっているものの計算が得意です。移調も簡単だし、パターンさえ入力すればフレーズの組み合わせも無限に作り出せます。

少し前に買って練習できていなかったこの本を元に、コードの解析、パターンからフレーズを作るツールにしようと思いました。


www.amazon.co.jp

 

この本の著者は、バークリー出身のトロンボーン奏者で、現在はインプロヴィゼイションのカリキュラム指導もしているそうです。

構成は、コード・スケール・トライアドなどの音の話が7割程度、残り3割はフレーズのリズムパターンの練習例が載っています。コード→スケールの解釈が表でまとめられているのでそのままプログラミングできそうでした。

アドリブ(Improvisation)に関する本はたくさんありますが、内容が機能的にまとまっていて良書だと思います。少し高いですがオススメです。

 

とりあえずシンプルに動くもの

ちょうどpythonの学習を始めた所だったので、言語はpythonで始めることにしました。

pythonはライブラリが豊富で情報も多いため、その後のモジュール利用やサーバーへのデプロイなどもやりやすかったのは偶然にも助かりました。 

まずは曲のコードをテキスト入力し、スケールを決定、構成音を表示させるところまで。

仕様

Input: 曲名、曲キー、コードをテキスト入力

Output: コード毎の演奏可能スケール

出力

f:id:rakushoo:20200608234720p:plain

ブログ開始のご挨拶

自己紹介

経歴

プログラミング

カウンセリング

  • 2018年にカウンセリングを受け、その後、セラピスト養成講座を1年間受講。
  • 2020年からオンラインでのコーチング業務を開始。

音楽

  • 主にサックス、フルート。
  • ジャズは大学ビッグバンドから始めた。アレンジもやる。
  • マチュアビッグバンド3団体所属
  • 2019年よりリーダーコンボ活動開始。全国ジャズフェスへの参加がメイン。

このブログの方針

自分のサービスを立ち上げるために、やってきたことを振り返ったり、誰かの役に立てばと思い、ブログを書こうと思いました。
ジャズのアドリブやアレンジを、プログラマー・カウンセラー視点で発信していきます。

主な話題

プログラミング、ジャズの話題。

カウンセリング(コーチング)の話題は下記リンクのnoteに書いています。 note.com

新しい教育のカタチ(42Tokyoの入学試験Piscineを受けて)

先月(1月)は、42Tokyo という学校の入学試験に参加していました。

そこで得た体験と、新しい教育方法に感じたことを書きたいと思います。

 

42(フォーティーツー)とは?

f:id:rakushoo:20200205154712j:plain

試験登録時の教室

 

パリの資産家が2013年に始めたITエンジニア養成機関(プログラミングスクール)です。

フランス以外にもシリコンバレーやソウルなど世界21拠点に校舎があり、2020年4月の42Tokyo開校に向けて入学試験が行われています。

この学校は、学費無料・講師不在・24時間いつでも利用可能などの特徴があり、私は運営方法を含めて新しい教育の形に興味を持ちました。

職業プログラマーからは離れた身ですが、もう一度プログラミングを楽しんでやりたいと思い、エントリーすることにしました。

 

一般的な情報については公式ページをご覧ください。

42tokyo.jp

 

4週間の入学試験

入学希望者は、Piscine(ピシン)と呼ばれる4週間にわたる試験に参加します。

学校からは施設と課題のみが提供されますが講師は不在のため、生徒は課題を解くためにインターネットなどで調べ、ピアツーピアと呼ばれる生徒同士でのレビューを経て、学んでいきます。

学習方法が独特のため、自主的に調べて学ぶことができるか、周りと協力して課題を進められるか、など、試験期間の長さは42の独自の教育システムとのマッチングを見るのには必要な期間かと感じました。

 

経歴・経験は不問とあるものの合格基準が明示されておらず、ネット上でも平均在室時間が5時間とか8時間とか言われていて試験内容が不明のまま、Piscineが始まりました。

信ぴょう性の高い情報がなかったため、私は参加して数日で「合格するにはとにかく課題を進めるしかない」と判断し、時間の限り通うようにしていました。

 

Piscineに参加して感じたメリット

f:id:rakushoo:20200205155535j:plain

教室からの眺め 

 

試験が終わった今の感想としては、やり切った達成感でいっぱいです。夢中で取り組んでいたので土日も休みなく通う続けることができました。

合否はまだ出ていませんが、わからなければ調べぬく心、生徒同士で教え合うコミュニケーション力、集中力など、得るものは大きかったと感じています。

 

以下、私がメリットと感じた項目について書きます。

 

自力でもがく環境を提供してくれる

学校は何も教えてはくれません。まずは課題の意図を理解し、それを解決する方法をネットなどで自力で調べます。どうにも進まなければ隣の人に聞きます。

生徒同士で教え合うピアツーピアのおかげで、誰に話しかけても良い雰囲気になっているのが素晴らしかったです。ちょっと行き詰まった時は近い人に話しかけて、相手が自分より進んでいたら教えてもらえたり、自分の方が進んでいたら困っている点を一緒に考えることができます。

他のスクールであれば、課題の説明が不十分なのはテキストが悪いだとか、講師も独り占めし難く、他の生徒にいきなり話しかけるのも難しい雰囲気になっているかもしれません。

そして、プログラミングでのつまずきは、世界で初めて遭遇した問題でない場合がほとんどです。周りやネット上に同じ体験をした人が必ず居るので、巻き込んで一緒にその原因を解決することで、協力者全員の知識にもなります。

わからないことを自力でもがくことで、自然と知識が定着していくように感じました。

 

たくさん失敗させてもらえる

失敗は学習における一番の教材だと思っています。

かつて私は仕事でユーザーIDを持つ変数を1byteで定義してしまい、その体験で変数のサイズについて心に深く刻むことができました。(ご迷惑をおかけしました)

職業プログラミングにおいて失敗できる状況というのは少ないと思います。市場に出た製品でのバグは金銭的な損失と関係者の負担が増えます。失敗の体験は必要なプロセスですが、意図的に失敗させるわけにはいきません。

課題の提出には緊張感が伴いました。毎度、今回は大丈夫だろうと思って提出するのですが、つまらないコミット漏れやテスト不足で何度も弾かれました。ただ、失敗を恐れて情報集めに徹するよりは、失敗してもどんどん進める方が得るものは大きいと思いました。

提出前の緊張感のおかげで、確認作業を念入りに行い、失敗しないように高い集中力が身についたと思います。

 

他人に教えることで自分の理解度に気づく

課題を取り組む中で、生徒同士のコードレビューが行われます。相手が初学者だった場合でも、理解してもらえなければ教える側が下手ということです。

自分が理解したプロセスを思い出したり、相手の方が現状でどこまで理解をしているのかを聞きながら、一緒に調べたりして納得してもらうように心がけました。

人に教えながら自分のあいまいだった知識も更新できる良い機会になりました。

 

プログラミングで挫折しやすいところを乗り越えられる

私の過去の経験では、たった一文字の間違いに気づかず、バグやコンパイルエラーの解消に丸一日以上かかることもありました。

また、開発環境やバージョン差異による問題や、実現させるライブラリを知らないという情報不足によって、時間をロスすることが多々あり、一人で悩むと挫折しやすいと感じていました。

こうしたいわゆる「ハマってしまった」時に、他の生徒に気軽に相談できたり他人に教え教わることで、別の視点を持てたり気分転換にもなるので、一度思考をリセットして問題解決までたどり着く力がついたように思います。

 

興味のあるコースを自由に選べる(入学後)

普段コーチングをやっていて他の人がどんなモチベーションを持っているか興味があり、コードレビューで出会った方々に、入学の動機やどのコースを学びたいのか聞いたりしてました。

迷わずにAIやセキュリティがやりたい!と語る人も居れば、いま学校で学んでる専攻よりももっと人に身近な技術で役に立ちたい、という想いでプログラミングを始めた人なども居ました。

また、エンジニアになりたくて就職したものの、サーバー管理のアプリの操作を覚えるだけでコーディングがさせてもらえずに辛い、というような話もありました。

社会に出ると自分が望んだ方向に成長できない場面が多いです。心から興味を持った分野が無料で自由に学べる環境は改めて素晴らしいと思いました。

 

42教育の向かう先

42では講師不在で誰も正解を知らない状況のため、自分で調べて間違えて、人に聞いて人に説明して、脳をいっぱい使ってこれらを繰り返すことで身に付けていくやり方を体験できます。

初めから正解を教え込むのではなく、自力で調べて失敗することでより記憶が定着します。これが公式HPのカリキュラム動画にもあるような「学び方の学び方」なのかと感じました。

改めて考えると、プログラミングに限らず、どんな仕事にも必要なスキルではないでしょうか。

 

情報の少ない仕組みと生徒の自立

入学試験Piscineに関する情報はネットでも少なく、どんな内容でどんなスケジュールで進むのか?すら開示されていません。

しかし、これが42の良さというか、情報が無いからこそ失敗しながら模索するのがPiscineの楽しみ方だと、試験を受けながら思うようになりました。

そして教室内の風紀(掃除、ゴミ捨て、その他環境)なども生徒の自発的な行動で賄われる部分も含め、改めて教育システムがよく出来ていると感心させられました。

 

デメリットは?

やはり試験が長期にわたること、全力のコミットが必要な点に尽きます。

私の場合はキャリアの転換期で時間が取れたため存分に参加できましたが、会社員との掛け持ちメンバーは近くのネットカフェで泊まったり、休日返上での取り組みは大変そうでした。

実際に公式HPでも他校の学生が「仕事を辞めなければならなかった」と発言しているように、フルタイムの仕事との掛け持ちは厳しいのかなという印象です。

 

しかし、以前に読んだ「LIFE SHIFT (ライフシフト)」という本では、人生100年時代になると働く期間も長くなるため、最初に就いたキャリアを一生続けるのではなく、セカンドキャリア・サードキャリアを持つのが当たり前になる、とあります。

未経験の方でも無料のオンラインスクールなどでプログラミングを実践してみてから、セカンドキャリアの第一歩としてPiscineを受けてみるのも良いかと思います。

 

 

42をご存知だった方もそうでない方にも、学びたい方全てに門戸は開かれています。

ご興味がありましたら是非次回募集時にエントリーしてみてください。