Yosuke が 2022年10月14日12時50分44秒 に編集
コメント無し
本文の変更
【2022年 SPRESENSE 活用コンテスト】< エンタメ部門 >にエントリーするための作品として `誰でも弾けて、誰でも作れて、誰でもデコれるピアノ🎹`を作ってみました。 以下、作品のコンセンプトと部品表、作成方法、回路図、ソースコードです。 # コンセプト `弾き語り`をされたことがあるでしょうか。 楽器を弾きながら歌うわけですが、 楽器の演奏と歌唱というマルチタスクを 同じ力配分でこなすのは、**初心者には結構難しい**😖です。 弾き語りを始めようとするときには、ピアノでもギターでも、 まずは`コード(和音)の押さえ方の覚え`、 `コードの移行がスムーズにできるように繰り返し練習`する必要があります。 私も最初は頑張って練習していたのですが、 次第に面倒なことはすっ飛ばして、**一足飛びに気持ちよく歌えるようになりたい**と思うようになりました。 そこで、作ったのが`初心者が適当に弾いても良い感じの伴奏になる楽器`です。 # コード進行をSpresenseのメモリに保存する方法 まずは、弾きたい楽曲のコード進行を自分で覚えなくて良いように、 `計算機(今回はSpresense)に記憶`してもらいます。 例えば、ある楽曲のコード進行が 【F#m→AonE→D→Bm→DonE→E7→A→AonG#→F#m7→AonE→D→...】 と続く場合、これを計算機に取り込みたいわけですが、 **このままでは計算機が認識しにくい**ので、 計算機が扱いやすいデータに変換(エンコード)してあげる必要があります。 そこでコード進行を0,1などの数字で表せるように工夫します。
--- まず楽曲全体にユニークなコードがいくつあるかを確認し、 それぞれのコードに0から順番に番号を割り当てていきます。 先ほどのコード進行の場合、 | コード名 | コード番号 | |:---:|:---:| | F#m | 0 | | AonE | 1 | | D | 2 | | Bm | 3 | | DonE | 4 | | E7 | 5 | | A | 6 | | AonG# | 7 | | F#m7 | 8 | | 続く | 続く | となります。 このテーブルに従って、先ほどのコード進行を番号に置き換えますと、 【0→1→2→3→4→5→6→7→8→1→2→...】 となりますので、配列に入れてメモリに保存します。 --- コード進行と一緒に、上のテーブルも保存しておかないと、ただの数字の羅列になってしまいますので、テーブルも数字に置き換えます。 そのために、更にテーブルを2つ用意します。 1つ目のテーブルは、CからBまでの12音に1から12までの数字を割り振ったものをマクロで定義しておきます。 ```spresense:コード符号化の例 #define C 1 #define CS 2 #define DF 2 #define D 3 #define DS 4 #define EF 4 #define E 5 #define F 6 #define FS 7 #define GF 7 #define G 8 #define GS 9 #define AF 9 #define A 10 #define AS 11 #define BF 11 #define B 12 ``` もう一つは、メジャーやマイナーなどのコードを決定づける修飾子に任意の番号をつけたマクロです。 ```spresense:コード符号化の例 #define M(メジャー) 1 #define mi(マイナー) 2 #define SUS4(サスフォー) 3 #define DIM(ディミニッシュ) 4 #define AUG(オーギュメント) 5 #define F5(フラットファイブ) 6 ...続く ``` これらのテーブルに従って、コードネームのテーブルを数字に変換すると、 | コード名 | コード番号 | |:---:|:---:| | 7, 2, 0(F#m) | 0 | | 10, 1, 5(AonE) | 1 | | 3, 1, 0(D) | 2 | | 12, 2, 0(Bm) | 3 | | 3, 1, 5(DonE) | 4 | | 続く | 続く | となり、これを配列に格納して、メモリに保存します。 これで`コード進行を計算機に取り入れる`ことができました。 ついでに、弾き語りに便利なテーブルをもう2個追加しておきます。 1つは曲のタイトルと歌手名(グループ名)をまとめたテーブル。 もう1つは、Aメロ、Bメロ、サビのような曲の構成上の区切りのテーブルです。 サビから歌いたい時や、2番だけ歌いたい時など、 希望した位置のコードから始められるように、このテーブルを使います。
# 音階の割り当て方 次に、コード(和音)の押さえ方を覚える手間を省けるよう、 `計算機に自動で音階を鍵盤に割り当て`てもらいます。
 上の図のように鍵盤は3つのパートに分かれており、説明上分かりやすいように白⬜、黄色🟨、紫🟪で塗り分けてみました。 図の左端の2つの白鍵は**アプローチノート**を割り当て、コードを移行する際に使うとプロの演奏っぽくなれます。 図の黄色い鍵盤は**コードの構成音**が割り当てられます。 例えば、F#mの場合、ファ#、ラ、ド#が左から低い順に並びます。 図の紫の鍵盤には**テンションノート**が割り当てられます。 テンションノートは、与えられたコードを出来るだけ邪魔せず、 オシャレな和音になるように割り当てられます。 ただし、3和音のマイナーコードの場合は7thノートが割り当てられますので、F#mの場合は、ミとなります。 つまり、テンションノートの鍵盤には7th系のノートが割り当てられることがあります。 が、何の音が出ているかは考えなくても、押せばだいたいおしゃれな和音にできます。 テンションノートも左から低い順に並びます。 これで`適当に鍵盤を押しても良い感じの和音が出せる`ようになりました。
