福野泰介の一日一創 - create every day

鯖江凱旋!サバエレキシライブ記念、ほのかに光る稲穂づくり

2018/04/29
#IchigoJam #maker #music 

鯖江出身ミュージシャン、レキシの凱旋ライブが西山公園で開催!
やはりここは光る稲穂で応援にいきたい。


ヒカルイナホ2号とヒカルイナホ1号


ヒカルイナホ1号。IchigoJam制御でほんわり光、ほんわり消える。光の強さをつまみ式の可変抵抗でコントロール可能。 設定スイッチをいれると色選択モードになり、色相と彩度(ボタン押しながら)を可変抵抗で変更可能。


両面から見られるようにテープ状のフルカラーLEDをオモテウラ貼り付けることを想定。IchigoJamとブレッドボードで回路とプログラムを作成し、ユニバーサル基板でコンパクト化開始。


光った!


IcihgoJamの分離合体バージョン、IchigoDakeとモバイルバッテリー、ヒカルイナホボード、可変抵抗を組み立てて使用。マスキングテープはそこそこ強度があって、後できれいにはがせて便利。


ついでにもうひとつ簡易版、ヒカルイナホ2号。3つのタクトスイッチで光の3原色をダイレクトに体感。
曲に合わせて7色から選べる。


単3電池x2を電源に、フルカラーLEDの赤、緑、青に抵抗10Ωを通して並列に接続した、ヒカルイナホ2号。 ライブでの振られるイナホ、振ると線が抜ける、切れることが判明しホットボンドで強化。


多くのレキシファンで賑わった西山公園。


GW中の立ち入り制限は前代未聞!?


フードエリア、コトブキ食堂。サバエドッグには長蛇の列!(写真のサバエドックは誤植?)


こちら連隊カレエ。鯖江には大日本帝国陸軍「歩兵第36連隊」が駐屯してました。その三六町(さんろくちょう)にある、サラダ焼きも手軽でおすすめ鯖江ご当地グルメ!
三六サラダ焼 | 三六商店(さんろくしょうてん)公式サイト


物販に並ぶ列と癒やしのつつじ、5万株(西山公園内)


レキシ10周年!凱旋ライブ!!レキシのライブに遊びに来ねの〜〜 2018.4.29 福井県鯖江市西山公園
ちょっと暑いくらいの最高の天気に恵まれた! (来ねの、は福井弁、来てね、来たらいいんじゃない?的意味)

「歴史ブランニューデイ」メンバー、レキシネーム「足軽先生」のいとうせいこうさん、レキシネーム「三つ子の魂百男」鯖江市の牧野百男市長も登場。

市長がPV冒頭35秒間出演している「歴史ブランニューデイ」のPV、再生回数100万回オーバー!
「君がいない幕府」でも市長は福井弁ラップ(?)で出演。縁が深い、レキシとサバエ。

ヒカルイナホ1号 プログラム解説
ハードウェアを準備する。IN3(=OUT10)-DIN(WS2812B), IN2-可変抵抗, IN1-設定スイッチ

10 A=#700:OUT10,0 20 POKEA,240,181,114,182,64,24,80,33,9,6,128,49,4,136,1,48,128,37,1,48,3,120,~0,34,10,96,3,39,10,38,43,66,1,208,10,39,3,38,1,63,~2,209,0,34,10,96,1,62,~2,209,109,8,239,209,1,60,234,209,98,182,240,189 RUN POKE#800,6,0,0,255,0,0,255,0:?USR(#700,#800)

光る大五郎、WS2812Bをプルアップ抵抗を付けて5Vを出力できるオープンドレインなIN3(OUT10)用に変更、2つ赤く光る

500 @HSV2RGB 505 R=V:G=V:B=V:IF S=0 RTN 510 D=H/60%6:C=V-(59-H%60)*V/60*S/100:E=V-H%60*V/60*S/100:F=V*(100-S)/100 520 IF D=0 G=C:B=F 530 IF D=1 R=E:B=F 540 IF D=2 R=F:B=C 550 IF D=3 R=F:G=E 560 IF D=4 R=C:G=F 570 IF D=5 G=F:B=E 580 RTN 400 GSB@HSV2RGB:POKE#800,6,0,G,R,B,G,R,B:U=USR(#700,#800):RTN H=30:S=100:V=30:GSB400

HSVをRGBに変換するプログラムを混ぜて、色彩豊かに光る準備完了

100 S=100:H=0 110 V=0:GSB400 120 W=ANA(2)/4 130 IF BTN() FORI=0TO4:V=V+(W-V)/2:GSB400:NEXT:FORI=0TO1:I=!BTN():W=ANA(2)/4:V=W:GSB400:NEXT:FORI=0TO4:V=V-V/2:GSB400:NEXT 140 GOTO110

可変抵抗でマックスを設定し、ほんわり光らせ、ほんわり消す

140 IF IN(1) GOTO 110 150 V=W:A=ANA(2) 160 B=ANA(2):H=(H+(A-B)/2+360)%360:A=B:GSB400 170 IF BTN() FORI=0TO1:S=100-ANA(2)/10:S=S*(S>0):GSB400:I=!BTN():NEXT:A=ANA(2) 180 IF IN(1) GOTO 110 ELSE GOTO 160

色相と彩度と設定するスイッチに対応して、できあがり!


ヒカルイナホ1号の肝、フルカラーLED(WS2812B)用ボードの裏。

