人気ブログランキング | 話題のタグを見る

Tullyz bis /R-D1ときどきM

Volumioにハード・ボリュームを付ける

Raspberry Piの音楽サーバーVolumioをインターネットラジオに使っている。
電源を入れるだけでいつもの放送局につながり曲が流れる。Volumioと
組み合わせているUSB DACアンプ(DigiFi No.13の付録)にはボリュームが無いので
スマホやPCでVolumioにアクセスしてWeb画面で選曲やボリューム調整を行う。
便利なのだが、困るのがスマホを使わないとボリュームが下げられないことだ。
音楽をかけっぱなしで庭に出たりするので、家人から音楽を止めてから出ろといわれる。

ハード的なボリュームを付けられないかと、先日紹介したGriffin PowerMate
(USB型ボリューム・ノブ)を検討していた。
いろいろやったのだが、node-hidモジュールがどうしてもPowerMateを認識してくれない。
しかたがないのでコンパクトマウスのホイールで代用することにした。
(PowerMateは完全にWindows専用のボリュームになった^^;)
マウスのボタンは特に要らないのだが、一応、停止と再生もできるようにした。



Volumioにハード・ボリュームを付ける_d0108132_13045118.jpg


こんなJavascriptコードで動いてます。

node-mouse、input-event、socket.io-client モジュールを事前にインストールしてから
Node.jsで起動させる。

node forever start click.js などとして自動起動させる。

[click.jsのコード]


var Mouse = require('node-mouse');
var mouseDevice = new Mouse();

var InputEvent = require('input-event');

var io=require('socket.io-client');
var socket= io.connect('http://localhost:3000');

// set initial volume value
var vol = 3 ;
socket.emit('volume', vol);

// find # of mouse event
const execSync = require('child_process').execSync;
const result = execSync('cat /proc/bus/input/devices | grep mouse0').toString();
n = result.indexOf("event")
var a = result.substring(n+5, n+6)
var input = new InputEvent('/dev/input/event'+a);

var eventDevice = new InputEvent.Mouse(input);


// Create play lists if empty
socket.emit('listPlaylist');
socket.on('pushListPlaylist', function(data) {
if (data.length == 0) {

socket.emit('createPlaylist',{"name":"Venice Classic Radio"});
socket.emit('addToPlaylist',{
"name":"Venice Classic Radio",
"service":"webradio",
"uri":"https://uk2.streamingpulse.com/ssl/vcr1"
});
socket.emit('createPlaylist',{"name":"Capital FM"});
socket.emit('addToPlaylist',{
"name":"Capital FM",
"service":"webradio",
"uri":"https://media-ssl.musicradio.com/Capital"
});

}
});

var playstate = 1 ;

mouseDevice.on('click', function(e){
if (e.button === 0) {
// console.log("left click");
socket.emit('playPlaylist',{name:"Venice Classic Radio"});
}
if (e.button === 2) {
// console.log("right click");
socket.emit('playPlaylist',{name:"Capital FM"});
}
if (e.button === 1) {
// console.log("wheel click");
// socket.emit('prev');
// socket.emit('next');
if (playstate == 1) {
socket.emit('pause');
playstate = 0
}
else {
socket.emit('play');
playstate = 1
}
}
});

// volume setting
eventDevice.on('wheel', e => {
var direction = e.value === 1 ? 1 : -1
// get current volume value
socket.emit('getState', '');
socket.on('pushState', function(data) {
vol = data.volume ;
});
vol = vol + direction ;
// volume limitter
if (vol < 0) vol = 0 ;
if (vol > 50) vol = 50 ;
socket.emit('volume', vol);
})





いろんな方のコードを拝借しています^^;
https://volumio.org/forum/few-useful-node-scripts-t6247.html
https://volumio.org/forum/need-example-usage-getstate-websocket-t5813.html
https://senyoltw.hatenablog.jp/?page=1482403678
http://web09.hatenablog.com/entry/physical-btn-20170302
https://qiita.com/uiureo/items/a4158939e605b2b0c501
など

【追記】
一部の仕様を変更した。(左右クリックで2つのチャネルを選ぶ)

【PowerMateでも動きました】

VolumioのForumにもまとめの記事を書いておいた
https://forum.volumio.org/volume-control-using-wheel-mouse-t12007.html
Powermateに関しては以下のスレッドに記載。
https://forum.volumio.org/griffin-powermate-t599-20.html


【追記 2020/1/6】【追記 2022/5/21】
マウスホィールで音量調整、左クリックでCapitalFM、右クリックでVenice Classicを再生する
https://tullyz.exblog.jp/27084699/

必要なモジュールをインストールする
sudo su
# npm install node-mouse
# npm install socket.io-client@2.3.1
# npm install input-event
# npm install -g forever@3.0.4
# npm install --save-dev webpack-remove-debug

/home/volumio/ に click.jsをコピー。
(teratermにドロップしてSCPをクリックしてコピーすると早い)

/lib/node_modules/forever/bin/forever start /home/volumio/click.js  で実行してみる。
node /home/volumio/click.js &  で実行してみる。