# コード進行の進ませ方 あとは、**コード進行を歌に合わせて進ませる**だけです。
進ませ方も色々試しましたが、今のところ鍵盤を上下の2段にして、 交互に行き来する方法が最善の方法だと考えています。  分かりやすいように下の鍵盤を白に、上の鍵盤を水色にしてみました。 まず曲の始めは必ず下の鍵盤から始まります。 そして次のコードに移るときには上の鍵盤を押します。 さらに次のコードに移るときは下の鍵盤に戻ります。 そして**上、また下と行ったり来たりする**とコード進行が進んでいきます。
# 説明と実演の動画 この辺りの説明を動画でまとめてみました。是非ご覧ください。 @[youtube](https://youtu.be/lcG-nxLJax0) # コントロールボタン コントロール用のボタンとして8個ボタンを用意しています。便利な機能盛りだくさん。
| ボタン名 | 機能 | |:---:|:---:| | DECREMENT_BUTTON | このボタンを押しながらほかのボタンを押すと別の機能が使えます | | CHANGE_CHORDCHANGINGMODE | コード切り換え方式の切替を行います。今回は使用しません。 | | CHANGE_INDEX | コード進行を1つ進めます。DECREMENT_BUTTONを押しながら押すと、コード進行を1つ戻します。 | | CHANGE_KEY | 曲のキーを1つ上げます。DECREMENT_BUTTONを押しながら押すと、キーを1つ下げます。 | | CHANGE_SONG_STRUCTURE_INDEX | 曲の構成番号を1つ進めます。DECREMENT_BUTTONを押しながら押すと、曲の構成番号を1つ戻します。 | | CHANGE_TRACK | 内蔵されてる曲のトラック番号を1つ進めます。DECREMENT_BUTTONを押しながら押すと、内蔵されてる曲のトラック番号を1つ戻します。 | | CHANGE_KEYLAYOUT | 鍵盤配列のモードを切替えます。今回は使用しません。 | | CHANGE_PLUS_MODE | DECREMENT_BUTTONを押しながら押すと、内蔵されてる曲のトラック番号を5つ進ませます。 |
# 作り方 コード(和音)の勉強も練習もしたくない。 そういう面倒なことは全部計算機(今回はSpresense)に任せたいという方は、 是非以下の手順を参考に作ってみてください。 # 使用したもの できるだけ**誰でも作成が可能**なように`100円均一で売られている素材、工具`を中心に制作いたしました。 | 素材名・部品名 | 個数 | |:---:|:---:| | カラーボード10mm厚(ダイソー) | 数枚 | | カラーボード5mm厚(ダイソー) | 数枚 | | はさみ | 1挺 | | カッター | 1本 | | 銅線0.28mm(ダイソー) | 数個 | | 銅線0.55mm(ダイソー) | 1個 | | 精密作業用はんだ(ダイソー) | 数本 | | はんだごて | 1本 | | 木工用ボンド(ダイソー) | 1本 | | 2リングファイルフォルダー(ダイソー) | 1冊 | | 銅箔テープ幅38mm長さ5m(Nitto) | 2個 | | 薄い紙製両面テープ(ダイソー) | 1個 | | 厚い両面テープ(ダイソー) | 1個 | | 方眼のついた工作用紙5枚入り(ダイソー) | 1つ | | のり | 任意 | | プリンター | 任意 | | SPRESENSE 本体 | 1つ | | SPRESENSE 拡張基盤 | 1つ | | 長めのブレッドボード | 2つ | | 短いブレッドボード | 1つ | | ジャンパワイヤ | 任意 | | 小信号用ダイオード 1N4148 | 128本 | | 74HC138(ロジックIC) | 1個 | | タクトスイッチ | 8個 | # 筐体のつくり方 筐体は、手に入れやすく加工のしやすさからダイソーの**カラーボード**を使用することにしました。  上のカラーボードを横に二枚並べて、土台となる横52.6cm、縦17cmに切り取ります。 以下の2枚のPDFをダウンロードして、プリントアウトします。 [自作ピアノ【据え置き】54鍵(2.2cm×10cm) 0.2cm間隔 底面 pt.1.pdf](http://keiopress.coolblog.jp/自作ピアノ【据え置き】54鍵(2.2cm×10cm) 0.2cm間隔 底面 pt.1.pdf) [自作ピアノ【据え置き】54鍵(2.2cm×10cm) 0.2cm間隔 底面 pt.2.pdf](http://keiopress.coolblog.jp/自作ピアノ【据え置き】54鍵(2.2cm×10cm) 0.2cm間隔 底面 pt.2.pdf) 先ほど切り出したカラーボードに、のりなどの接着剤を使い貼り付けます。  鍵盤と鍵盤の間の横2mm縦10cmの部分を全てカッターで切り落とします。 横10cm縦2cmをカラーボードから切り出し、写真のように土台の両サイドに接着します。 今度は5mm厚の薄いカラーボードから、中面となる横54.6cm、縦10cmを切り取ります。 以下の3枚のPDFをダウンロードして、プリントアウトします。 [自作ピアノ【据え置き】54鍵(2.2cm×10cm)0.2cm間隔 中面 pt.1.pdf](http://keiopress.coolblog.jp/自作ピアノ【据え置き】54鍵(2.2cm×10cm) 0.2cm間隔 中面 pt.1.pdf) [自作ピアノ【据え置き】54鍵(2.2cm×10cm) 0.2cm間隔 中面 pt.2.pdf](http://keiopress.coolblog.jp/自作ピアノ【据え置き】54鍵(2.2cm×10cm) 0.2cm間隔 中面 pt.2.pdf) [自作ピアノ【据え置き】54鍵(2.2cm×10cm) 0.2cm間隔 中面 pt.3.pdf](http://keiopress.coolblog.jp/自作ピアノ【据え置き】54鍵(2.2cm×10cm) 0.2cm間隔 中面 pt.3.pdf) そして先ほどの中面に貼り付けます。 鍵盤と鍵盤の間の横2mm縦3cmの部分を全て切り落とします。 両端に横3cm縦1cmのカラーボードを接着します。 すると下のような写真になります。  中面の裏に固めのものを貼っておくと良いかもしれません。  鍵盤と鍵盤の間の2種類の間仕切りを作っていきます。 1つ目は、横2cm縦2cmの工作用紙を数枚重ねてセロテープで固定したもの(26個)。  2つ目は、横3cm縦3.7cmの工作用紙を数枚重ねてセロテープで固定したもの(26個)。  この間仕切りを土台に差していきます。小さい間仕切りは手前に。  大きい間仕切りは奥に。  最後にカラーボードから、上面となる横54.6cm縦3cmを切り取ります。  これで筐体は完成です。 # 鍵盤のつくり方 鍵盤も、**手に入れやすく加工のしやすさ**から`ダイソーの2リングフォルダーファイル`を使わせていただきました。 まずは、以下のリンクからダウンロードしたPDFをプリントアウトして、 2リングフォルダーファイルに貼ります。 [自作ピアノ【据え置き】54鍵(2.0cm×10cm) 0.2cm間隔.pdf](http://keiopress.coolblog.jp/自作ピアノ【据え置き】54鍵(2.0cm×10cm) 0.2cm間隔.pdf)   そして、PDFの概形に沿って、4種類の鍵盤を切り出します。  # スイッチの作り方 次に鍵盤の下に設置するスイッチを自作していきます。 市販のキーボードは**2つのスイッチ**を各鍵盤に設置して、`どのくらいの強さで鍵盤が押されたか`をセンシングしています。 そのため、自作キーボードもそれに倣って、タクトスイッチのような押しボタンスイッチを使いたいところなのですが、キーボードを試作したところ、鍵盤を押すたびにカチッカチッと音がして演奏の邪魔になるほか、薄くもできないということが分かったので、`スイッチも自作`することにしました。 ~~スイッチまで自作する猛者は自分だけだろうと自負しております😅(笑)~~ さて、出来るだけ身近にあるもので目的に合うスイッチを作ろうと、 実験を重ねた結果、**ダイソーの工作用紙と銅線、それと銅箔テープ**の組み合わせが最適解だろうという結論に至りました。 ポイントは2つのスイッチを垂直に重ねた構造にすることで、鍵盤を押した時に、 それぞれのスイッチがONになり、その時間の差分をとって、どれだけ強く押されたかをセンシングすることです。 時間が短ければ強く押されているので、その時間に応じて大きな音量(ベロシティ)で音を出し、時間が長ければ弱く押されているので、その時間に応じて小さな音量で音を出す仕組みです。 以下、大きなスイッチと小さなスイッチの作り方です。どちらのスイッチも寸法が違うだけで基本的な作り方は一緒です。 小さなスイッチを例に説明します。 まず工作用紙から横1cm縦4cmを2つ切り出します。 一方は上用で、もう一方は下用となります。  それぞれ真ん中で折り曲げます。  上用から作っていきます。 銅箔テープから長さ3.5cm幅1mmを8本切り出します。  これを上用の工作用紙に写真のように貼っていきます。  これを全部で4本貼っていき、写真のように2本を短くします。  裏返します。  短いテープを折り曲げます。  折り曲げた先を銅線でつなぎます。はんだごての使い方に注意をしてください。  つないだはんだに更に20cmの銅線を写真のようにつなぎます。   20cmの銅線の根元に短いセロテープを貼り、半分に折り返して銅線を密封します。  短いセロテープに接続する形でセロテープを貼り、全線を保護します。  銅線の先端は6~7mm出しておきます。  余分なセロテープをカットして、細くしておきます。  先ほどハンダ付けした箇所にセロテープを貼って保護しておきます。  今度は長い方の銅箔テープを折り曲げます。  折り曲げた先に銅線をはんだでつなげます。  つなげたっ銅箔テープのどちらかに写真のようにハンダ付けして2cmほどの銅線をつなぎます。  そこにセロテープを貼り、面を保護します。  裏返します。  銅箔テープから1cm×1.9cmのテープを切り出します。  これを写真のようにスイッチに貼ります。  端から銅箔テープがはみ出ていたら綺麗にカットしておきます。  これで上用のスイッチは完成です。あとで、下用のスイッチと合体させるので、保管しておきます。 下用のスイッチを作っていきます。 こちらも上用のスイッチと同様に、銅箔テープを貼っていきます。  写真のように2本は短くします。  裏返して、短い銅箔テープを折り曲げます。  銅線でつなぎます。  銅箔テープの片方に20cmの銅線をつなぎます。  銅線の根元に短いセロテープを貼ります。  セロテープを継ぎ足す形で、前線をセロテープで密封します。先端は少し残しておきます。  余ったセロテープはカットして、細くしておきます。  上にセロテープを貼って、保護します。  長い方の銅箔テープを折り曲げます。  先端を銅線でつなぎます。  裏返します。  横1cm縦1.9cmの銅箔テープを貼ります。  裏から見ると銅箔テープがはみ出ているのが分かりますね。  綺麗にカットします。  この面に両面テープを貼ります。  上用のスイッチと合体させます。  上用のスイッチから飛び出した銅線を下用のスイッチのはんだにつなげます。  はみ出た銅線をカットしておきます。  今つないだ銅箔テープに更に20cmの銅線をつなぎます。  銅線をセロテープで保護します。  先端を少し残しておきます。  余ったセロテープをカットして、下用のスイッチにセロテープを貼って保護します。  **ようやく完成!!** 横から見た写真  斜め上から見た写真  ++正直このスイッチに一番頭を使いましたし、一番時間がかかりました。最初に色々なスイッチを自作して実験して、何十個とうまくいかないスイッチを作り、ようやくこの形でいけそうとなってから、54個のスイッチを1個1時間かかって作りました。しかし、時間と労力をかけただけあって、ただ単にノートオン、ノートオフをするだけのスイッチではなく、どのくらいの強さで押されたかをセンシングできる納得いくスイッチに仕上がりました。++ # 電子回路について 回路の方は、**SPRESENSE**を中心に、ICは**74HC138**のみを使い128個のスイッチをキーマトリクス回路で実装いたしました。 スイッチ1個につきダイオードを1本ずつ付けて、**スイッチの同時押し**を可能にしています。入力の方も74HC165などでエンコードして、ピンを節約しようかと思ったのですが、SPRESENSEは使えるI/Oピンが沢山あったため、結果的に74HC138のみとなり、つくりやすく出来たかと思います。ただ、今回、回路図のSW_0-1~SW_0-9とSW_0-64、SW_0-65は使っていませんのでご注意ください。 # 回路図    # 筐体、スイッチ、電子回路の組み上げ ピアノを仕上げていきます。 土台の上に両面テープを貼り、スイッチを設置していきます。  スイッチの上に両面テープを貼った鍵盤を乗せて、固定します。   スイッチと鍵盤を設置したら、スイッチの銅線2本を74HC138に接続します。  銅箔テープから適当な大きさのテープを7枚切り取って、それぞれに5点仮ハンダをしておきます。  右から4つずつスイッチの銅線を写真のように接続して、SPRESENSEに接続します。   全部終えると写真のようになります。  土台の上に、中面を乗せます。  同様にスイッチと鍵盤を乗せ、各スイッチの2本の銅線を74HC138に接続します。  適当な大きさの銅箔テープを7枚切り取り、仮ハンダをしておきます。   右からスイッチを4つずつ接続して、SPRESENSEにつなげます。  全て繋げたら、写真のようになります。  上面を乗せます。  **コントロールスイッチ**を作ります。 8個タクトスイッチが乗せられる大きさの基盤を用意します。 今回は白い紙を貼っておきます(任意)。   裏面にハンダ付けします。  銅線を接続します。  コントロールスイッチの上から出てる8本の線を74HC138に接続し、 左から出てる線をSPRESENSEにつなぎます。  **完成!!!** # デコ例 あとは、お好きなようにデコレーションして、愛着の深まるようなオリジナルなピアノに仕上げましょう。 今回は、**ダイソーさんの千代紙**を鍵盤部に貼って仕上げます。 下の鍵盤は3和音の時のルートノートが割り当てられる鍵盤に千代紙を貼り、 上の鍵盤は4和音以上の時のルートノートが割り当てられる鍵盤に千代紙を貼ってあります。 適当に押しても伴奏になるこのピアノですが、特定の音をピンポイントで出したい時もこのルートノートの鍵盤を目印にすれば、弾きやすくなります。 サードノートを押したい時はルートの鍵盤の右隣を、セブンスノートを出したいときはルートの鍵盤の左隣を押す、といった具合に目印に使えます。 ご参考まで。  以下にソースコード(C++)を掲載致します。 著作権への配慮のため、タイトル、歌手名、念のためコード進行などは省いております。