【SPRESENSE】で作る痛くないギター。簡単に弾ける!!
1. 背景
昨今は、おうち時間の増加に伴って趣味として楽器を始めるという方も多くなっているそうです。一方で、楽器を始めるという事はなかなか勇気がいる事ではないでしょうか。例えばギターを始めようとしたときも、色々な心配がでてくるものです。「どんなギターが良いの?」「指は痛くないの?」「弦はどうやって張り替えるの?」「どうやって曲を覚えるの?」などなどが考えられます。そこで、「そんな方には、まずはこちら!」と言えるような、簡単に弾けるギターを作りたくなったので、ソニーのSPRESENSE(IoT用ボードコンピュータ)を使って「痛くないギター」を作りました!
本活動は下記の2名で実施しました。
・mash3-gt https://elchika.com/user/mash3-gt/?page=0
・HasegawaRyo https://elchika.com/user/HasegawaRyo/?page=0
2. 用意したもの
名称 | 概要 |
---|---|
SPRESENSE メインボード | Arduino 互換 ボードコンピュータ。 |
SPRESENSE 拡張ボード | microSDスロットやヘッドフォンジャック等様々な インターフェースが使えるようになるもの。 |
Mic&LCD KIT for SPRESENSE | Mic端子やLCDを追加できるキット。今回はLCDは使用せず、Mic基板と付属Micのみを使用。 |
ThinPot | 位置センサ。押した位置によって抵抗が変化する部品。今回はギターのフレット部分に使用。参考URL:https://www.digikey.jp/ja/product-highlight/s/spectra-symbol/thinpot-potentiometers |
輪ゴム | 100円ショップの輪ゴム。弦の代わりに使用。 |
Adventurer 3 Lite | FLASHFORGE製の3Dプリンタ。樹脂筐体の印刷に使用。 |
3d printer PLA filament | FLASHFORGE製の直径1.75mmポリ乳酸フィラメント。樹脂筐体の材料。 |
スピーカー | イヤホン/Bluetoothスピーカー/ギターアンプ等、3.5mmオーディオジャックの入力ができるものであれば何でもOK。 |
その他 | 抵抗/LED/ビニール線/ユニバーサル基板/ビス類 |
3. 仕組み
大まかな処理の流れは以下の通りです。
1.弦を模した輪ゴムが弾かれたかどうかをマイクで検出します。
2.輪ゴムが弾かれると左手で今どこの音程を左手で押さえているかをThinPot(位置センサ)で検出します。
3.今の音程に対応する音源データを呼び出します。音源データはmicroSDに保存してあります。
4.呼び出された音源データを発音します。
5.左手で次に押さえるべき場所をLEDがお知らせしてくれます。
このギターは、下記の不安を解消してくれます。
「指は痛くないの?」…痛くありません。フレットの代わりにThinPotというタッチセンサ的なもので左手で押さえている位置(音程)を検出します。
「弦はどうやって張り替えるの?」…複雑な弦の交換作業は不要です。輪ゴムを張り替えればOKです。
「どうやって曲を覚えるの?」…曲は覚えなくても大丈夫です。LEDが次に押さえる場所を教えてくれます。
回路構成は下図の通りです。
※はMic&LCD KIT for SPRESENSEの付属物です。
4. 工作
筐体の形状やSPRESENSEをはじめ各種構成部品の配置はCADで検討を行いました。
3Dプリンタは横幅×奥行に関して、約130×130mmが印刷の上限サイズであったため、部品を分割して印刷しました。
このような筐体部品を印刷しました。これらを、ビス等で組み立てて回路等も組付けていきます。
5. プログラム
今回のギターのプログラムはソニーの「Sound Signal Processing Library for Spresense」(Spresenseで簡単に楽器を開発するためのライブラリ)を活用しました。
プログラムの動作にはライブラリのチュートリアルに記載の初期設定をする必要があります。
痛くないギターのプログラム
/*
* SPDX-License-Identifier: (Apache-2.0 OR LGPL-2.1-or-later)
*
* Copyright 2022 Sony Semiconductor Solutions Corporation
*/
#ifndef ARDUINO_ARCH_SPRESENSE
#error "Board selection is wrong!!"
#endif
#ifdef SUBCORE
#error "Core selection is wrong!!"
#endif
#include <MemoryUtil.h>
#include <OctaveShift.h>
#include <SFZSink.h>
#include <YuruhornSrc.h>
#include <YuruInstrumentConsole.h>
SFZSink sink("yuruhorn.sfz");
OctaveShift filter(sink);
YuruhornSrc inst(filter);
YuruInstrumentConsole console(inst);
//LED制御用
int LED_PIN = 13; // 13ピンをLEDに割り当て
int val;
int valold;
int melody[]={0,1,2,0,1,2,4,2,1,0,1,2,1};//曲の点灯順(スイッチのたびに次へ移動する。「童謡チューリップ」)
int melodySize=sizeof(melody)/sizeof(int);
int now=0;//初期位置
void setup() {
//LEDのセットアップ
pinMode(LED_PIN, OUTPUT); // LEDに繋いだピンを出力に設定
for (int i=0;i<8;i++){
digitalWrite(i,0);//LEDのデフォルトをOFFにする
}
// init built-in I/O
Serial.begin(115200);
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
// initialize memory pools and message libs
initMemoryPools();
createStaticPools(MEM_LAYOUT_RECORDINGPLAYER);
// setup instrument
console.begin();
if (!inst.begin()) {
Serial.println("ERROR: init error.");
while (true) {
delay(1000);
}
}
Serial.println("Ready to play ItakunaiGuitar");
inst.setActiveThres(1);
}
int volume;
int data;
int pot;
int potScaled;
int dblnote;
uint8_t nownote = 1;
float ratio = 0.6;
void loop() {
pot = analogRead(0);
potScaled = pot/ratio - 150;
dblnote = ((-0.00004 * potScaled * potScaled ) + (0.07309 * potScaled) + 45.53852);//ThinPotセンサの読み値をNoteNo.に変換する関数
nownote = dblnote;
Serial.println(potScaled);
inst.update();
inst.setParam(inst.PARAMID_KEEP_FRAMES,20);
inst.setPlayingNote(nownote);
console.poll();
volume = inst.getParam(inst.PARAMID_VOLUME_METER);//Micで取得したボリュームを取得
//LED制御用
valold=val;//一つ前の状態として保存
if(volume>500){
val=1;//ボリュームが500より大きいと、弾かれたと判断する
}else{
val=0;
}
//現在のLEDを光らせ, 1つ前のLEDを消す
digitalWrite(melody[now], 1);
digitalWrite(melody[(now-1+melodySize)%melodySize],0);
//スイッチONを検出したら、melodyを一つ進める
if(val-valold>0){
now++;//次のLEDに進む
//Serial.println(melodySize);
now = now%melodySize;//終了したら最初に戻る
}
}
6. デモ動画
7. 工夫点
・丸い筐体にすることで親しみやすいデザインとしました。
・弦を弾くことをInputにすることにこだわり、少しでも生楽器の演奏感が得られる楽器としました。
・CADの段階から可能な限り小型化するよう構造を検討し、演奏の手軽さを重視しました。
8. 今後の予定
今後は下記の課題を解決できないかを検討していきたいと考えています。
課題
- 弦を弾いてから発音まで、遅延がある点。
- 弦が1本であり、和音での演奏ができない点。
- 音の強弱が一定である点。
- スライド奏法/ビブラートなど各種ギターのテクニックが反映できない点。
9. おわりに
今回のギターは簡易的な仕組みであり、何点かの課題を残しながらの作製となりましたが、それでも楽器の楽しさやギターのワクワク感は感じられるものとなりました。ここから、さらに弾きやすさや楽器としての奥深さを追求すれば、これまでにない楽器の面白さや楽しみ方を発見できるのではないかと考えており、色々なアイデアを試していきたいと思っています。
-
HasegawaRyo
さんが
2022/09/26
に
編集
をしました。
(メッセージ: 初版)
-
HasegawaRyo
さんが
2022/09/26
に
編集
をしました。
ログインしてコメントを投稿する