‘あの楽器’ カテゴリーのアーカイブ

「あの楽器」演奏してみた

2009 年 2 月 20 日 金曜日


なぜ、演奏が遅いか。タッチから音が出るまでにワンテンポずれるので、連続的に操作しずらい。さらに、左のタクトスイッチを離してるのに、その音が出たり、押してるのに開放弦の音が出たりする。チャタリングぽい。

東京ミーティングからの改良点。

  • funnel サーバー入れてみた。ちょっとチャタリングは改善されたような気がする。
  • ソフトのマイナーバージョンアップ。キーセンスのタイミングを変更してみたりしたんだけど、あんま効果なし。

今後。

  1. タクトスイッチのところをタッチセンサーに変更。
  2. キーの数をもっと増やす。6弦5フレット は作りたい。
  3. キーセンスを別回路化して、Gainerの負荷を下げる?
  4. Gainerをやめて違うI/Oにする。(トラ技の2008年8月号の基板)
  5. ネックサイズの変更(普通、幅は4.5cmくらいらしい。この4.5cmに6弦を突っ込むのはいけるのか?)
  6. ネック背面に、リボンコントローラ配置(ベント他)。ボリューム配置(ポルタメント?)

なんてことを考えてるけど、しばらく休憩(笑)

リボンコントローラのテスト版をいくつか作ってみたんだけど、いまいち安定しないんだよね。funnelのフィルター機能でなんとかなるのかしら?

「あの楽器」東京ミーティング ~感想・反省~

2009 年 2 月 3 日 火曜日

というわけで参加してきました、「あの楽器」東京ミーティング。総勢100名以上。

詳しくは、上のリンクを見てもらうとして、こういう会に出るのは、だれかも言ってたけど魂が揺さぶられるのよね(その方は、「魂の共振」とおっしゃってました)。前回の名古屋ミーティングでも思ったのだけれど、自分も何かやりたいと思うのよね。「あの楽器」だけに限ったことではなく他の事でもね、みんな頑張ってるなぁと、俺なにやってんだろと。

だから、スベるの前提、スベってなんぼの発表を今回もしてきました(笑)

http://www.ustream.tv/recorded/1112543

「「あの楽器」から「俺の楽器」へ」。 なんだこのタイトル(笑)

いや、「あの楽器」をきっかけに、みんなが自分のやりかたで、「あの楽器」を作ったらそれはもう「俺の楽器」なんじゃないか。

なんてことを言おうと思ったんだけど、せっかく作ったやつの演奏を入れたら時間が足りないので、えれぇ中途半端な発表になってしまった(笑)

はしょるとこ間違えてるよね。俺。

んで 、ハード的な課題。

ボタンインターフェースで演奏は無理。いや、無理じゃないけど、ボタンサイズに影響うけて ギターの6弦が表現できないし、指が届かないっす。 リボンコトローラの導入が急がれる。

ずーっと気になってて、対応できてないのが、開放弦の表現。ボタンをどこも押してない状態を NoteOff に使ってるので、開放弦の場合のNoteOffの手段がない。ほんとは、マウスdown Up で NoteOffしたいんだけど、わたしのノートパソコンのペンの仕様上の問題で 実現できない。長押しが右ボタンクリックに割り当てられてるため、ボタンアップで、ダウンの情報も流れてくる。(なのでしょうがなく、弦側のボタンリリースでNoteOffにしてる)ドライバいじれるのかなぁこれ。。。

リボンコトローラ自体は、そんな難しい工作ではなさそう。「リボンコントローラ 自作」でぐぐると いっぱい出てくる。ちょっとしたアイディアも思いついたんで、これはいつかやるつもり。

毎回、こういう会の幹事さんをやってくれる方にはアタマが下がります。(以前60人規模のOFF会の幹事をやった経験から(笑))ありがとう。あなたがたのおかげで、今日のおいらがあります。

お疲れ様でした。

東京ミーティングに向けて その4 ~筐体(?)作成~

2009 年 2 月 3 日 火曜日

今から アクリル板仕入れて、切ってとかは全然間に合わないので、次のような計画で100円ショップで部品(?)調達。

計画図

計画図

計画図

調達品

平たいひも  2本

マジックテープ(ベルクロテープ)裏のり付き  3セット

キーホルダ用のわっか  2つ

ストラップ(古い鞄から取り外してきた)  1つ

