今回からは、ラズパイで動かすサーバーを作ろうと思います。
作成するサーバーはMicrobit→ラズパイ→Midi音源で使用できる様に作成します。目的は「フリーハンドで音源を鳴らす仕組み」を作ることです。
早い話が、「マイクロビットから音源を鳴らしたい」ということです。
サーバーの用途
JavaのSocket Serverはマイクロビットからメッセージを受けてラズパイでMIDIメッセージを作成し、音源に送信するという形で使用します。
仕様について
- Javaサーバーでメッセージを受ける
- 受けたメッセージにより複数パターンのMIDIメッセージを作る
- 作成したMIDIメッセージをMIDI音源へ送信する
接続方法
マイクロビット ー ラズパイ
これは、Bluetoothで接続してメッセージを送受信する想定です。
ラズパイ ー MIDI音源
これはラズパイとMIDI音源をMIDIインターフェースで接続してメッセージの送信を行う想定です。
どうやって実現するか?
マイクロビットからメッセージを送信するのは問題なくいけそうです。このリンクを見て、シリアルデータの送信ができる様なのです、というか前に試しました。
なので、マイクロビット〜という部分は後回しにします。
まずは、Java Serverを作る
ここに至ります。Java Serverがこの仕組み(システム)の中核になるのでここから作成して行きます。
<起動する環境>
ラズパイ状で起動するので、コンパイル(ビルド)はラズパイ上でやる必要があります。なので以下の様な処理手順を踏みます。
- ラズパイでGithubにアップロードしたJavaファイルをダウンロード(PULL)してビルドする仕組みを作ってしまいます。
- Mavenを使用します。これのプラグインでJARファイルを出力する様に設定します。
- PC上で作成したJavaServerをGitにアップロード(PUSH)します。
- ラズパイを起動した時に、Githubからプルしてビルドをする様に起動スクリプトを作成します。
- そして、Java Serverを起動してマイクロビットからのメッセージを待機
Java Socket Server
サーバーと聞いて皆さんは何を想像するでしょうか?
サーバーはパソコンのことではなくアプリケーションのことです。入力を待機しているアプリケーションのことをサーバーと呼びます。
というわけで、マイクロビットからのメッセージを待機するサーバーを作るということで入力がマイクロビットから送られてくるもの(データ)なのでシリアルデータ(バイト配列)になります。マイクロビットのブロックコードではラジオカテゴリの中にあります。
そして、MIDIデータを作成し送信するというのがこのサーバーの役目になります。
まとめる
- ラズパイ上でJavaServerが起動する
- マイクロビットからシリアルデータが送信される
- シリアルデータを読み取り、MIDIメッセージを作成
- ラズパイに接続したMIDI音源にMIDIを送信する
こんな感じで動くものを作成するためにJavaで極小サーバーを作成します。低レベルAPIのSocketを使用するので処理内容などは自由自在に作ることができます。
逆に高レベルAPIの場合は中身はいじれないけど、決まった形の処理は簡単に作ることができます。
高レベルAPIと低レベルAPI
高レベルは人間に近く、低レベルは機械に近いという意味です。人間に近いということは、細かい処理などがひとまとまりになっています。
例えば、「DBサーバーにアクセスする」というのを1行実現することができる。この様なAPIは高レベルです。
逆に、「DBサーバーにアクセスするためにDBコネクションを取得するためのネットワークを検索する」という処理を行うAPIは低レベルなAPIです。
あくまで「Application Programing Interface」なのでjavaでいうなら「そのクラスは高レベルか?、低レベルか?」という違いでしかありません。話をするのに伝えやすいのでこのことを記載しました。
とりあえずSocket Serverを作る
今回は、少し長くなってしまったので次回作成します。
イントロダクション的なことを記載しました。
でわでわ。。。