2023年2月26日日曜日

JamToastでSDカードにプログラムを保存してIchigoJam Rに移せるかやってみる

再びIchigoJamの話題です。IchigoJamでプログラムしたものは、SAVE0〜3で4つまで保存することができます。呼び出すときは、LOAD0〜3で呼び出すことができます。最近メインで使っているのは、IchigoJam S(圧電スピーカー付)ですが、PS/2キーボードしか使えずUSB接続のキーボード類が使えません。そこで、IchigoJam R(USBキーボード対応)を使ってUSB接続のキーボードがどのくらい使えるものか検証してみようと考えました。その過程で、IchigoJam Sで作って本体に保存したキーボードで音を鳴らすプログラムをSDカードに保存して、IchigoJam Rに持ち込むことができないかやってみることにしたのです。(苦労して作ったプログラムなので、Macにも保存しておきたかったということもあります)

IchigoJamのSとRの違いですが、簡単に言うとCPUとしているICチップの違いです。SがLPC1114FDH28を搭載している(以前のUやTもLPC1114ベース)ARM Cortex-M0+/M0のマイコンを使ったボードなのに対して、RはGD32VF103CBT6を搭載しているRISC-Vのマイコンを使ったボードだということです。これによって、RではUSB接続のキーボードが使える(全てではないようですが)というメリットがあります。
(「イチゴジャムレシビ」の「IchigoJam の種類」を参考にしました)

早速Sの方にJamToastを載せてSDカード(今回は16MBのものを使用)を挿して起動しました。このIchigoJamのは、キーボードで音を鳴らすプログラムが入っています。これを「LOAD0」で呼び出して、「SAVE100」で保存します。しかし、「File error」と表示されて保存することができません。256MBのものや2GBのものでも試してみましたがみんな同じ状態。別の軽い簡単なプログラムを作ってやってみても、SDカードのフォーマットからやり直してみても、SDカードの中に予め「IJ100.BAS」という空のファイルを保存しておいても結果は同じでした。原因はよくわかりませんが、MMCカードではなくSDカードを使っているからなのか、相性問題が発生しているのか、そもそも何かの故障があるのか…。JamToastとSDカードの組み合わせでファームウェアのアップデートができているので、故障や相性問題ではないのかもしれませんが、わからないことに変わりがありません。
(『なんとかする予定「JamToast 特設ページ」』を参考にしました)

この方法がうまく行かないとなると、「IchigoJamで作ったプログラムをパソコンに保存する方法」のようにUSBシリアル変換モジュールを使ってMacにIchigoJamのプログラムを読み込むという方法が考えられます。こちらの方法も、簡単なわけではないので時間を作ってトライしてみたいと思います。

〈参考〉

2023年2月13日月曜日

Scratchでプログラムして4 keyミニキーボードで楽器風に演奏してみる

以前の続きです。4 keyミニキーボードを管楽器のピストン風にして、これを使って楽器を演奏しているような雰囲気にしたいということです。前回までにミニキーボードの改造が終了しているので、今回はScratchのプログラミングをやっていきます。
(久しぶりにScratchで音楽系のプログラミングをしてみましたが、ちょっとしょぼくなっている気が…)

メインのプログラムは以下のとおりです。
https://scratch.mit.edu/projects/799298176/
雰囲気を出すために、トランペットのスプライトを使い、スクラッチキャットが演奏している風にしてみました。(笑)

「吹く」という動作は、「スペースキーを押す」ことで代用しました。本当は、ブレスコントローラーがあればよいのですが、手頃な値段のものがないため代替の方法にしたという訳です。電気的に使いやすい方法を考えると、コンデンサマイクやファンを使う方法が考えられると思います。
(本当は、PicoBoardLEGO WeDo 1.0(解説)が使えたら良いのですが、現行のScratch 3.0では両方とも使えません)

コンデンサマイクを使う方法は、PC用のマイクを接続して息を吹きかけるだけでもできるかもしれません。マイクは複数台在庫があるので、練習用のプラスチックマウスピース(YAMAHATMPTR」など)と組み合わせて、何か作れないかなと妄想しています。Scratchでは、マイクからの「音量」をセンシングすれば何らかの数値が出てきそうです。

ファンを使う方法は、micro:bitMakey Makeyとの組み合わせでできるのではないかと思います。本来は、ファンに電気を流してファンを回す使い方が一般的ですが、逆にそのファンを吹いて回して何らかの電気を得ることができないかということです。この電気をセンシングしてScratchへの入力として使えたら、「吹く」という動作を電気信号に変換することができるように思います。できるだけ小さなファンを用意して、息を吹きかけて回して出てきた電気をmicro:bitやMakey MakeyにつないでScratchに入力すれば良いのではないかと思います。