プログラム全文

10 A=#700:OUT10,0 20 POKEA,240,181,114,182,64,24,80,33,9,6,128,49,4,136,1,48,128,37,1,48,3,120,~0,34,10,96,3,39,10,38,43,66,1,208,10,39,3,38,1,63,~2,209,0,34,10,96,1,62,~2,209,109,8,239,209,1,60,234,209,98,182,240,189 100 S=100:H=0 110 V=0:GSB400 120 W=ANA(2)/4 130 IF BTN() FORI=0TO4:V=V+(W-V)/2:GSB400:NEXT:FORI=0TO1:I=!BTN():W=ANA(2)/4:V=W:GSB400:NEXT:FORI=0TO4:V=V-V/2:GSB400:NEXT 140 IF IN(1) GOTO 110 150 V=W:A=ANA(2) 160 B=ANA(2):H=(H+(A-B)/2+360)%360:A=B:GSB400 170 IF BTN() FORI=0TO1:S=100-ANA(2)/10:S=S*(S>0):GSB400:I=!BTN():NEXT:A=ANA(2) 180 IF IN(1) GOTO 110 ELSE GOTO 160 400 GSB@HSV2RGB:POKE#800,6,0,G,R,B,G,R,B:U=USR(#700,#800):RTN 500 @HSV2RGB 505 R=V:G=V:B=V:IF S=0 RTN 510 D=H/60%6:C=V-(59-H%60)*V/60*S/100:E=V-H%60*V/60*S/100:F=V*(100-S)/100 520 IF D=0 G=C:B=F 530 IF D=1 R=E:B=F 540 IF D=2 R=F:B=C 550 IF D=3 R=F:G=E 560 IF D=4 R=C:G=F 570 IF D=5 G=F:B=E 580 RTN

links
- レキシオフィシャルHP うぇぶ城
- レキシさん、鯖江市で凱旋ライブ 西山公園、全国から6千人 | 催し・文化 | 福井のニュース | 福井新聞ONLINE

特別支援学校=盲学校+聾学校+養護学校(2007年から) IchigoJamで音楽を学んで校歌演奏しよう

2018/02/11
#IchigoJam #music #KidsIT 

縁あって訪問した沖縄の特別支援学校でしたが、実体を知らなさすぎました。
特別支援学校は日本教育変革の救世主!?

漢字が分かると、なんとなく分かった気になってしまう日本語の罠。

それまでの視覚障害者向けの盲学校、聴覚障害者向けの聾学校、知的障害者・肢体不自由者・病弱者向けの養護学校が、特別支援学校という括りとなりました。 2007年に誕生した新しい言葉、25歳以上は義務教育で教わっていません。

〜自立や社会参加に向けた主体的な取組を支援するという視点に立ち、幼児児童生徒一人一人の教育的ニーズを把握し、その持てる力を高め、生活や学習上の困難を改善又は克服するため、適切な指導及び必要な支援を行うものです。
文部科学省 特別支援教育についてより)

教育方針が明確。自立と社会参加をゴールにおき、一人一人と向き合う、まさに理想的な教育機関!
いっそ子供全員が特別支援教育がいい気がしますが、現状の一人あたり教育コストは10倍。IT活用なしに実現は不可能です。

