LoginSignup
3
2

More than 3 years have passed since last update.

node-red-contrib-midiをRaspberry Piにインストールするときにハマったこと

Posted at

node-red-contrib-midi

NODE-REDでMIDIが使えるのかなと思って検索したらnode-red-contrib-midiというノードを見つけたのでインストールしてみたのだが、一筋縄ではいかなかったので記録。

環境

  • Raspberry Pi 4 Model B
  • Raspbian buster
  • NODE-RED v1.1.3

インストール手順

普通にインストールしてみると失敗する

パレットの管理>ノードを追加 から midi で検索すると node-red-contrib-midi が出てくるのでここからインストールしてみる。

スクリーンショット 2020-08-14 0.35.57.png

しかし失敗。

install failed

ログの調査→libasound2-devのインストールが必要

ログを見てみる。

2020-08-13T15:26:49.876Z 追加 : node-red-contrib-midi 1.0.1

2020-08-13T15:26:49.903Z npm install --no-audit --no-update-notifier --save --save-prefix="~" --production node-red-contrib-midi@1.0.1
2020-08-13T15:27:06.398Z [out] 
2020-08-13T15:27:06.398Z [out] > midi@0.9.5 install /home/pi/.node-red/node_modules/midi
2020-08-13T15:27:06.398Z [out] > node-gyp rebuild
2020-08-13T15:27:06.398Z [out] 
2020-08-13T15:27:14.202Z [out] make: ディレクトリ '/home/pi/.node-red/node_modules/midi/build' に入ります
2020-08-13T15:27:14.205Z [out]   CXX(target) Release/obj.target/midi/src/node-midi.o
2020-08-13T15:27:14.509Z [err] In file included from ../src/node-midi.cpp:6:
2020-08-13T15:27:14.509Z [err] ../src/lib/RtMidi/RtMidi.cpp:1095:10: fatal error: alsa/asoundlib.h: そのようなファイルやディレクトリはありません
2020-08-13T15:27:14.509Z [err]  #include <alsa/asoundlib.h>
2020-08-13T15:27:14.509Z [err]           ^~~~~~~~~~~~~~~~~~
(以下略)

asoundlib.hが無いと怒られている。検索してみると、ALSAというLinux用サウンドドライバーの関係ファイルの模様。

もう一度よくログを見てみると、node-red-contrib-midi をインストールする中で midi というNode.jsモジュールをnpmでインストールしようとしている。

npmのmidiのページ を見ると、以下の記載がある。

Linux
A C++ compiler
You must have installed and configured ALSA. Without it this module will NOT build.
Install the libasound2-dev package.
Python (for node-gyp)

libasound2-devをインストールしろと書いてある。

libasound2-devをインストール後再試行→まだ失敗する

libasound2-devをインストールしてみる。

sudo apt update
sudo apt install libasound2-dev

再び パレットの管理>ノードを追加 から node-red-contrib-midi をインストールしてみる。

しかしまたもや失敗。

install failed

ログ調査→npmのmidiのバージョンが古いことが判明

ログを見てみる

2020-08-13T15:56:44.714Z 追加 : node-red-contrib-midi 1.0.1

2020-08-13T15:56:44.725Z npm install --no-audit --no-update-notifier --no-fund --save --save-prefix="~" --production node-red-contrib-midi@1.0.1
2020-08-13T15:56:53.480Z [out] 
2020-08-13T15:56:53.480Z [out] > midi@0.9.5 install /home/pi/.node-red/node_modules/midi
2020-08-13T15:56:53.480Z [out] > node-gyp rebuild
2020-08-13T15:56:53.480Z [out] 
2020-08-13T15:56:55.819Z [out] make: ディレクトリ '/home/pi/.node-red/node_modules/midi/build' に入ります
2020-08-13T15:56:55.821Z [out]   CXX(target) Release/obj.target/midi/src/node-midi.o
2020-08-13T15:56:57.282Z [err] In file included from ../src/node-midi.cpp:1:
2020-08-13T15:56:57.282Z [err] ../../nan/nan.h: In function ‘void Nan::AsyncQueueWorker(Nan::AsyncWorker*)’:
2020-08-13T15:56:57.282Z [err] ../../nan/nan.h:2298:62: warning: cast between incompatible function types from ‘void (*)(uv_work_t*)’ {aka ‘void (*)(uv_work_s*)’} to ‘uv_after_work_cb’ {aka ‘void (*)(uv_work_s*, int)’} [-Wcast-function-type]
2020-08-13T15:56:57.282Z [err]      , reinterpret_cast<uv_after_work_cb>(AsyncExecuteComplete)
2020-08-13T15:56:57.282Z [err]                                                               ^
2020-08-13T15:56:57.717Z [err] ../src/node-midi.cpp: At global scope:
2020-08-13T15:56:57.717Z [err] ../src/node-midi.cpp:14:26: error: ‘v8::Handle’ has not been declared
2020-08-13T15:56:57.717Z [err]      static void Init(v8::Handle<v8::Object> target)
2020-08-13T15:56:57.717Z [err]                           ^~~~~~

以前とエラーメッセージが変わっている。npm midiでエラーが出ているところは同じ。

npmのmidiのgithubのissueを見ていたら、https://github.com/justinlatimer/node-midi/issues/136 というのを発見した。内容を要約すると以下。

  • Node.jsのv12だとインストールができない
  • v1.0.0でこの問題を解決した

node-red-contrib-midiのインストール時のログにはmidi@0.9.5 install /home/pi/.node-red/node_modules/midiとあるのでnode-red-contrib-midiがv1.0.0を参照するようにすれば解決しそうな予感。

node-red-contrib-midiのpackage.jsonの修正後再試行→インストール成功

node-red-contrib-midiをgithubからローカルにクローンする

cd ~/.node-red
git clone https://github.com/urbiworx/node-red-contrib-midi.git

package.jsonを修正する

    "dependencies": {
-        "midi": "~0.9.5"
+        "midi": "~1.0.0"
    },

修正したnode-red-contrib-midiをインストールする

npm install ./node-red-contrib-midi

エラーなくインストールできました。

Node-REDを再起動する

node-red-restart

無事インストールされていました。

install success

おわりに

1つめのlibasound-devの件は、node-red-contrib-midiのREADMEにでも書いてあると良いのですが…

2つめのmidiのバージョンの件は、node-red-contrib-midiのgithubのプルリクエストを見たら、同じのがあった。
https://github.com/urbiworx/node-red-contrib-midi/pull/11
マージされれば2つ目の問題は発生しませんね。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2