次の懸案事項は、音程の変え方です。管楽器は「吹く」だけでなく、吹き方で音を高くしたり低くしたりする楽器です。これをどのように再現するかということが課題となります。やはりしばらくは試行錯誤が続きそうです。

2023年2月6日月曜日

4 keyミニキーボードを使って楽器のインターフェイス(ガジェット)を作ってみた

このところ、IchigoJamを使って電子楽器を作る実験をしてきました。マイコンボードを使って簡易な電子楽器を作ろうと考えると、Arduinoとかmicro:bitあたりを使うのが定番な感じがしますが、本体でプログラムができるところがIchigoJamの強みではないかと思っています。しかも、PS/2キーボードがメイン(IchigoJam RはUSBキーボード対応)とは言え、市販のキーボードを直接つないで使えるという魅力もあります。(その意味では、Raspberry piScratchの組み合わせも良いと思います)

そんな中、電子楽器づくりに使えるガジェットはないかと思って探していたところ、Amazonで4 keyしかないミニキーボード(SIKAI CASEの製品らしい)を見つけて衝動買してしまいました。かなり昔、ArduinoやPicoBoardにつないで電子楽器のインターフェイスとして使うものを電子工作していたのですが、作ったあとから本職が忙しくなりすぎてしまって(言い訳)長いこと放置していました。(そろそろこっちも何かやってみたい)

早速、購入した4 keyのミニキーボードをMacにつないで動作確認してみました。まず、4つのどのキーを押しても「c」が打ち込まれるようになっていて、デフォルトではどうにも使いにくいことがわかりました。キーの割当を変更したいのですが、このミニキーボードの設定をするためのソフト(MINI KeyBoard.exe)がWindowsにしか対応しておらず、自室にWindowsで動いているPCがないので設定ができません。このところWineの需要もなかったため、自宅のPC環境を再構築してからWineも使っていませんでした。そこで、不本意ながら別のWindows機を使わせてもらって、4つのキーをそれぞれ「1」「2」「4」「8」に設定しました。(この後、時間を見つけてWineHQの設定をしましたが、MINI KeyBoard.exeの起動には成功したものの、ミニキーボード自体との接続がうまくいきませんでした)

次に、この4 keyミニキーボードはホットスワップ対応なので、キースイッチ(Cherry MXの互換品)を元々ついていた赤軸(OUTEMU)から自宅に在庫していた黒軸(AJAZZ)に変更しました。この黒軸キースイッチは、だいぶ昔にHARD OFFでジャンク品として売られていた不動箇所があるキーボードから救出したもので、キーボードの筐体から取り外して別の自作キーボードに使おうと思って在庫していたものでした。赤軸と同じリニアタイプですが、少し反発力が強く楽器としての演奏感を出せたら良いと思って交換することにしました。実際は、少しは重くなったものの大きくは変わらないので変える程のことではなかったかもしれません。

ここまできたら、キーキャップを交換して楽器っぽくしてみようと考えて、タイプライター風のキーキャップにシルバーのスプレーでペイントを施して、管楽器のピストン風にしてみました。出来上がりは以下のとおりです。

これを使って楽器のように演奏できたらと妄想しています。IchigoJamだとUSBキーボードに対応したIchigoJam Rを使うか、Raspberry PiとScratchの組み合わせでやるか思案中です。「吹く(音を出す)」という動きをどうするか、持ち歩いて演奏できるようにするにはどうするか、まだまだ解決しなければならないことがあります。

2023年1月22日日曜日

IchigoJamを楽器として使う実験〜SX-150 mark IIのOscillatorにする

以前のリベンジです。今回は、SX-150 mark IIをメインに使っていきます。以前は、PAM8403というD級アンプICを載せたモジュールを使ってケーブルを自作して、IchigoJamSX-150や同mark IIにつないでみましたが、ハウリングのような音が出てしまったり、音が安定しなかったりで実験に失敗してしまいました。その原因を、PAM8403モジュールからの出力が大きすぎるのではないかと考え、出力の小さい簡易な増幅回路(1石トランジスタ増幅回路)のモジュールを自作するか、抵抗を加えて出力を落とすかというようなことを考えていました。

そう思いながらAmazonでちょっと探してみると、ボリューム(可変抵抗)付きのPAM8403モジュール(GF1002)を見つけました。これを使ってしまえば良いかもしれないと早速購入して、ケーブルをはんだ付けしてIchigoJamからの電気信号をSX-150 mark IIにつなぐものを作ってみました。

入力側をIchigoJamの「SOUND」と「GND」につないで、出力側をSX-150 mark IIの「LINE IN」に接続してみました。すると、今回は音が出るようになりました。(できるだけ安定した電源を確保するために、IchigoJamの「VCC」と「GND」からPAM8403モジュールの電源を取りました)

