とりあえず日記

VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ→VIM→秀丸エディタ(いまここ🍄)

DACPでiTunesをリモートコントロールしてみた(3回目)

DACPでiTunesをリモートコントロールしてみた(1回目) - とりあえず日記
DACPでiTunesをリモートコントロールしてみた(2回目) - とりあえず日記
DACPでiTunesをリモートコントロールしてみた(3回目) - とりあえず日記
DACPでiTunesをリモートコントロールしてみた(4回目) - とりあえず日記


今回は、dacp(https://github.com/Logaritmisk/dacp)というライブラリを試してみます。

ファイル構成

Logaritmisk-dacp-33f6b9b
├─.gitignore
├─dacp.py
├─itunes.py
├─README
└─examples
    ├─change_song.py
    ├─current_artwork_file.py
    ├─current_artwork_pyglet.py
    ├─dacp.py
    ├─get_db.py
    ├─itunes.py
    └─pair_remote.py

ファイルの数が少なく分かりやすいです。
ソースバージョン、Logaritmisk-dacp-33f6b9b


動かす

予め、iTuneを起動しておきます。(自動で起動はしません)


コマンドラインから pair_remote.py を実行してペアリングを行います。


service-name: Rubelina
service-code: 1717


iTunes側でパスコード「1717」を入力すると・・・・

例外発生です!!

Traceback (most recent call last):
File "C:\Users\hoge\Desktop\Logaritmisk-dacp-33f6b9b\examples\pair_remote.py",
line 24, in
if c.code == dacp.generate_pairing_code(p.pair, DACP_SERVICE_CODE):
AttributeError: 'module' object has no attribute 'generate_pairing_code'

例外の原因

generate_pairing_code が見つかりません・・・・Githubへ中途半端な状態でコミットされてるようです。


修正方法

作者への問い合わせとか面倒なので手元でサクッと修正します。

前回の日記で使用したライブラリから、バグのないファイルをコピーしてきます。GitHub - elsmorian/RemoteFrame: A web interface to a DACP iTune remote control designed to run on the OpenFrame or Joggler platform

RemoteFrameの「dacp.py/itunes.py」をdacpのexamplesディレクトリへ上書きコピーして下さい。

examples/dacp.py
examples/itunes.py

必ず、examplesディレクトリにコピーして下さい。


もう一度トライ

もう一度、pair_remote.py を実行してiTunesへペアリングコードを入力して下さい。

何もかもうまくいくとこのような画面になります。

guidは後で使うのでメモして下さい。

server-guid: 37AFF1AB43D1CF8E

(guidの値は環境毎に異なります。)


次の曲へ移動してみる

change_song.py をテキストエディタで開き guid を変更します。

(変更前)

if q.login(guid='95AAFD5039592871'):

(変更後:ペアリング時に取得したguidを設定して下さい。)

if q.login(guid='37AFF1AB43D1CF8E'):

iTunesで曲を生成してから、change_song.py を実行すると「次の曲」へ移動するはずです。

再生と一時停止のトグル

下記コードを play_pause.py として保存して下さい。

#play_pause.py
import itunes

q = itunes.ITunesController(host='localhost')
q.connect()

if q.login(guid='37AFF1AB43D1CF8E'):
    q.play_pause()
else:
    print('faild to connect to server...')
q.close()

実行すると「再生・一時停止」がトグルします。

ボリューム設定(ITunesController.volume メソッド)

ITunesController.volume()メソッドを呼び出すとボリュームの「設定・取得」が出来るようですが、正規表現コンパイルで例外が発生しました・・・

最低限の操作はできているので今回はあきらめました。
(作者と自分が使用している Python のバージョンが異なるのかもしれません)

ペアリングの期間

iTunesを再起動してもペアリングは有効でした。

まとめ

  • コマンドラインからDACP経由でiTunesを操作できました。(一部例外が発生するものの)
  • コマンドラインから起動できれば自作プログラムにも組み込みやすいです。
  • iTunesを操作する処理の流れもある程度分かりました。