池の上にも

平均以下の理解力で、色々アウトプットしてみるブログ

Spotify + Mopidy でカラオケしてみた

以前に手元の Lubuntu で Spotify を再生できるように、Mopidy をインストールしてみました。

tawaku.hatenablog.com

設定いじって色々できないか探してみたところ、GStreamer というマルチメディアのフレームワークの設定を変えて、簡単なカラオケができそうです。

GStreamer pipeline

Mopidy では、GStreamer を使って音を再生しています。
Mopidy のチュートリアルにもあるのですが、まずは GStreamer で音が再生できるか確認してみます。Mopidy で音楽が聞けている場合は、音がなるはずです。

$ gst-launch-1.0 audiotestsrc ! audioresample ! autoaudiosink


Mopidy のデフォルトでは、音の再生にautoaudiosinkが使われています。それで音をいじれないか探してみたところ、audiokaraokeというものを見つけました。


audiokaraoke: GStreamer Good Plugins 1.0 Plugins Reference Manual

センタチャネルをフィルタして、音楽から音声を取り除けるそうです。センタチャネルがなにか分かってないですが、効果は楽しそうです。

まずは、サンプルでaudiokaraokeが再生可能か確認してみます。

$ gst-inspect-1.0 | grep -i "karaoke"
audiofx:  audiokaraoke: AudioKaraoke

$ gst-launch-1.0 audiotestsrc ! audioresample ! audiokaraoke ! autoaudiosink


再生できたら、Mopidy に設定してみます。

Mopidy に audiokaraoke を設定する

[audio] セクションのoutputに、GStreamer のパイプラインを設定できます。

$ vim /usr/share/mopidy/conf.d/mopidy.conf

[audio]
output = audiokaraoke ! autoaudiosink


Mopidy を再起動して、音楽を再生してみます。サンプルが載せられないですが、ボーカルがコーラスみたいになってカラオケっぽくなっています。

課題

以下の2点が不満で、暇があれば改善したいです。

  • カラオケなので歌詞が欲しかったですが、適当な Extension が見つからなかった
  • カラオケを止める時は一々設定を書き換えて、Mopidy を再起動しないといけない

Mopidy で Spotify を聴いてみた

Lubuntu で音楽聴きたいので、探してみたらこんなのありました。

github.com

インストール環境

Mopidy とは

Python ベースの Music Server とのことで、ローカルの音楽ファイルを再生できるし、Extension を使うことで Spotify とかクラウド上の音楽サービスを再生できるとのこと。

Mopidy に加えて、Mopidy Spotify という Extension を入れて Spotify を聴けるようにします。

github.com

なお、Mopidy SpotifySpotify プレミアムアカウントでないと正しく動かないみたいです。

Mopidy インストール

まずはリポジトリを登録します。

$ wget -q -O - https://apt.mopidy.com/mopidy.gpg | sudo apt-key add -
$ sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/jessie.list

$ sudo apt update


次にパッケージをインストールします。

$ sudo apt install mopidy
$ sudo apt install mopidy-spotify


最後に関連するライブラリをインストールしておきます。

$ sudo pip install spotipy

Mopidy の設定

Client ID と Client Secret を手に入れる

Mopidy から Spotify にアクセスするため、Spotify から Client ID と Client Secret を発行してもらう必要があります。

developer.spotify.com

上のページにログインしたら、"My Apps"に進みます。

f:id:tawaku:20170907232413p:plain


“My Applications"を選択して、 Mopidy を登録します。

f:id:tawaku:20170907235023p:plain


アプリケーション名は適当に入れて、"CREATE"をクリックします。

f:id:tawaku:20170907232947p:plain


Client ID と Client Secret が表示される画面に移動するので、文字列を控えておきます。

f:id:tawaku:20170907235050p:plain


mopidy.conf の編集

mopidy.conf の [spotify] のセクションを設定します。

$ cp ~/.config/mopidy/mopidy.conf /usr/share/mopidy/conf.d/mopidy.conf
$ vim /usr/share/mopidy/conf.d/mopidy.conf