平たいひもをサイズに合わせて切って、マジックテープを貼り付ける。

板にも ノートパソコンの幅で マジックテープを貼り付ける。

ひも&テープ

ひも&テープ

これを ノートパソコンにセット

ノートパソコンに巻き付け

ノートパソコンに巻き付け

さらに板をはりつけ。

板を貼り付け

板を貼り付け

ストラップをつけたら できあがり。

できあがり。

できあがり。

テスト演奏(?)演奏になってないかみょ(笑)

演奏中

演奏中

というわけで、

できあがったのが、当日 AM7:00 慌ててシャワー浴びて、おでかけ。

  1. エフェクト作成。
  2. 音出し作成。(単音、和音)
  3. 音階ボタン作成。
  4. 音階ボタンから音生成。
  5. (今ここ→)筐体作成。
  6. 完成。

東京ミーティングに向けて その3 ~プログラム作成~

2009 年 2 月 3 日 火曜日

ハードは作ったんで、プログラム作成。

このへんで作った Effectクラス と、 このへんで作った、rwmidi のラッパークラスをそのまま流用。これに、キー入力の処理用クラスを追加して、プログラムの作成。

言語はいつもの通りprocessing。色々切り替え用のスイッチを書きかけた残骸が残ってたりするけど、まぁソース公開しときます。

こちらから必要な方はどうぞ。rwmidi のラッパークラスとか、このまま使えるんじゃないかな?あそうそう rwmidi はパッチあててるんでこのページの下のほうにあるリンクから持って行ってね。

  1. エフェクト作成。
  2. 音出し作成。(単音、和音)
  3. 音階ボタン作成。
  4. (今ここ→)音階ボタンから音生成。
  5. 筐体作成。
  6. 完成。

東京ミーティングに向けて その2 ~スイッチボードの作成~

2009 年 2 月 3 日 火曜日

前回、キーマトリックスがNGだと わかったので、あとは、単純にキーを半田付けしていくだけ。

まずは、部品配置の検討。

部品配置の検討

部品配置の検討

机が汚いのは 気にしない(笑)

スイッチを差し込んで半田付け、まずは背の低い部品から。って スイッチなんだけどね。

半田付け

半田付け

部品の半田付けのみ完了。しばし、タバコ休憩。

続けて、配線の作業が待っている。

部品の半田付け完了

部品の半田付け完了

続けて配線の半田付け。

配線の半田付け

配線の半田付け

いっぱい配線して 心が折れそうになる。。。

指が届かないので、基板の下側をカッターで切り取る。(先にやっとけばよかった、切り口がたがた)

木の板に木ねじで止めて、ここは完成。

スイッチボード完成

スイッチボード完成

上の写真で、右上すみが、din0 左へ din1、din2 と続いて、左下がdin15。簡単なテストプログラムを書いて、配線ミスがないか確認。OK。

ここまでで、約4時間。よくがんばった(笑)

東京ミーティングに向けて その1 ~プラン・テスト~

2009 年 2 月 3 日 火曜日

「あの楽器」東京ミーティングが、2/1に開催される。

思わず、ライトニングトークでの発表を申し込んでしまった。実は、このBlogを始めたのも、processingで、プログラム書いたのも、全部このため。

まずは、どこまでやるかプランニング。最終形態では、アクリルボードを切って、筐体作って、ネック部分にボタンつけて、ノートパソコン突っ込んで、、、というのを想定。

東京ミーティングには、最終形態は間に合いそうにないので、ボタン+木の板をノートパソコンにくっつけて出品の予定。

まずは、ボタンスイッチのテスト。スイッチをマトリックスに組んで、+5Vを ROW行に順番に加えて、COL列で読み取り。という処理をすると、たとえば4x4=16キーの状態を 8bit で 取り込むことができる。これをgainerで実現できるかテスト。

まず、次のような回路で、2×2のマトリックスを ブレッドボードに組んでテスト。

2x2マトリックス回路図

2x2マトリックス回路図

プログラムは、以下のように作成。

void draw() {
background( 120 );

gainer.setHigh( 0 );
gainer.setLow( 1 );
gainer.peekDigitalInput();

boolean in0 = gainer.digitalInput[0];
boolean in1 = gainer.digitalInput[1];
text( “0=”+in0, 15, 40 );
text( “1=”+in1, 215, 40 );

gainer.setHigh( 1 );
gainer.setLow( 0 );
gainer.peekDigitalInput();

//
in0 = gainer.digitalInput[0];
in1 = gainer.digitalInput[1];
text( ” 0=”+in0, 15, 90 );
text( ” 1=”+in1, 215, 90 );

}