動作確認出来たら、再起動時に立ち上げるために、/etc/rc.local にnodeコマンドを書く
#nano /etc/rc.local
以下をexit 0の直前にコピペ
/lib/node_modules/forever/bin/forever start /home/volumio/click.js
node /home/volumio/click.js &

【追記 2020/1/11】
USB機器の接続状態によって変わるマウスのevent番号を自動で検出するようにした



【追記 2020/2/11】【一部修正 2021/10/1】【一部修正 2023/7/19
*** 通常はここからお読みください ***
root権限でgitが使えなくなってしまったので、手順を一部修正

いちいちファイルをコピーしたりするのが面倒なので、シェルスクリプトを書いた。
以下の操作をするだけで、マウスがボリュームになるはず。
ラズパイzeroだと4つのライブラリーをインストールするのに3分くらいかかるので
気長に待ってください。

http://volumio.local/DEV などとして、VolumioのSSHを有効(enable)にする。
Tera Termなどを使ってvolumioでログインする。 (パスワードのディフォルトはvolumio)
マウスをラズベリーパイに挿しておきます。

volumio@volumio:~$ apt-get update

volumio@volumio:~$ git clone https://github.com/tullyz/mouse-volume
(注: 'fatal: destination path 'mouse-volume' already exists and is not an empty directory.'
というエラーが出たら、
sudo su
rm -r mouse-volume
を実行し、再度やってみる)
volumio@volumio:~$ cd mouse-volume
volumio@volumio:~$ chmod u+x setup.sh
volumio@volumio:~$ sudo su (パスワードを入れる ディフォルトはvolumio)
# ./setup.sh

終わったら再起動します。


仕様:
マウスのホイールで音量を調整する
マウスのホイールが押されたらpause/playをトグルする
左クリックでVenice Classic Radioを選局
右クリックでCapital Londonを選局
起動時にこのソフトを起動する

初期音量は3、最大音量は50にしてあるので、
変更したい時は /home/volumio/mouse-volume/index.js の数値を変更してください。
パワーオンで再生させたいときは、Plugins>Miscellanea のAutoStartをインストールしてください。
前述のセットアップ用のシェルスクリプトを実行するだけで AutoStartを有効にするようにした。

【動作確認 2021/1/23@volumio-2.861】
socket.io-clientモジュールが2.3.1から3.xに最近変更されていました。旧バージョン(2.3.1)を
インストールするようにしました。

【Capital FMのURL変更? 2021/8/31】
Capital FMを聴きたい人がいるのかどうか知らないけれど、
最近、サーバーが変わったようなので、もし音が途切れるようならこのURLに替えてみてね。
https://media-ssl.musicradio.com/Capital

【動作確認 2021/10/1@volumio-2.915
foreverがいつのまにかアップデートされたようで自動起動できなくなっていたので rc.local や setup.sh を修正。


【動作確認 2021/12/8@volumio-3.165】
warningはいろいろ出ますが、一応動いているようです。
Volumio3は Plug-in を有償化してしまったのでAutoStartが使えなくなってしまった。
その対応方法はこちら。
Volumio3 に AutoStart (自動再生)を付ける
https://tullyz4.exblog.jp/30871273/

【Venice Classic RadioのURL変更 2022/4/8】
Venice Classic Radioを聴きたい人がいるのかどうか知らないけれど、
最近、サーバーが変わったようなので変更。
https://uk2.streamingpulse.com/ssl/vcr1
playlistを空にしてからでないと、新しいplaylistは作られません。


【動作確認 2022/5/21@volumio-3.251】
socket.io-client@2.3.1が起動しないので、次のおまじないをします。
npm install --save-dev webpack-remove-debug
前述のセットアップ用のシェルスクリプトにも追記した。

【仕様変更 2022/5/22
Volumio3 に AutoStart (自動再生)を付けた。
前述のセットアップ用のシェルスクリプトを実行するだけで AutoStartを有効にするようにした。

【動作確認 2022/12/08@volumio-3.396
インストールでいろいろワーニングやエラーは出るが古いライブラリーを使っているので気にしないでください^^;
基本的には従来通り動きます。

補足すると、再生機器によっては次のような設定変更が必要かもしれません。
[プレイバックオプション]の
[音量オプション]で
 [Mixer Type]を[Software]
 [最大音量レベル]を適当に設定、
 [保存]します。

また、再起動するとSSHポートがふさがれしまうので、あとで初期音量の変更などをしたいときは、
http://volumio.local/DEV などとして、VolumioのSSHを有効(enable)にすると、
Tera TermなどでVolumioにログインできます。
(volumioはセットアップで自分がつけた名前に変更すること)

【動作確認 2023/5/1@volumio-3.449
インストールでいろいろワーニングやエラーは出るが古いライブラリーを使っているので気にしないでください^^;
基本的には従来通り動きます。
インストール時にマウスが差してないとエラーで止まります。
マウスを差してから、再度
./setup.sh
してください。


【動作確認 2023/7/19@volumio-3.512
何故かroot権限でgitが使えなくなってしまったので、前述の手順の一部を修正。 
ユーザー名volumioでgitを使ってファイルをダウンロードした後、
バッチファイルsetup.shを実行する直前にsudo suを行い、
root権限でソフトをインストールします。



.

by tullyz1 | 2018-04-06 14:55