[spotify]
enabled = true
username = <username>
password = <password>
client_id = <client_id>
client_secret = <client_secret>

Mopidy 起動

PC 立ち上げ時に mopidy が起動するように設定しておき、サービスを開始します。

$ sudo systemctl enable mopidy
$ sudo systemctl start mopidy


これで、TCP port 6600 と 6680 で接続待ち受けが始まります。6600 は MPD Client 用の接続で、6680 は Web Client 用の接続です。

Mopidy-Iris でアクセス

ブラウザからアクセスしたかったので、Web Client をインストールします。 Web Client はいくつかあるようです( Web extensions — Mopidy 2.1.0-10-gd4d7680 documentation )。見た目が気に入った Mopidy-Iris をインストールしてみました。

$ sudo pip install Mopidy-Iris
$ sudo systemctl restart mopidy


その後、ブラウザからhttp://127.0.0.1:6680/にアクセスします。"Web Clients"にirisが表示されているので、クリックします。

Mopidy-Iris の画面が表示されます。音楽再生前にいくつか設定を入れておきます。サイドのナビゲーションから、"Settings"を選択します。

f:id:tawaku:20170910000111p:plain


Localization 設定に以下を設定します。

f:id:tawaku:20170910000120p:plain


“Log in"を押して、Mopidy-Iris でのログインを実行します。

f:id:tawaku:20170910000126p:plain


これで音楽の再生ができるようになりました。

f:id:tawaku:20170910000131p:plain

おわりに

Spotify 聞くだけであれば手元のスマホだけで済む気もしますが、Extension で拡張していければスマホとの違いも出せそうです。暇なときに他の Extension も調べてみようかと思います。

python スクリプトの行頭に書く "#!"

pyenv の環境でスクリプトの行頭の#!に何を書けばよいかと言う話。
#!/usr/bin/env pythonが適当みたい。

$ pyenv version
2.7.13 (set by /home/***/.pyenv/version)
$ /usr/bin/env python -V
Python 2.7.13

$ cd test
test$ pyenv version
3.6.2 (set by /home/***/test/.python-version)
test$ /usr/bin/env python -V
Python 3.6.2


#!/usr/bin/pythonだとダメそう。

test$ pyenv version
3.6.2 (set by /home/***/test/.python-version)
test$ /usr/bin/python -V
Python 2.7.12

apt のリポジトリを削除する

Ubuntu(16.04) に Spotify をインストールしたのですが、何故かログインできなかったので削除します。

$ dpkg -l | grep -i spotify
ii  spotify-client    1:1.0.49.125.g72ee7853-111     amd64     Spotify streaming music client

$ sudo apt remove spotify-client


リポジトリ登録時に鍵を追加していたので削除します。

$ apt-key list
pub   4096R/D2C19886 2015-05-28 [有効期限: 2017-11-22]
uid                  Spotify Public Repository Signing Key <operations@spotify.com>

$ sudo apt-key del D2C19886
OK

apt-key list で表示されるD2C19886の部分が apt-key delで指定する key-id です。

リポジトリ登録情報を削除します。

$ ls /etc/apt/sources.list.d/
spotify.list
spotify.list.save

$ sudo rm -f /etc/apt/sources.list.d/spotify.list*


最後にsudo apt updateしておきます。

pyenv versions の出力で気になったこと

$ pyenv virtualenv 3.6.2 hoge

を実行したら、環境が作られたのは良いのですが、

$ pyenv versions
  system
* 2.7.13 (set by /home/***/.pyenv/version)
  3.6.2
  3.6.2/envs/hoge
  hoge

hoge だけでなく3.6.2/envs/hogeも作らてしまって。

余計なものな気がして、気持ち悪かったので調べたら、hoge3.6.2/envs/hogeのsymlinkとのことでした。

There are two entries for each virtualenv, and the shorter one is just a symlink.
GitHub - pyenv/pyenv-virtualenv: a pyenv plugin to manage virtualenv (a.k.a. python-virtualenv)