で、テストラン してみたんだけど、、、

だめだ orz スイッチが いずれも押されてないときは、当たり前だけどOK。スイッチ押したとたん、入力が不安定に。これはどうも、Outputタイミングと、Inputタイミングがプログラムに書いた通りに実行されてない模様。setHigh、setLow して直後に peek しても、タイミングが間に合う時と間に合わない時があるみたいで、入力した値がボロボロです。

しょうがないので、gainerを MODE5(全16ピンデジタル入力)にして、スイッチを入力1つにつき1個というふうに配置するしかないです。おまけで、3軸センサーとかつける計画だったのに、全然無理。

回路図省略。入力ピンに キー1個(笑)

次は、スイッチ作成。

DelayLamaをつなげる ~「あの楽器」で DelayLama~

2009 年 1 月 30 日 金曜日

ちょっと お遊びで、Applet に DelayLamaをつなげてみた。

DelayLamaは、最近(ってもう古いか(笑))はやりの、僧侶が歌うっていう VSTiプラグイン。坊歌ロイドとか言われてたりする。

準備するもの。

DelayLama:->http://www.audionerdz.com/ のダウンロードページからWindows用のファイルを落としてください。落としたファイルを適当なディレクトリに展開。

VSTHOST->DelayLama に MIDI IN をつけるためのソフト http://www.forest.impress.co.jp/article/2006/11/08/vsthost.html http://www.hermannseib.com/english/vsthost.htm Synth1 っていうフリーのシンセサイザを使おうと思って入れたソフト。適当なディレクトリに展開。

MIDIYork:->VSTHOSTだけじゃ同じマシン上のシーケンサのMIDIOutを受け取ってくれないので、パイプ役をするソフト。http://www.midiox.com/index.htm?http://www.midiox.com/myoke.htm。ダウンロードして Install。再起動が必要です。

まず、VHOSTを起動して、メニューのFile -> NewPlugin をクリックして、展開したDelayLamaのディレクトリの下にある、Delay Lama.dll を指定して OK すると、ちっさい窓ができます。その窓のつまみのアイコン(PluginEdit)をクリックすると僧侶の絵が出ます。

Deviceメニュー -> MIDI から、InputDevice に MIDIYork 1 を選んでください。

これで 準備完了です。

ここを開いて、左上すみをクリックして、出力デバイスに MIDIYork1を選んでください。それで、ピアノロールをクリックしてドラッグしてみてください。

この方法を使うと、有料のシーケンスソフトでなくても、VSTプラグインが使えます。

これで今日からあなたも僧侶ーズ(笑)

音出し その3 和音

2009 年 1 月 29 日 木曜日

和音に挑戦。