この状態でSX-150 mark IIの「OUTPUT」に圧電スピーカーをつないでオシロスコープ(DSO 062)で測定すると、波形が変化していることはわかりました。しかし、耳で聴き取れるほど大きな音が出なかったので、いつものアンプ内蔵ンパクトスピーカー(TVR35WH)をつないで音を確かめてみました。SX-150 mark IIの「CUTOFF」つまみを左右に回すと、フィルタがかかって音が開いたり閉じたりするような変化がありました。また、「RESONANCE」つまみを右に回すと、CUTOFF部分が強調された感じにはなるのですが、あまり強く変化しないことがわかりました。ちょっと残念だったのは、どうしてもノイズが入るのを防ぐことができなかったことでした。これは、電池を使っているためかもしれません。電源アダプタが使えるように改造した方が良いのかもしれません。

ということで、IchigoJamからSX-150 mark IIに電気信号を送って音を変化させることに成功しました。

2023年1月8日日曜日

IchigoJamからの電気信号は簡易なシンセサイザー(monotronシリーズ)のOscillatorになるのか検証する

以前の続きです。IchigoJamのピンソケット(「SOUND」と「GND」)からパルス(矩形波)を出して、それを簡易なシンセサイザーに入れて音が変化するかやってみています。今回使うシンセサイザーは、KORGの「monotron Duo」と「monotron DELAY」です。回路図を見ると、外部入力(aux)からVCF(Voltage Controlled Filter)につながっているようなので、これでもIchigoJamからのパルスを変化させることができそうです。(SX-150のときも同じことを思っていた)

例によって自作のケーブルを使ってIchigoJamからの電気信号をmonotron Duoの「aux」に入れるように配線して、前回作ったプログラムを使ってPS/2キーボードを操作して音を出してみました。SX-150ではうまくいきませんでしたが、今回はあっさり音が出てくれました。VCFを通って出て来た音をオシロスコープ(DSO 062)で測定すると、ノコギリ波のような波形を作ることができました。monotron DELAYの方でやってみると、フィルタがかかって波形は変化するもののDuoほどには変化しませんでした。

アンプ内蔵コンパクトスピーカー(TVR35WH)で音を聴いて確かめてみると、パルス(矩形波)が歪んだ感じになることがわかりました。monotron DuoのVCF(「CUTOFF」と「PEAK」)やmonotoron DELAYのVCF(「CUTOFF」のみ)のダイヤルを回すと、音の変わり具合を調整することができました。

という訳で、IchigoJamの電気信号は、monotron DuoやDELAYのOscillatorになることがわかりました。ここまでできたら、再度SX-150とつないで音を変化させるとか、KORGのvolca modulerとつないでみるとかといったことに挑戦してみたくなりました。

SX-150の方はmark IIもあるので、PAM8403(D級アンプIC)にボーリューム(可変抵抗)をつないだモジュール(GF1002)を見つけて購入したのでやってみたいと思っています。

volca modularの方は、その名の通りモジュラーシンセサイザーですので、こういう実験とは親和性が高いものと思います。どんどん沼にハマっていく予感がしますが、楽しいのでやめられません。

2023年1月3日火曜日

IchigoJamでPS/2キーボードを鍵盤のように使うプログラム

以前前回の続きです。この実験を続けているうちに、音を出すたびに「PLAY "C1"」コマンドを書いて実行するのが面倒に感じるようになりました。すぐに思いつくのは、IchigoJamにつないでいるPS/2キーボードを鍵盤のように使うことです。そこで、「IchigoJamチップチューン!? PLAY文とMMLで音楽演奏」を参考に、PS/2キーボードを鍵盤のように使って音を鳴らすプログラムを作ってみました。

110 K=INKEY()
119 IF K=ASC(”A”) PLAY “O2A-”
120 IF K=ASC(”Z”) PLAY “O2A”
121 IF K=ASC(”S”) PLAY “O2A+”
130 IF K=ASC(”X”) PLAY “O2B”
140 IF K=ASC(“C”) PLAY “O3C”
141 IF K=ASC(“F”) PLAY “O3C+”
150 IF K=ASC(“V”) PLAY “O3D”
151 IF K=ASC(“G”) PLAY “O3D+”
160 IF K=ASC(“B”) PLAY “O3E”
170 IF K=ASC(“N”) PLAY “O3F”
171 IF K=ASC(“J”) PLAY “O3F+”
180 IF K=ASC(“M”) PLAY “O3G”
181 IF K=ASC(“K”) PLAY “O3G+”
190 IF K=ASC(“,”) PLAY “O3A”
191 IF K=ASC(“L”) PLAY “O3A+”
200 IF K=ASC(“.”) PLAY “O3B”
210 IF K=ASC(“Q”) PLAY “O4C”
211 IF K=ASC(“2”) PLAY “O4C+”
220 IF K=ASC(“W”) PLAY “O4D”
221 IF K=ASC(“3”) PLAY “O4D+”
230 IF K=ASC(“E”) PLAY “O4E”
240 IF K=ASC(“R”) PLAY “O4F”
241 IF K=ASC(“5”) PLAY “O4F+”
250 IF K=ASC(“T”) PLAY “O4G”
251 IF K=ASC(“6”) PLAY “O4G+”
260 IF K=ASC(“Y”) PLAY “O4A”
261 IF K=ASC(“7”) PLAY “O4A+”
270 IF K=ASC(“U”) PLAY “O4B”
280 IF K=ASC(“I”) PLAY “O5C”
281 IF K=ASC(“9”) PLAY “O5C+”
290 IF K=ASC(“O”) PLAY “O5D”
291 IF K=ASC(“0”) PLAY “O5D+”
300 IF K=ASC(“P”) PLAY “O5E”
410 GOTO 110

