Node.jsでJavaScript実行環境を作り「音ゲー」を試してみた

Node.jsのなんたるかをよくわからないまま使ってみました。MIDIキーボードで演奏の練習をしたかったので「musicope」アプリを動作させるためです。casioの「chordana play」から始まり、「synthesia」や「linthesia」も試しましたが一長一短だったのでいろいろ比べてみました。

# 短く言うと

:::note info
Node.jsをインストールしてJavaScriptの動作環境をつくることができました。
:::

:::note warn
「musicope」を動作させることができました。ただし、MIDIの設定がむずかしいので使いこなせそうにありません。
:::

これをlinux mintで動作させました。

https://www.youtube.com/watch?v=5cvRwDjSC7g


* 「ソフトウェアの管理」から「Nodejs」をインストール
* 「ソフトウェアの管理」から「Npm」をインストール
* 以下のサイトの「Code」をクリックしてリポジトリをzipファイルとしてダウンロード

https://github.com/oldrich-s/musicope

* zipファイルがdownloadディレクトリに保存されているので(例えば)ホームディレクトリに移動して展開
* お好みのmidファイルを./musicope-master/static/songs/ディレクトリに置く
* ./musicope-master/ディレクトリで以下のコマンドを実行

```:Terminal
$npm install
```

```:Terminal
$sudo npm start
```
* 「chromium」を立ち上げて「 http://localhost 」をURL入力窓に入力
* プレイするためにお好みのmidiタイトルをクリック

# はじめに

いわゆる「音ゲー」を使ってMIDIキーボード演奏の練習をしようと思いました。しかし、幼児でも演奏できるような「ドレミファソ」だけを使った曲を選ぼうとするとあまり都合の良いものが収録されていません。そこでmidファイルを自作して「音ゲー」に読み込ませると正規の収録曲ではないので挙動がおかしくなります。

これまでCasio「chordana Play(android版)」や「Synthesia(Windows版)」を使ってみました。より使いやすいアプリは ないかと探したところ「Linthesia」と「musicope」を見つけました。しかし、Linthesiaは2022年現在開発休止中でうまくインストールできない、musicopeは「Node.js」が必要。Node.jsってなんだ？となりましたがせっかくなのでNode.jsのなんたるかだけでも勉強して「musicope」を使ってみました。

# 今回の環境

* NEC LaVie LS350/A
* LK-S250 | Casiotone Keyboard |またはAkai professional MPK mini mk2
* Linux mint 20.3 Cinnamon
* 「chromium」Web Browser
* Git (optional)

# Node.jsとはなにか？→

を語れるほど私はくわしくありません。

「Node.jsはサーバサイドで動くJavaScript」[^1] なのだそうです。これは前提としてWebサーバとクライアントPCの存在を想定していると思われます。インターネットの向こう側にJavaScriptの動作環境があるといろいろと便利なことがあるのですね。

今回はすでにダウンロード済のリポジトリ(≒ソフトウェア)をウェブブラウザ上で実行することになるので__「Node.jsは~~サーバサイドで~~JavaScriptを実行できるようにしてくれるプラットフォーム」__[^1] ということになりそうです。WebサーバとクライアントPCの存在を端に置いておいたとしても、本来ウェブブラウザ上で実行するJavaScriptをPCで実行するほうが出来ることが多い、ということのようです。

[^1]: https://eng-entrance.com/what-is-nodejs

# Node.jsとnpmをインストール

JavaScriptの実行環境を構築するぞ！ということで以下の作業をします。Linux mintでは端末いらずで簡単にできます。

* 「ソフトウェアの管理」から「Nodejs」を検索してインストール
* 「ソフトウェアの管理」から「Npm」を検索してインストール

なお__「npmはNode.jsのパッケージ管理ツールです。
Pythonにおけるpip、Rubyにおけるgem(RubyGems)、Debianにおけるapt、MacにおけるHomebrew、Rustにおけるcargo。だいたいそんな感じです。」__[^2] 

[^2]: https://qiita.com/non_cal/items/a8fee0b7ad96e67713eb

# GitHubで「musicope」をダウンロード・インストール・実行する

クライアントサイドのJavaScript実行環境が整ったので、「musicope」を実行していきます。

* 以下のサイトの「Code」をクリックしてリポジトリをzipファイルとしてダウンロード

https://github.com/oldrich-s/musicope

* zipファイルがdownloadsディレクトリに保存されているのでホームディレクトリ(/home/ユーザ名/)に移動して展開→./musicope-master/ディレクトリと各種ファイルが展開される
* お好みのmidファイルを./musicope-master/static/songs/ディレクトリに置く
* ./musicope-master/ディレクトリで以下のコマンドを実行

```:Terminal
$npm install
```

```:Terminal
$sudo npm start
```
* 「chromium」を立ち上げて「 http://localhost 」をURL入力窓に入力
* プレイするためにお好みのmidiタイトルをクリック

と、ここまでは良かったのですがこのさきがとてもむずかしいです。

* QjackCtlとQsynthを使ってAKAI MPK mini MK2から音が出ることを確認
* 「musicope」の演奏に合わせてMIDIキーボード操作が出来ることを確認

:::note warn
私の環境では、「musicope」とMIDIキーボードから同時にMIDI信号が出るとPCから悲鳴のような音がでます。対応の方法がわかりません。
:::

# おわりに

使いこなしているわけではありませんがNode.jsを試せたのは良かったです。しかし、musicopeを使いこなせる感じがしませんでした。MIDIにまつわるハードウェア/ソフトウェアはともに設定が大変なので「感覚で操作できる」ものを見つけるのには時間がかかりそうです。

# 参考サイト

* Node.jsとは？

https://nodejs.org/ja/

https://ja.wikipedia.org/wiki/Node.js

https://qiita.com/non_cal/items/a8fee0b7ad96e67713eb

https://eng-entrance.com/what-is-nodejs

* Linuxの基本的なディレクトリ構成

https://oxynotes.com/?p=5987

https://magidropack.hatenablog.com/entry/2018/11/05/190523


__※引用について：下記サイトを改変のうえ引用しています。__