和音の並び、画面構成は @きよし 様 作成  MIDI Chord Helper参考にしました。 パクリました(^^;

とりあえず試したいかたはこちら

使い方:

  1. 上のコード表を クリックすると和音が出ます。sus4欄は 下のコード+sus4 です。
  2. コード表のコードは適当に並んでいるわけではありません。
  3. shiftキーで7th、ctrlキーでM7th、altキーで6th になります。(ウソかもしれない)
  4. コード生成方法が適当です。本来は上に並んでる b#の数(キー(調))によって、音をオクターブ移動したりしないといけないはずなんですが、してません。(誰かルール教えて(´・ω・`))
  5. ピアノロールは、そのままクリックすると単音が出ます。Shiftキーと一緒にクリックすると、メジャー和音が出ます。
  6. 左上デバイスの変更、音色(Program)の変更は今まで通りですが、音色は番号だけじゃなくて名前を表示するようにしました。右ボタンで逆順に変化します。
  7. Effect は、緑の画面エフェクトのOn/Off です。Onにすると、背景が黒くなり、例のエフェクトが出ます。
  8. Octave はオクターブの移動です。ピアノロールのC の位置にオクターブ表示があります。左クリックで オクターブが上がり、右クリックで下がります。

あくまで、和音は適当なので、ご注意ください。

※このアプレットのソースコードの公開予定はありません。


以前、ニコニコ技術部で、@きよし さん の「あの楽器?でInnocenceをコード演奏してみた」を見たときから、これは すごいと思っていて、「あの楽器」を作るときは絶対このやりかたを使おうと心に決めていました。
<a href=”http://www.nicovideo.jp/watch/sm5733724″ mce_href=”http://www.nicovideo.jp/watch/sm5733724″>【ニコニコ動画】あの楽器?でInnocenceをコード演奏してみた</a>
で、実際にproce55ingで作ってみたのが こちらです。

しかし、音楽理論がさっぱりわからん。今回、実際に実装したコードの生成方法は次の通り、

3和音のトニック、ドミナント、サブドミナントの生成方法。

  • トニック:ベース音コード名の音(C ならド)。
  • ドミナント:トニックの3度上の音(MIDI Pitch で トニック+4)
  • サブドミナント:トニックの5度上の音(MIDI Pitch で トニック+7)
  • マイナーの場合、ドミナントを MIDI Pitch で -1
  • sus4 の場合、ドミナントをMIDI Pitchで +1

さらに、7th等の生成

  • 7thは、3和音に、短7度上の音を加える。(MIDI Pitch で トニック+10)
  • M7thは、3和音に、長7度上の音を加える。(MIDI Pitch で トニック+11)
  • 6thは、3和音に、短6度上の音を加える。(MIDI Pitch で トニック+9)

という非常に簡単な方法で 行っています。

コードはこんな感じ

int[] makeCode(int base, int mFlg, int numFlg, int shpNum ){
int[] pitches= new int[4];
// 基本3和音
pitches[0] = base;
pitches[1] = base+4;
pitches[2] = base+7;
pitches[3] = -1;
// マイナー
if( mFlg == 1 ){
pitches[1] = pitches[1] -1;
}
// sus4
if( mFlg == 2 ){
pitches[1] = pitches[1] +1;
}
// add
if( numFlg == 6 ){  // 6th
pitches[3] = base+9;
}
if( numFlg == 7 ){  // 7th
pitches[3] = base+10;
}
if( numFlg == 8 ){  // M7th
pitches[3] = base+11;
}
if( numFlg == 9 ){  // 9th
pitches[3] = base+14;
}
return pitches;
}

ほんとうは、サブドミナント音を オクターブ下にもっていったり4和音目を オクターブ下にもっていったり しなきゃいけないはずなんだけど、さっぱりわからん。

このへんは、音楽の詳しいひとに教わりたいなぁ。誰か教えてください。

音出しその2 PitchBend

2009 年 1 月 27 日 火曜日

PitchBend 解決。お試しはこちら。横ドラッグで、PitchBend。

PitchBend できないのかなぁ と 色々さぐってたら。

私 大きな勘違いしてたようです。PitchBendは エクスクルーシブメッセージじゃなくて、イベントメッセージじゃないですかっ! ControllChange なんかより上のレベルでした。なんか変だと思った。

NoteOnとか、ControllChangeとかと同じレベルに実装されてなきゃいけないものでした。ということは、ない。PitchBendがない。MidiOutput クラスに、sendPtichBendとかいうメソッドが実装されてないといけないはず。

ないものは作ってしまえというわけで、rwmidi ライブラリに手を入れました。

MidiEvent.java   に、PitchBend イベントを追加

public static final int PROGRAM_CHANGE = 0xC0;
public static final int PITCH_BEND = 0xE0;

PitchBend イベントの イベントコードは 0xE0

MidiOutput.java に sendPitchBend メソッドを追加。

/**
* Send a Pitch Bend on this output
* @param channel Channel on which to send the message
* @param value Program Change value
* @return 1 on success, 0 on error
*/
public int sendPitchBend(int channel, int value) {
ShortMessage msg = new ShortMessage();
try {
int bb = value & 0×7f;
int ub = value >> 7;
msg.setMessage(MidiEvent.PITCH_BEND, channel, bb, ub);
receiver.send(msg, -1);
return 1;
} catch (InvalidMidiDataException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return 0;
}
}

これで 0~16383 の範囲の数字で 正常動作するはず。

processingの mouseDragged イベントにコード追加。

void mouseDragged() {
// Xdrag で Bent
print( “mouse dragged ” );
int bend = (mouseX - org_mouseX)*8+8192;
if( bend<0 ){ bend=0; }
if( bend>16383 ){ bend=16383; }
println( bend );
output.sendPitchBend( ch_s, bend );

これで 実行。 をぉ いい感じ。横ドラッグで、PitchBendがかかってる~。

ただ、これも NoteOn 時に リセットしてやらないと ダメな感じ。

それも実装。

mousePressedイベント

output.sendPitchBend( ch_s, 8192 );
output.sendController( ch_s, 11, vel_s );
output.sendNoteOn( ch_s, pit_s, vel_s);

8192 と マジックナンバー書いてしまったけど、まぁ いいかな。8192が センターだし、これでよしとしよう。

お試しは、こちら。 はぁ、よかったよかった。

rwmidi <たろう>Patch の バイナリ(jarファイル)は こちら。ソースはこちら。いずれも、解凍して 使ってください。

音出し

2009 年 1 月 27 日 火曜日

あの楽器の画面エフェクトが とりあえず終わった(?)ので次は音出しの実装。

とりあえず試したいひとは こちら

  • 縦にドラッグすると音量が変化します。Windowsの方は、ボリュームの画面で SWシンセサイザのボリュームを最大にしておいてください。
  • 左上のメッセージは、上の段が、MIDIOUTのデバイス名、下の段がプログラム番号(音色)です。それぞれの文字の 左端をクリックすると デバイス名、プログラム番号が変化します。

音出しはMidiOutに依存する。さっそく processing用のMIDIライブラリをグーグル様に問い合わせると、ありました proMIDI。sampleがついてたので色々ためす。おお音が出る。いいぞいいぞ。。。。

あれ sendNote はあるけど、NoteOn NoteOff が 送信できないじゃないですか。これはいけません。ピアノみたいに 音が減衰するやつはいいけど、オルガンみたいな鳴りっぱなしの音を人の操作で止める方法がない。それに和音の実装ができないですなこれじゃ。和音はNoteOnをまとめて送って、NoteOff するって実装になるはず。ありゃ、これは使えないです。

どうやら、これはMIDI Inでイベントを取るのを主目的にしたライブラリの模様。このライブラリの利用は断念。

では 次はと、グーグル様に問い合わせると、RWMidiいいよ とのこと、ダウンロードはこちら。これには NoteOn NoteOff があるのを確認。でも sample、ドキュメントがいまいち不親切と感じた。

ともあれ 実装開始。

import rwmidi.*;
MidiOutput output;
int ch_s = 0;
int pit_s = 60;
int vel_s = 100;

int program_s;
int device_s;

NoteOff へ NoteOn時の情報を渡すための変数を 設定。なんか初期化してあるけど、気にしない(笑) プログラムナンバー、デバイスナンバーもとりあえず保存する。将来、切り替えられるようにね(^^

void setup() {
size( 800,380 );
device_s = 0;
program_s = 0;
output = RWMidi.getOutputDevices()[device_s].createOutput();
output.sendProgramChange(program_s);
println( output.getName() );
}

画面、デバイスNo,プログラムNo とか初期値設定して MidiOutputを作成して、プログラムNoを送っておく。

音出しするだけなら、draw は 何もかかなくて OK。実際は、前回のEffectテストに追加して書いてます。

Mouseのクリックで 音出し開始。とりあえず Volmeの変化はなしの方向で。

void mousePressed() {
// mouseX, mouseY
println( “mouse pressed” );

org_mouseX = mouseX;
org_mouseY = mouseY;
// Midi Out
int iw;
iw = int( width / 24 );
pit_s = 60 + int( mouseX/iw );
//
output.sendNoteOn( ch_s, pit_s, vel_s);
}

mousePressed イベントに記述。org_mouseX,org_mouseY は将来ドラッグして ベロシティの変化とか、ピッチベントに使うので、保存しておく。

まずは、画面の幅を24(2オクターブ幅)で割って、mouseXの位置からPitch(音階)を生成。チャンネル、ベロシティはデフォ値そのまま。で NoteOn!

次はNoteOffを送信。

void mouseReleased() {
println( “mouse released” );
output.sendNoteOff( ch_s, pit_s, vel_s);
}

mouseRelase イベントで NoteOffを送信。 それだけ。

これで 音出しテスト。おお 結構いけてるよこれ。ソース上で プログラムNoを書き換えて音を変更してみる。 OkOk いい感じ。和音もいけるかテスト、3つのNoteOnを書いて、NoteOffを送信。いけてるーー。和音はひとまず外してっと。

こうなると、音量、ピッチベンド つけたくなるよねえ。

※以下のPitchBendの項目勘違いしてます。次の記事参照。

マウスドラッグのイベントで 変更するメッセージ流せばいいんじゃね?

Midiシーケンサ(Cherry)立ち上げて、PitchBendの番号を調べる。153 ね。データの範囲は-8192 ~ +8191 ねぇ。なんか 広いなぁ。

で、とりあえず。Mouseドラッグに 適当に実装。

void mouseDragged() {
// Xdrag で Bent
print( “mouse dragged ” );
println( (mouseX - org_mouseX)*8 );
output.sendController( ch_s, 153, (mouseX - org_mouseX)*8 );
}

まだ、テスト段階だから、適当にマジックナンバー割り当てと。ほい実行。わっ思いっきりエラーだ。なになに、153 が値を超えてる?なんじゃこりゃ と思って調べてみると、

  1. sendoControllerメソッドで扱えるのは 127 までの#CC(コントロールコードの略らしい)
  2. それを越えると、sendSysExメソッドで エクスクルーシブメッセージを自分で作らないといけないらしい。
  3. MIDIのサイトをいくつかめぐってみたが、メッセージの作り方がよくわからん。0xF0で始まって0xF7 で終わるメッセージらしいんだけど、間にメーカーコードとか 入れないといけないようだ。わからんorz。
  4. よさげなサンプルがないかと さぐってみたけどまだ見つけられない。
  5. JavaMIDIのサンプルをさぐってみたほうがいいかもしれない。

ピッチベンドは後回し決定。

※このPitchBendの項目勘違いしてます。次の記事参照。

じゃあ 縦ドラッグで、Volume変更だ。というわけで イベント書いてみた。

void mouseDragged() {

// Ydrag で Volume…
int v = vel_s - ( org_mouseY-mouseY );
if( 0 <= v && v<128 ){
output.sendController( ch_s, 7, v );
}
}

あれ だめじゃん。次のNoteOnのVolumeまで影響してるよ。

調べてみると、ふつう、NoteOn中の音量調整は、11.Expressionでやるらしい。なるほど。で sendController の 7を11 にして 実行。 あれ やっぱりVolume変更の情報残ってるよ(´・ω・`)

じゃ NoteOnの直前に 11.Expression 戻してみるか。

というわけで、実際の実装

mousePressed

output.sendController( ch_s, 11, vel_s );
output.sendNoteOn( ch_s, pit_s, vel_s);

sendNoteOn の前に Expression を リセット

mouseDragged

// Ydrag で Volume…
v = vel_s - int(( org_mouseY-mouseY )/4);
if( v < 0 ){ v=0; }
if( v > 127 ){ v=127; }
output.sendController( ch_s, 11, v );

}

変化の範囲を 1/4 にして、ドラッグの範囲を広げた、値が Expressionの範囲を越えたら 最大値、最小値にする。(ドラッグ処理落ちの対応)

なんとなく いい感じじゃない? これは採用。

で、デバイスの変更と、プログラム(音色)の変更を実装。

mousePressed

if( mouseX<100 && mouseY<40 ){
if( mouseY<20 ){
output.closeMidi();
device_s = device_s+1;
if( device_s >= RWMidi.getOutputDevices().length ){
device_s=0;
}
output = RWMidi.getOutputDevices()[device_s].createOutput();
println( output.getName() );
int retx = output.sendProgramChange(program_s);
} else {
program_s = program_s+1;
int retx = output.sendProgramChange(program_s);
}
} else {

左上 100*40 の範囲は コントロール用。上のクリックで デバイスを変更。注意点は、変更する場合は、一旦閉じないといけないということ。 output.closeMidi()を忘れないでね。getOutPutDevices で デバイスの配列がとれます。クリックが配列数をオーバーしないように処理しています。プログラムNoは、チェックしてないです。127 越えたら 0 にするような処理が必要ですね。Applet には 実装。

あとは、演奏中のデバイス名と、プログラムNoを表示するようにして完成。

※このへんは ソース見てください。Applet画面に ソースへのリンクがあります。

単音 音出し、完了。試してみたい方はここ

  1. エフェクト作成。
  2. (今ここ→)音出し作成。(単音、和音)
  3. 音階ボタン作成。
  4. 音階ボタンから音生成。
  5. 筐体作成。
  6. 完成。