「ASC」でキーボードからの入力を文字コードに変換し、「INKEY」に入れて「PLAY」で音を出すという仕組みです。ネットでいろいろ調べてみると「C」のキーを「C(ド)」に当てている例が多かったので、それに習ってプログラムしてみました。出来上がったプログラムを「SAVE0」で保存して、使うときに「LOAD0」で呼び出せるようにしました。
(「プログラムのほぞん」を参考にしました)

ところどころ不具合があって、何度かやり直しをしましたがようやくまともに動くプログラムになりました。音痴なところは「仕様」なのでとりあえず我慢することにします。

2022年12月27日火曜日

IchigoJamからの電気信号は簡易なシンセサイザー(SX-150)のOscillatorになるのか検証する

前回の続きです。IchigoJamのピンソケット(「SOUND」と「GND」)からパルス(矩形波)を出して、それを簡易なシンセサイザーに入れて音を変化させてみたいと思います。まずはGAKKENの「大人の科学」の別冊マガジン「シンセサイザー・クロニクル」に付録していた「SX-150」とその後継のSX-150 mark IIを使ってやってみます。回路図を見ると、外部入力(「EXT.SOURCE」か「LINE IN」)からVCF(Voltage Controlled Filter)につながっているようなので、IchigoJamからのパルスを変化させることができそうです。

ちょっとつまずいたのは、電池の問題でした。しばらく電池を使うものをいじっていなかったので、電池の在庫を切らしていました。普段は充電池や電源アダプタで事が足りるため、普通の電池を使っていません。SX-150も電源アダプタ駆動に改造しようかとも思っていたのですが、まだ手を付けていなかったので電池が必要です。試しに充電池で動くかどうかやってみたのですが、思うように音が出ません。普通の電池が1本当たり1.5 Vで、充電池は1.2 Vです。SX-150は4本の電池が必要なので、普通の電池では6 Vとなりますが、充電池では4.8 Vしかありません。アナログ・シンセサイザーは、電圧の違いが問題になることがあるので、電圧が足りないと音が不安定になります。(簡易なシンセサイザーなので、電源からの昇圧回路は含まれてないのだろうと推察します)取り急ぎ、近所の家電量販店で電池を調達してきました。これで無事に思った通りの音が出るようになりました。

ここまでで準備が整ったので、IchigoJamとSX-150をつないで音を出してみます。前回作ったケーブルをIchigoJamの「SOUND」と「GND」に挿して、ミニジャック側にTSケーブル(モノラルミニプラグ)を挿してSX-150につないだのですが、微妙に音が安定しません。しかも、音が聴こえてもかなり音量が低い状態です。このことから、IchigoJam側の出力が小さすぎて圧電スピーカーでは音が聴こえるけれど、SX-150のOscillatorとしては使えないことがわかりました。

次にできることとすれば、IchigoJamとSX-150の間に増幅(アンプ)回路を入れること。つまり、IchigoJamの出力信号を増幅させてSX-150に入力するということです。たまたま、「PAM8403(←データシートのPDF)」というD級アンプICを積んだアンプモジュール(別の需要があってAmazonで購入していた)があったので、これを使ってみることにしました。IchigoJamからの電気信号をアンプに通してSX-150に入れるための道具を作りました。

気合を入れてがんばってみましたが、結論から言うとうまくいきませんでした。IchigoJamから「PLAY”C1”」で音を出しているときは、「ド」の音の電気信号が出ている感じなのですが、何の音も出していないときには別の電気が流れてしまうようで、ハウリングのような音がします。また、出ている音自体も、とぎれとぎれで何かが足りない感じです。これは、SX-150の「OUTPUT」にアンプ内蔵コンパクトスピーカー(YAZAWATVR35WH)をつないでも同じです。PAM8403のアンプモジュールの電源をIchigoJamの「VCC」と「GND」にしても同じでした。増幅が大きすぎるのかもしれません。となるとトランジスタで1石アンプでも作ってやった方が良いのかもしれません。もう少し時間がかかりそうです。