福井県には特別支援学校が13校。内、盲学校と聾学校が1校ずつ。(福井県特別支援学校一覧 - Wikipedia
盲学校ってどんな学校? | 福井県立盲学校」(実は、見えない人よりも見える人の方が多いのです)
校歌 - 福井県立ろう学校」聴覚障害の子供たちの歌声!

鯖江最寄りの「小学部紹介:福井県立福井南特別支援学校」に載っていた時間割を見ると、音楽、図画工作、自立活動と楽しそうな科目が目をひきます。 楽器としても使えるIchigoJam、自分の学校の校歌を演奏させてみましょう。

楽譜をMML(エムエムエル、ミュージックマクロランゲージという音楽を表すコンピューター言語)に変えれば、コンピューターが演奏してくれます!

PLAY"CDE2CDE2"

ドレミードレミー、チューリップの冒頭ですね
(詳しくは:IchigoJam BASICリファレンスPLAY - IchigoJamプリント

福井南特別支援学校の校歌の冒頭MMLはこんな感じ!

10 PLAY"T104FD2C.D8>B-2.<FGFE-DE-2R E-C2CE-8E-8D.E-8F8F8F8EEFGF2R" RUN

楽譜とMMLの記号との対応を見ながら演奏できるプログラムをつくってみました。

カーソル上下で動かし、スペースで音が鳴ります。

10 POKE#700,0,0,0,255,0,0,0,0,56,124,254,255,254,124,56,0,254,124,56,255,0,0,0,0,0,0,0,255,56,124,254,254,0,0,0,7,0,0,0,0,0,0,0,192,0,0,0,0 20 S=" C` D` E` F` G` A` B`<C`<D`<E`<F`<G":T=0:VIDEO3 30 CLS:FORI=1TO5:LC6,I+2:?CHR$(224,224,224);:NEXT 40 LC7,8-(T+1)/2:IF T%2=0 ?CHR$(225) ELSE ?CHR$(227,28,31,226) 50 IF T=0 LC6,8:?CHR$(228,225,229) 60 LC10,8:?STR$(S+T*3,2) 70 K=INKEY():IF!K CONT 80 IF K=32 PLAYS+T*3:GOTO70 90 T=T-(K=31)+(K=30):T=(T+12)%12:GOTO30

10行で五線と音符キャラクターをつくっています。
20行のSを80行で音階毎に鳴らしています。
キー操作ではなく、ドから順番にならすだけのプログラムはこちら(RUN on IchigoJam web)

オリジナルキャラクターづくりは、イチゴがりするかめプログラムの記事を参考にどうぞ!

links
- 特別支援教育について:文部科学省
- 特別支援学校 - Wikipedia (沿革、実体、課題など記載あり)

ぬいぐるみとNFCとMIDIでFM音源BGM自動生成、高専インターンOB/OGハッカソン「クリエイティビティーを刺激せよ」エキシビジョン

2017/08/26
#sabae #IchigoJam #music #intern #midi 

鯖江、めがね会館で開催、高専インターンOB/OGハッカソン「クリエイティビティーを刺激せよ!」
10時からネタ出しチーム分け、昼食後、13時から開発開始、17時発表までの4時間で勝負!

それぞれで楽しいチーム開発が進みます。

現役インターン生とインターンOB/OGの混合チーム。

小学生でも優しく作れる、だれでもSPARQL、SPRACH。

創造活動を応援してくれる、ちあがーるふれんど(仮

各チーム毎に自分以外に1票いれて選ぶ、優勝チームは「Waku2Pad」

他の作品も楽しかった!
- おやつアート - オープンデータなお菓子画像で創造&爆発
- いらすと屋2.0 - 気軽なイラスト共有プラットフォーム
- このゆびとまれ - 創造活動チームを組成支援

各チームのちょっとだけ手伝いしつつ、終盤は一人チームでつくった、クリエイティビティーを高めるBGM。
ぬいぐるみにNFCをつけ、気分に合わせたBGMが聞いて、気分をアゲようという提案!

IchigoJamのプログラムは過去作品の組み合わせ!
RFIDで読み取ったIDを乱数の種に、MIDIで音階を自動生成するプログラムに連携します

10 LET[0],36,38,43,50,42,46,39,75,67,49 20 BPS 31250:UART1 30 SRND S 40 FOR I=0 TO 7 45 T=[RND(10)] 50 ?CHR$(#90,T,80); 60 WAIT 10 65 ?CHR$(#80,T,0); 66 IF BTN() BPS0:LRUN0 70 NEXT 90 GOTO 30

KORG plugKEYを使うと、iPhone/iPad/iPod touchがIchigoJamから使える高音質MIDI楽器に早変わり!
動画の楽器アプリはYAMAHAのFM音源アプリ「FM Essentia」MIDIコントロール可能!

KORGの音源アプリも、MIDIで接続できる!

IchigoJamのかわくだりゲームを改造して遊ぶ高専生達。

また来年!

YMF825で楽器づくり「FM音源キーボード」マシン語で高速SPI、IchigoJamでまなぶ Armマシン語入門その9

2017/08/15
#IchigoJam #music #asm 

FM音源チップ、YMF825、IchigoJam BASICで鳴ったので、次は楽器づくり!
問題は、BASICでは遅いこと。音を鳴らすための2byteのSPI送信5回に、0.73秒もかかっているので、ゆっくりチャイムを鳴らすくらいしか使えません。
* SPIとは、クロックに合わせて信号を送受信するシンプルな通信方式 (SPI on Wikipedia)


FM音源キーボード on IchigoJam デモ動画

おや!?小気味よく鳴ってますね!これがマシン語パワーです!
復習を兼ねて、OUTポートをマシン語で使う実験をしてみます。(参考、マシン語でLEDを光らせよう

LEDが接続されている端子は、PIO1_5、アドレスとしてはPIO1のベースアドレス#50010000に、2進数の`10000000(= 1&<&<(5+2))を加えた場所に書き込めばOK!

@LED1 R3=#50 ' R3=#50010000 R3=R3<<8 R3=R3+1 R3=R3<<16 R2=`10000000 R3=R3+R2 R2=R2>>2 [R3]L=R2 ' GPIO1_5 <- 1 RET

asm15アセンブラを使うか、ハンドアセンブルして、できたマシン語コードを動かしてマシン語でLED1!

POKE#700,80,35,27,2,91,28,27,4,128,34,155,24,146,8,26,96,112,71 ?USR(#700,0)

次はBASICでつくったSPI送信をマシン語化します。

@SPIW:OUT4,0:FORI=0TO15:OUT2,0:OUT3,N>>(15-I)&1:OUT2,1:NEXT:OUT4,1:RTN

まずは分解!

OUT4,0 FORI=0TO15 F=N>>(15-I)&1 OUT2,0:OUT3,F OUT2,1 NEXT OUT4,1 RTN

ひとつずつマシン語化すれば、できあがり!

@SPIW R3=#50 ' R3=#50010000 R3=R3<<8 R3=R3+1 R3=R3<<16 R2=0 [R3+`1000]L=R2 ' OUT4,0 R1=1 R1=R1<<15 @LOOP R2=0 R0&R1 'F=N>>(15-I)&1 IF 0 GOTO @SKIP R2+=4 @SKIP [R3+`110]L=R2 ' OUT2,0:OUT3,F R2+=2 [R3+`110]L=R2 ' OUT2,1 R1=R1>>1 IF !0 GOTO @LOOP @END R2=8 [R3+`1000]L=R2 ' OUT4,1 RET

アセンブラasm15を使って2byte送信SPIマシン語バイナリができました!
送信したい16bitの数値を、USRコマンドの第二パラメータにいれるだけ!(マシン語にはレジスタR0として渡される)

POKE#700,80,35,27,2,91,28,27,4,0,34,26,98,1,33,201,3,0,34,8,66,0,208,4,50,154,97,2,50,154,97,73,8,246,209,8,34,26,98,112,71

準備ができたので、早速楽器づくり、まずはIchigoJamのボタンを使った単音楽器で実験!
前回のYMF825の初期化プログラムを動かし、音がなる状態にしてからNEW、次のプログラムを入力。
*マシン語化した初期化プログラム、後述します

1 'FM BTN 10 A=#700:POKEA,80,35,27,2,91,28,27,4,0,34,26,98,1,33,201,3,0,34,8,66,0,208,4,50,154,97,2,50,154,97,73,8,246,209,8,34,26,98,112,71 20 T=#1465 30 IF !BTN() CONT 40 U=USR(A,#0B00):U=USR(A,#0C54):U=USR(A,#0D00+T>>8):U=USR(A,#0E00+T&#FF):U=USR(A,#0F40) 50 IF BTN() CONT 60 U=USR(A,#0F00) 70 GOTO 30

ボタンを押したら鳴り始め、離したたらキーオフ!
反応速度もいい感じ!いろんなボタンをつなげて遊べそうですね!
*時間を測ってみると、1回の送信でTICKで1、約1/60秒、100倍速い!

次は、キーボードで楽器キーボードをつくってみます。
キーボードのZXCがドレミ、SDなどで半音にも対応します。

1 'FM KEYBOARD 10 A=#700:POKEA,80,35,27,2,91,28,27,4,0,34,26,98,1,33,201,3,0,34,8,66,0,208,4,50,154,97,2,50,154,97,73,8,246,209,8,34,26,98,112,71 100 FORI=0TO15:U=USR(A,#0B00+I):U=USR(A,#0F30):U=USR(A,#1071):U=USR(A,#1101):U=USR(A,#1208):U=USR(A,#1300):U=USR(A,#0C54):NEXT 200 LET[0],357,378,401,425,450,477,505,535,567,601,637,674 210 M="ZSXDCVGBHNJM,L." 220 K=INKEY():IF!KCONT 230 N=0 240 IF PEEK(M+N)=K GOTO300 250 N=N+1:IF N=15 GOTO 220 260 GOTO240 300 ?N:T=[N%12]:B=4+N/12:T=T&#7F+T>>7<<11+B<<8 310 U=USR(A,#0B00+N):U=USR(A,#0F00): 320 U=USR(A,#0D00+T>>8):U=USR(A,#0E00+T&#FF):U=USR(A,#0F40) 330 GOTO 220

キーは離されたタイミングが取得できないので、キーが押された時に、キーオフ(310行)してから、キーオン(320行)するようにしています。

ついでに、初期化コードもマシン語で高速化!

1 'FM INIT 10 OUT1,0:WAIT1:OUT4,1:OUT1,1 13 A=#700:POKEA,80,35,27,2,91,28,27,4,0,34,26,98,1,33,201,3,0,34,8,66,0,208,4,50,154,97,2,50,154,97,73,8,246,209,8,34,26,98,112,71 14 S=#728:POKES,80,35,27,2,91,28,27,4,128,33,0,34,8,66,0,208,4,50,154,97,2,50,154,97,73,8,246,209,112,71 15 'INIT 20 LET[0],#1D01,#020E,-1,#0001,#0100,#1AA3,-1,#1A00,-30,#0204,-1,#0204,-1,#0200,#197C,#1B3F,#1400,#0301,#08F6,-21,#0800,#09FB,#0A00,#01740,#1800,0 22 FORJ=0TO99:N=[J]:IF!N J=99:GOTO26 24 IF N<0 WAIT -N ELSE U=USR(A,N) 26 NEXT 30 'SETCH 31 LET[0],#0F30,#1071,#1101,#1208,#1300 32 FORJ=0TO4:U=USR(A,[J]):NEXT 40 'SETTONE 41 U=USR(A,#08F6):WAIT1:U=USR(A,#0800) 42 LET[0],7,#81,1,#43,0,#E7,#FF,#9D,0,#10,#40,#20,#33,#E2,#73,0,#50,#40,#10,#41,#D3,#5B,0,#10,#41,#20,#63,#D4,2,1,#10,#40,#80,3,#81,#80 43 M=36 50 @SPIAW:OUT4,0:FORK=0TOM-1:U=USR(S,[K]):NEXT:OUT4,1

配列をSPIで送信する @SPIAW の内部、8bitのSPI送信もマシン語化しました(アドレス#728=S)

@SPI1W R3=#50 ' R3=#50010000 R3=R3<<8 R3=R3+1 R3=R3<<16 R1=#80 @LOOP R2=0 R0&R1 'F=N>>(7-I)&1 IF 0 GOTO @SKIP R2+=4 @SKIP [R3+`110]L=R2 ' OUT2,0:OUT3,F R2+=2 [R3+`110]L=R2 ' OUT2,1 R1=R1>>1 IF !0 GOTO @LOOP @END RET

FM音源音色エディタもマシン語化!

1 'FM EDITOR 5 CLS 10 ?" 1 BO 3:";[40] 20 ?" 2 LFO 3:";[41] 30 ?" 3 ALG 7:";[42] 40 LET[80],"SR 15","XOF 1","KSR 1","RR 15","DR 15","AR 15","SL 15","TL 63","KSL 3","EAM 1","DAM 3","EVB 1","DVB 3","MUL15","DT 7","WS 31","FB 7" 50 FORJ=0TO1:FORI=0TO16:LCJ*15,3+I:?DEC$(4+I+J*17,2);" ";STR$([80+I]);":";[43+I+J*17]:NEXT:NEXT 60 INPUT"ID :",I 70 INPUT"VAL:",V:[39+I]=V 75 GSB@TESTTONE 80 GOTO 5 100 @TESTTONE 110 LET[0],7,#81,[40],[41]<<6+[42] 120 FORJ=0TO1:P=43+J*17 130 LET[4+J*7],[P]<<4+[P+1]<<3+[P+2],[P+3]<<4+[P+4],[P+5]<<4+[P+6],[P+7]<<2+[P+8],[P+9]<<4+[P+10]<<5+[P+11]+[P+12]<<1,[P+13]<<4+[P+14],[P+15]<<3+[P+16] 132 NEXT 141 U=USR(A,#08F6):WAIT1:U=USR(A,#0800) 143 M=36:GSB@SPIAW 150 T=#1465 160 U=USR(A,#0F00):U=USR(A,#0B00):U=USR(A,#0C54):U=USR(A,#0D00+T>>8):U=USR(A,#0E00+T&#FF):U=USR(A,#0F40) 180 RTN 1010 @SPIAW:OUT4,0:FORK=0TOM-1:U=USR(S,[K]):NEXT:OUT4,1:RTN

YMF825初期化コード実行後に動かし、いい音色ができたら、ボタン楽器や、キーボード楽器で演奏しよう!

Enjoy to create original musical instruments with FM!
オリジナル楽器作りを楽しもう!

links
- YMF825 x IchigoJamで鳴らすFM音源チャイム、BASICでつくるYMF825Board用FM音源エディタ (ハードウェア準備、接続方法)
- YMF825Board GitHubPage へようこそ!
- ヤマハ製YMF825使用FM音源LSIモジュール: 組立キット 秋月電子通商 電子部品 ネット通販
- ヤマハFM音源LSI YMF825搭載モジュール YMF825Board - SWITCH-SCIENCE

- 連載、IchigoJamではじめる、Armマシン語入門
1. はじめてのマシン語
2. ハンドアセンブルで超速計算!
3. マシン語メモリアクセスで画面超速表示!
4. マシン語でLEDを光らせよう!
5. 楽しさ広がるマルチバイトメモリアクセスとスタック
6. マシン語使いこなしTIPS
7. カジュアルに使うインラインマシン語
8. アセンブラを使って楽しよう
9. マシン語で高速SPI
10. マシン語を制するもの時間を制す
11. 画面をイチゴで埋め尽くす12の方法
12. レジスタ不足に上位レジスタとスタック操作

YMF825 x IchigoJamで鳴らすFM音源チャイム、BASICでつくるYMF825Board用FM音源エディタ

2017/08/14
#IchigoJam #music 

三島で見た謎FM音源MFTで入手したYAMAHAYMF825Board、IchigoJam BASICで鳴らすことに成功! 標準装備のPSG音源、シリアル2本ケーブルで制御するMIDI音源に加え、FM音源もOK!FM音源といえば、MSX2+を買ってもらって音楽の教科書からいろいろ打ち込んで遊んでました。PLAY#2!


FM音源で鳴らす、学校のチャイム風!

YMF825Boardの使い方
※3.3Vで使うために基板にちょっと工作が必要です(YMF825Board Rev.Aを見て、8/15追記)

小さな抵抗 R0 を外し、S1にあるパッド3つをはんだでつなぐ(はんだブリッジ)ことで、SPIの信号が3.3Vで使えるようになります。


R0 は、はんだ吸い取り線を重ねて上から熱しながらピンセットで取りました。


難関だったS1のはんだブリッジ、3つのパッドが全部つながるようにはんだが乗ればOK!
今回はなかなかうまくつかないので諦めて、回路図からICの8ピンVDDと9ピンIO/VDDに3.3VがつながればOKとわかったのでLEDなどの線の切れ端を使ってS1の大きいパッドからIC8ピン9ピンの間とをはんだづけ。
(パッド間がもっと近いと楽になりそう)


SPIで制御するYMF825Boardとの接続はジャンパーワイヤー7本。
電源で3本、5V/3.3V/GND
RST_N (リセット) - OUT1
SCK (クロック) - OUT2
MOSI (データ送信) - OUT3
SSN (チップセレクト) - OUT4
ステレオジャックに、イヤホンかスピーカーに接続すればOK!

こちらドレミファソと鳴るテストプログラム

10 OUT1,0:WAIT1:OUT4,1:OUT1,1 15 'INIT 20 LET[0],#1D01,#020E,-1,#0001,#0100,#1AA3,-1,#1A00,-30,#0204,-1,#0204,-1,#0200,#197C,#1B3F,#1400,#0301,#08F6,-21,#0800,#09FB,#0A00,#01740,#1800,0 22 FORJ=0TO99:N=[J]:IF!N J=99:GOTO26 24 IF N<0 WAIT -N ELSE GSB@SPIW 26 NEXT 30 'SETCH 31 LET[0],#0F30,#1071,#1100,#1208,#1300 32 FORJ=0TO4:N=[J]:GSB@SPIW:NEXT 40 'SETTONE 41 N=#08F6:GSB@SPIW:WAIT1:N=#0800:GSB@SPIW 42 LET[0],7,#81,1,#43,0,#E7,#FF,#9D,0,#10,#40,#20,#33,#E2,#73,0,#50,#40,#10,#41,#D3,#5B,0,#10,#41,#20,#63,#D4,2,1,#10,#40,#80,3,#81,#80 43 M=36:GSB@SPIAW 60 'KEYON 65 LET[50],#1465,#1C11,#1C42,#1C5D,#2417 70 FORM=0TO4:N=[50+M] 75 ?N 80 LET[0],#0B00,#0C54,#0D00+N>>8,#0E00+N&#FF,#0F40 90 FORJ=0TO4:N=[J]:GSB@SPIW:NEXT 100 WAIT30 110 N=#0F00:GSB@SPIW 125 NEXT 130 GOTO70 1000 @SPIW:OUT4,0:FORI=0TO15:OUT2,0:OUT3,N>>(15-I)&1:OUT2,1:NEXT:OUT4,1:RTN 1010 @SPIAW:OUT4,0:FORK=0TOM-1:N=[K]:FORI=0TO7:OUT2,0:OUT3,N>>(7-I)&1:OUT2,1:NEXT:NEXT:OUT4,1:RTN

ArduinoのサンプルをIchigoJam BASICに移植)

YMF825にはプリセット音源はないため、音色パラメータを最初に書き込んであげる必要があります(42行)。
FM音源攻略のため、2オペレータのパラメータを編集できるFM音源エディタをつくってみました。

YMF825 FM音源エディタ on IchigoJam

まずはYMF825の初期化コード

1 'FM INIT 10 OUT1,0:WAIT1:OUT4,1:OUT1,1 15 'INIT 20 LET[0],#1D01,#020E,-1,#0001,#0100,#1AA3,-1,#1A00,-30,#0204,-1,#0204,-1,#0200,#197C,#1B3F,#1400,#0301,#08F6,-21,#0800,#09FB,#0A00,#01740,#1800,0 22 FORJ=0TO99:N=[J]:IF!N J=99:GOTO26 24 IF N<0 WAIT -N ELSE GSB@SPIW 26 NEXT 30 'SETCH 31 LET[0],#0F30,#1071,#1100,#1208,#1300 32 FORJ=0TO4:N=[J]:GSB@SPIW:NEXT 33 FORI=0TO37:[I+40]=0:NEXT 35 LRUN2 1000 @SPIW:OUT4,0:FORI=0TO15:OUT2,0:OUT3,N>>(15-I)&1:OUT2,1:NEXT:OUT4,1:RTN SAVE0

2番ファイルに保存するメインのエディタプログラム(初期化プログラムの35行で呼び出し)
最初のINPUTで番号を指定して、次のINPUTで値を設定(各パラメータに書いてある最大値を超えないように注意)

1 'FM EDITOR 5 CLS 10 ?" 1 BO 3:";[40] 20 ?" 2 LFO 3:";[41] 30 ?" 3 ALG 7:";[42] 40 LET[80],"SR 15","XOF 1","KSR 1","RR 15","DR 15","AR 15","SL 15","TL 63","KSL 3","EAM 1","DAM 3","EVB 1","DVB 3","MUL15","DT 7","WS 31","FB 7" 50 FORJ=0TO1:FORI=0TO16:LCJ*15,3+I:?DEC$(4+I+J*17,2);" ";STR$([80+I]);":";[43+I+J*17]:NEXT:NEXT 60 INPUT"ID :",I:IF I=0 LRUN3 70 INPUT"VAL:",V:[39+I]=V 80 GOTO 5 SAVE2

何も入力せずエンター(または0入力)で、テストで鳴らす音プログラム3番に

1 'FM TEST TONE 10 LET[0],7,#81,[40],[41]<<6+[42] 20 FORJ=0TO1:A=43+J*17 30 LET[4+J*7],[A]<<4+[A+1]<<3+[A+2],[A+3]<<4+[A+4],[A+5]<<4+[A+6],[A+7]<<2+[A+8],[A+9]<<4+[A+10]<<5+[A+11]+[A+12]<<1,[A+13]<<4+[A+14],[A+15]<<3+[A+16] 32 NEXT 41 N=#08F6:GSB@SPIW:WAIT1:N=#0800:GSB@SPIW 43 M=36:GSB@SPIAW 60 'TEST TONE 66 W=30:B=4 70 A=357:GSB@KON:WAITW:GSB@KOFF 130 LRUN2 300 @KON:N=A&#7F+A>>7<<11+B<<8:LET[0],#0B00,#0C54,#0D00+N>>8,#0E00+N&#FF,#0F40 310 FORJ=0TO4:N=[J]:GSB@SPIW:NEXT:RTN 400 @KOFF:N=#0F00:GSB@SPIW:RTN 1000 @SPIW:OUT4,0:FORI=0TO15:OUT2,0:OUT3,N>>(15-I)&1:OUT2,1:NEXT:OUT4,1:RTN 1010 @SPIAW:OUT4,0:FORK=0TOM-1:N=[K]:FORI=0TO7:OUT2,0:OUT3,N>>(7-I)&1:OUT2,1:NEXT:NEXT:OUT4,1:RTN SAVE3


パラメータを設定して、エンターでテストトーン!

YMF825のFM音源の音色づくりの基本

4つの発振器(オペレータ)のつながりを選ぶ、アルゴリズム。第一オペレータを鳴らすアルゴリズム1を選択(ALG:1)

(ymf825board manual / Tone Parameterより)

かつて(MSX時代)は正弦波だけだった発振器、YMF825では29種類から選べます!
音が大きて確認しやすい、ファミコンで有名、三角波を選んでみます(Wave Shape, WS:16)

(ymf825board manual / Tone Parameterより)

次にエンベロープをADSR(アタックAR、ディケイDR、サステインSR/SL、リリースRR)をそれぞれ0-15の値で指定します。
AR: アタックレート、立ち上がりの速さ 15で最速、0で立ち上がらない(鳴らない)
DR: ディケイレート、立ち上がり後の減衰の速さ 15で最速、0で減衰しない
SL: サステインレベル、ディケイ後の音量 15で消える、0で減衰しない
SR: サステインレート、ディケイ後の減衰の速さ 15で最速、0で減衰しない
RR: リリースレート、キーオフ後の減衰の速さ 15で最速、0で減衰しない(鳴り続ける)

まずARを15、RRを15にして鳴らしてみましょう。
ポーっとファミコンっぽい音が鳴ります。

アタックとリリース
ARを5にすると、ふわっと音が鳴り始めます。
RRを5にすると、ふわっと音が消えるようになります。
いろいろ変えてみましょう。

ディケイ
AR、RRを15に戻して、SLを7、DRを10にしてみましょう。
最初音が大きくて、その後小さい音が続きます。
後半の小さな音の音量をSLで調整(0で変化なし、15で消える)し、その音量になるまでの速さをDR(15で即変わる)で指定します。

サステイン
SRを7とすると、後半の小さな音が徐々に減衰するようになります。
キーオフした後の減衰はリリースRRで調整します。

アルゴリズム1は、2番目のオペレータを使って変調(モジュレート)できます。
右側(第二オペレータ)のARとRRを15にして、みると音が変化します。
モジュレーターの効き具合は、TLで調整します(0で最大、63で無効化)。

このように発振器をいろいろつなぎ合わせて音を創る、それがFM音源!
2つのオペレータで慣れたら、4オペレータをフルに使った音作りに挑戦です!

冒頭の動画は、ファイル3の鳴らす部分をこのようにチャイムに書き換えました!
オクターブ(B)が4、音階(A)で指定する数値は、YMF825のマニュアル内のExcelファイルに一覧もあります。

60 'CHIME 66 W=30:B=4 70 A=674:GSB@KON:WAITW:GSB@KOFF 71 A=535:GSB@KON:WAITW:GSB@KOFF 72 A=601:GSB@KON:WAITW:GSB@KOFF 73 A=401:GSB@KON:WAITW*2:GSB@KOFF 80 A=401:GSB@KON:WAITW:GSB@KOFF 81 A=601:GSB@KON:WAITW:GSB@KOFF 82 A=674:GSB@KON:WAITW:GSB@KOFF 83 A=535:GSB@KON:WAITW*2:GSB@KOFF

BASICによるソフトウェアSPIだと遅くてリアルタイムな演奏には向かないので、次は一部マシン語化した楽器プログラムに挑戦してみたいと思います。(参考、マシン語入門
→ マシン語編「YMF825で楽器づくり「FM音源キーボード」マシン語で高速SPI、IchigoJamでまなぶ Armマシン語入門その9

links
- YMF825Board紹介 - Yamaha (公式サイト、マニュアル、サンプルプログラムあり)
- YMF825 SD-1 universal Sound Designer 1 - YAMAHA
- YMF825Board Rev.A (YMF825Board 製造元のウダデンシさんサイト)
- YMF825 FM音源モジュールを使ってみた - きょうのかんぱぱ (Arduinoで音色変更例)
- YMF825(SD-1)ざっくりまとめ(スペック編) - Lost Technology
- アナログシンセとはまったく違う、“誰でもわかるFM音源”講座 : 藤本健の“DTMステーション” (かつて240万円したFM音源シンセサイザー)
- ボードで復活!! 生方剛考のFM音源講座
- 今夜わかるFM音源 - aikeの日記
- FM音源の音作りをアナログな感覚で覚えよう① : SynthSonic
- YAMAHAのFM音源チップ、YMF825がMAKE市場向けに登場。Maker Faireで先行発売が決定だ! : 藤本健の“DTMステーション”

KATOKU by REKISHI / How to use the Rekishi Music Box Chip

2017/04/29
#maker #music #sabae #english 

Rekishi's *new* single CD "KATOKU" released! (KATOKU by レキシ@ja)

Ike-chan as Rekishi born in Sabae city! *Rekishi(レキシ@ja) means also "history" in Japanese
(レキシ池田貴史が福井県鯖江市「サングラス大使」第1号に就任 - 音楽ナタリー)

I've got the special music box card and disassembled. (オルゴール分解@ja)

It's a very simple electronic circuit. It's easy to desolder to get the chip.


from right upper
1. speaker out 1
2. VCC 3-5V?
3. speaker out 2
4. GND
* need some capacitors (VCC-GND 1uF?)


I added a volume controller.


Let's embed the Rekishi Music on your life!


Try it now!

links
- レキシ セカンドシングル 「KATOKU」発売! (official site)
- KATOKU(初回限定盤) Single, Limited Edition, Maxi (on Amazon)

Binary Room with Music - Let's PLAY PSG on WebMML!

2017/03/20
#music #IchigoJam #english 

Binary Room, I made a game puzzle added music!
IchigoJam can play PSG by MML (Music Macro Language).
I updated the simulator WebMML also. Try to input "T240BBBAGGABB.G8GR".

1 'BINARY ROOM 10 S=1:CLT 15 CLS:LC4,0:?"STAGE:";S 20 FOR I=0 TO 15 30 LC8+I,2:?"#":LC8+I,17:?"#" 50 LC8,2+I:?"#":LC23,2+I:?"#" 70 NEXT 80 SRNDS:FOR I=1 TO S*3 90 X=RND(12)+10:Y=RND(12)+4:IF SCR(X,Y) CONT 100 LCX,Y:IF I%3 ?"#" ELSE ?I/3 110 NEXT 120 X=15:Y=16:V=16:W=16:C=1 121 PLAY"T140EGD2.A2EG1$EG<D2.C2E>B2.A2.B2.A2EB1DEG1DEA1DEG2F2G2E2.DEG<D2.C2E>B2.A2.B2.A2GA2.DFGAB<CDEFGEC>A<CE>G2FED2C1" 125 K=INKEY() 130 A=-(K=28)+(K=29):B=-(K=30)+(K=31) 140 IF SCR(X+A,Y+B)=0 LCX,Y:?CHR$(0):X=X+A:Y=Y+B 150 IF SCR(V-A,W+B)=0 LCV,W:?CHR$(0):V=V-A:W=W+B 160 LCX,Y:?"A":LCV,W:?"B" 165 LC(X+V)/2,(Y+W)/2:IF SCR()-48=C IF Y=W AND ABS(X-V)=2 OR X=V AND ABS(Y-W)=2 ?CHR$(0);:C=C+1:IF C=S+1 LC4,20:?"CLEAR!":PLAY"T240BB<CDDC>BAGGABA.G8GR":WAIT300:IF S=9 END ELSE S=S+1:GOTO 15 170 LC16,0:?"TIME:";TICK()/60:WAIT3:GOTO 125

BINARY ROOM on IchigoJam - get all numbers by characters A and B - 10 stage

Let's PLAY and CREATE!

Play Music with Computer / IchigoJam print in English

2017/03/08
#IchigoJam #music #english 

What's next steps after finishing to start IchigoJam programming with Cutlery Cards?
I've started to make the simple self-learning text "IchigoJam print" in English.
The first theme is sound and music!

Let's compose your rhythm with LED!


"Compose Music / PLAY"


"Make Sounds / BEEP"

There are on GitHub so anyone can rewrite and add.
"IchigoJam/print: IchigoJam print - GitHub"
Join us!

What's the Sound? Happy Hina-Festival Song in Japan

2017/03/03
#IchigoJam #music #english 

Today is Happy Hina-Festival(ひなまつり@ja) day!

This program plays a Japanese song of this festival.

PLAY"T84L8 $GGGFGGA-GGA-A-G4.R E-E-E-DE-E-GE-DDE-DC4.R A-16G16E-E-GGA-G4.R E-4DCDE-GA-GE-DC4.R"

Why do you hear the sound?

The sound is the wave of the air pressure. The wave waves your eardrum of ears.
The wave has a frequency.
The unit of frequescy is Helz(Hz). 1Hz means 1 wave per 1 second.
Mankind named 440 Hz is tone A(ラ@ja). If the frequency become doubles to 880 Hz, you will hear the higher tone A.

Reconnect the sounder to GND-OUT3, and type this command.

PWM 3,227/2,227

PWM (Pulse Width Modulation) is a IchigoJam command to output continuously pulses.
This setting is 2.27 milliseconds period (1/0.00227 = 440.529Hz).
You can select 2 base periods (OUT2-5 is group A, OUT6 is group B)

Try play 3 tones harmony on IchigoJam!

MIDI Random Rhythm Machine with KORG volca beats x IchigoJam

2017/01/19
#IchigoJam #MIDI #music #english 

IchigoJam can control any MIDI instrument easily!

volca beats x IchigoJam


How to connect MIDI and IchigoJam
1. Flip back the MIDI socket(¥60).
2. Solder the red jumper to 2nd from the left.
3. Solder the green jumper to 4th from the left.
4. Connect the red jumper to VCC of IchigoJam.
5. Connect the green jumper to TXD of IchigoJam.

MIDI is the UART serial communication with 31,250bps.

BPS 31250:?CHR$(#90,60,100);

This is the random rhythm machine program. It's very simple!

10 LET[0],36,38,43,50,42,46,39,75,67,49 20 BPS 31250:S=0 30 SRND S 40 FOR I=0 TO 7 50 ?CHR$(#99,[RND(10)],1); 60 WAIT 10 70 NEXT 80 K=INKEY():IF K S=K 90 GOTO 30

#99 means the tone of rhythm 10ch. The numbers of line 10 are volca beats's 10 sounds. (UART0 is a command to ignore sending via UART)

Try computer music with IchigoJam!

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像