確認したら、確かにsymlinkでした。

$ ls -l ${PYENV_ROOT}/versions
合計 8
drwxr-xr-x 6 *** *** 4096  8月 20 13:45 2.7.13
drwxr-xr-x 7 *** *** 4096  8月 20 13:35 3.6.2
lrwxrwxrwx 1 *** ***   42  8月 31 22:31 hoge -> /home/***/.pyenv/versions/3.6.2/envs/hoge

Catalyst の banner で変数が使えた

$(hostname) って書いてあった

会社の Catalyst をいじっていたら、banner に $(hostname)と書いてある設定を見つけた。変数(トークンと言うらしい)使えたんだ。Catalyst 3550 と古い機種なので、ほとんどの機種で使えるのではないかな。

banner motd ^C
---------------------------
Welcome to Catalyst Switch
This switch is $(hostname)
---------------------------
^C

使えるトークンは他にもあるみたいだけど、MTU サイズとか banner で知らされても何が嬉しいのかしら。 www.cisco.com

Ansible でノート PC を構築するときの備忘

前情報

うちのノート PC は、OS に Lubuntu を使っています。壊れたりして、初期化が必要になったら、Lubuntu インストール後に Ansible を使って初期設定するようにしてます。

なお、初期化に必要な設定ファイル(.vimrcとか、.tmux.confとか)は、bitbucketに置いています。Ansible playbook も bitbucket に置いてます。

bitbucket.org

今回試した環境(2017/5/1)

  • Lubuntu 16.04.2 LTS
  • ansible 2.3.0.0

Ansible を実行するために

Lubuntu をインストール後に、Ansible を実行するまでの手順が必要です。そこは、自動化できないので、備忘として記載しておきます。

SSHD インストール

Lubuntu には openssh-server が入っていないので、インストールします。

$ sudo apt install openssh-server

Ansible インストール

まずは、どのversionがインストールされるか確認

$ sudo apt show ansible

バージョンが2.1.0以上であることを確認します。 2.1.0より低かったり、パッケージが見つからない場合は、リポジトリを追加します。

$ sudo apt-add-repository ppa:ansible/ansible
$ sudo apt update

その後、インストールして、バージョンを確認します。

$ sudo apt install ansible
$ ansible --version

bitbucket の SSH key 作成

Ansible playbook 内で設定ファイルをgit cloneするときに必要なため、SSH鍵を作成して bitbucket に登録しておきます。bitbucket専用の鍵にしたいので、鍵の移動と名前も変更しておきます。

$ ssh-keygen
$ mkdir ~/.ssh/bitbucket/
$ mv ~/.ssh/id_rsa* ~/.ssh/bitbucket/
$ cd ~/.ssh/bitbucket/
$ mv id_rsa bitbucket.id_rsa
$ mv id_rsa.pub bitbucket.id_rsa.pub 

bitbucket.id_rsa.pubをbitbucketのSSH keyとして登録します。その後、~/.ssh/configにコンフィグを記載しておきます。

Host bitbucket.org
  HostName bitbucket.org
  IdentityFile ~/.ssh/bitbucket/bitbucket.id_rsa
  User git

Ansible playbook ダウンロード

構築用のAnsible playbookをどこかのディレクトリに適当に配置

SSH でのアクセス設定

SSH Agentを起動し、自ホスト向けの鍵を登録しておきます。

$ ssh-keygen
$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa

自ホストからのSSHアクセス用の公開鍵を登録します。

$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys
$ chmod 600 .ssh/authorized_keys

SSH鍵で自ホストにログインできることを確認、うまく言っていればパスワードを聞かれずにログインできます。

$ ssh <user>@127.0.1.1

playbook 実行

playbookのディレクトリに移動し、以下を実行。site.ymlの設定を確認して、対象のホストに間違いがないかは見ておく必要ありです。

ansible-playbook -i production site.yml --ask-sudo-pass