有馬総一郎のブログ

(彼氏の事情)

2021年05月04日 19:20:34 JST - 5 minute read - subsonic

CLI Subsonic Client pSubを試す

Subsonicのクライアントアプリは Subsonicにあるだけが全てではない。そうCLIで動かせるものが存在する。

ググると割とあれやこれやと見付かったのだけど、成功したこちらを。 GitHub - mj2p/psub: CLI Subsonic Client

インストール

README.mdに書いてあるとおりかと思いきや、Clone this repoのところgit clone github.com/inuitwallet/psub.gitとURLが間違ってる。

$ git clone https://github.com/mj2p/psub.git
$ cd psub
$ sudo apt install python3-venv
$ python3 -m venv ve
$ ve/bin/pip install .
Processing /home/arimasou16/git/psub
  ERROR: Command errored out with exit status 1:
   command: /home/arimasou16/git/psub/ve/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-req-build-5f82xmdn/setup.py'"'"'; __file__='"'"'/tmp/pip-req-build-5f82xmdn/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-y3kj3jo1                                                                                                                                                            
       cwd: /tmp/pip-req-build-5f82xmdn/                                                                                                                                                     
  Complete output (6 lines):                                                                                                                                                                 
  usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]                                                                                                                      
     or: setup.py --help [cmd1 cmd2 ...]                                                                                                                                                     
     or: setup.py --help-commands                                                                                                                                                            
     or: setup.py cmd --help                                                                                                                                                                 
                                                                                                                                                                                             
  error: invalid command 'bdist_wheel'                                                                                                                                                       
  ----------------------------------------                                                                                                                                                   
  ERROR: Failed building wheel for pSub
  Running setup.py clean for pSub
Failed to build pSub
Installing collected packages: click, colorama, pyparsing, packaging, pyyaml, wcwidth, prompt-toolkit, questionary, urllib3, idna, chardet, certifi, six, pycparser, cffi, cryptography, pyOpenSSL, requests, pSub
    Running setup.py install for pSub ... done
Successfully installed certifi-2020.12.5 cffi-1.14.5 chardet-4.0.0 click-7.1.2 colorama-0.4.4 cryptography-3.4.7 idna-2.10 pSub-0.1 packaging-20.9 prompt-toolkit-3.0.18 pyOpenSSL-20.0.1 pycparser-2.20 pyparsing-2.4.7 pyyaml-5.4.1 questionary-1.9.0 requests-2.25.1 six-1.15.0 urllib3-1.26.4 wcwidth-0.2.5

"ERROR: Failed building wheel" during pip installation · Issue #1 · infobyte/faraday-cli · GitHub

何かエラーが出た(その後にインストール成功とか出てるけど)。pip install wheelとか実行しても既にインストール済みと出る。

うーん、試しに別バージョンのpythonをインストールして試すこととする。

$ curl https://pyenv.run | bash
$ pyenv install 3.5.10
$ sudo apt install libbz2-dev libreadline-dev libsqlite3-dev

しかし、やはり駄目で、再度python 3.8.5で試す。ただし、pyenvで3.8.5を入れ直してから。するとエラーが変わった。pyenvのためのsudo apt install libbz2-dev libreadline-dev libsqlite3-devが効いたのかな?

$ ve/bin/pip3 install .
Processing /home/arimasou16/git/psub
    ERROR: Command errored out with exit status 1:
     command: /home/arimasou16/git/psub/ve/bin/python3 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-req-build-7jxztbt8/setup.py'"'"'; __file__='"'"'/tmp/pip-req-build-7jxztbt8/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-j94uiags                                                          
         cwd: /tmp/pip-req-build-7jxztbt8/                                      
    Complete output (11 lines):                                                 
    Traceback (most recent call last):                                          
      File "<string>", line 1, in <module>                                      
      File "/home/arimasou16/git/psub/ve/lib/python3.8/site-packages/setuptools/__init__.py", line 19, in <module>                                              
        from setuptools.dist import Distribution                                
      File "/home/arimasou16/git/psub/ve/lib/python3.8/site-packages/setuptools/dist.py", line 34, in <module>                                                  
        from setuptools import windows_support                                  
      File "/home/arimasou16/git/psub/ve/lib/python3.8/site-packages/setuptools/windows_support.py", line 2, in <module>                                        
        import ctypes                                                           
      File "/home/arimasou16/.pyenv/versions/3.8.5/lib/python3.8/ctypes/__init__.py", line 7, in <module>                                                       
        from _ctypes import Union, Structure, Array                             
    ModuleNotFoundError: No module named '_ctypes'                              
    ----------------------------------------                                    
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.                                                 
WARNING: You are using pip version 20.1.1; however, version 21.1.1 is available.
You should consider upgrading via the '/home/arimasou16/git/psub/ve/bin/python3 -m pip install --upgrade pip' command.  

pipenvのinstall時に、No module named ‘_ctypes’が発生する - Qiita

$ pyenv uninstall 3.8.5
$ sudo apt install libffi-dev
$ pyenv install 3.8.5

すったもんだで、インストール成功。

初回起動

そして、psubディレクトリから起動

$ ve/bin/pSub
Welcome to pSub
To get set up, please edit your config file

Press any key to continue ...

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/nvim
  4. /usr/bin/vim.tiny
  5. /bin/ed

Choose 1-5 [1]: 3

設定

初回起動時は設定ファイルを編集しろと促してくれるらしい。優しい。

$HOME/.config/psub/config.yaml


    host: hostname/jpsonic

    # Username and Password next

    username: username
    password: password

    # If your Subsonic server is accessed over https:// set this to 'true'

    ssl: true

と、私の場合、https://hostname/jpsonicなので上記のようになった。ではテスト接続。

$ ve/bin/pSub -t
Testing Server Connection
https://username@hostname/jpsonic
Traceback (most recent call last):
  File "ve/bin/pSub", line 11, in <module>
    load_entry_point('pSub==0.1', 'console_scripts', 'pSub')()
  File "/home/arimasou16/git/psub/ve/lib/python3.8/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
  File "/home/arimasou16/git/psub/ve/lib/python3.8/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
  File "/home/arimasou16/git/psub/ve/lib/python3.8/site-packages/click/core.py", line 1236, in invoke
    return Command.invoke(self, ctx)
  File "/home/arimasou16/git/psub/ve/lib/python3.8/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/arimasou16/git/psub/ve/lib/python3.8/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
  File "/home/arimasou16/git/psub/ve/lib/python3.8/site-packages/click/decorators.py", line 21, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/arimasou16/git/psub/ve/lib/python3.8/site-packages/pSub.py", line 623, in cli
    test_ok = ctx.obj.test_config()
  File "/home/arimasou16/git/psub/ve/lib/python3.8/site-packages/pSub.py", line 93, in test_config
    ping = self.make_request(url=self.create_url('ping'))
  File "/home/arimasou16/git/psub/ve/lib/python3.8/site-packages/pSub.py", line 117, in create_url
    if version.parse(self.api) < version.parse("1.13.0"):
  File "/home/arimasou16/git/psub/ve/lib/python3.8/site-packages/packaging/version.py", line 57, in parse
    return Version(version)
  File "/home/arimasou16/git/psub/ve/lib/python3.8/site-packages/packaging/version.py", line 296, in __init__
    match = self._regex.search(version)
TypeError: expected string or bytes-like object

またエラー?と思ったが、どうもエラーがライブラリーとかのエラーというより、設定によるものっぽいと思ったので

$HOME/.config/psub/config.yaml

    # If you use a server with a specific API version set it here
    
    api: 109

と空にしてたのを109と設定して再テスト。

$ ve/bin/pSub -t
Testing Server Connection
https://username@hostname/jpsonic
Command Failed! 30: Incompatible Jpsonic REST protocol version. Server must upgrade.
Test Failed! Please check your config

エラーがまともになった。Subsonicなどのアプリのそのものじゃないバージョンでは駄目で、RESTAPIバージョンということなので

で調べる。

Airsonic currently embed Subsonic API version 1.15.0.

JpsonicはAirsonicがベースなので

$HOME/.config/psub/config.yaml

    api: 1.15.0

とする。

$ ve/bin/pSub -c
Testing Server Connection
https://username@hostname/jpsonic
Test Passed

今度こそ成功。

音楽再生

コマンドはこれだけ

  album     Play songs from chosen Album
  artist    Play songs from chosen Artist
  playlist  Play a chosen playlist
  radio     Play endless Radio based on a search
  random    Play random tracks

で、音楽を再生してみる。

artist検索。

$ ve/bin/pSub artist 氷室京介
? Choose an Artist, or 'Search Again' to search again (Use arrow keys)
 » 氷室京介
   Search Again

   Playing tracks by 氷室京介   

n = Next
b = Beginning
x = Exit

My Name is "TABOO" by 氷室京介
n
Skipping...
PARACHUTE by 氷室京介
n
Skipping...
Rock'n'Roll Suicide by 氷室京介
b
Restarting Track....
Rock'n'Roll Suicide by 氷室京介
x
Exiting!

なるぅ。

album検索。

$ ve/bin/pSub album lovebites
? Choose an Album, or 'Search Again' to search again (Use arrow keys)
 » THE LOVEBITES EP
   Awakening From Abyss
   BATTLE AGAINST DAMNATION
   BATTLE IN THE EAST
   CLOCKWORK IMMORTALITY
   DAUGHTERS OF THE DAWN - LIVE IN TOKYO 2019
   CRUSADERS STANDING AT WACKEN - LIVE IN GERMANY 2018
   ELECTRIC PENTAGRAM
   Golden Destination
   FIVE OF A KIND - LIVE IN TOKYO 2020
   AWAKE AGAIN: AWAKENING FROM ABYSS 3rd Anniversary Studio Live
   GLORY, GLORY, TO THE WORLD
   Search Again

再生するとスキップするか、曲の頭に戻るか、終了しかない。一時停止ぐらいは欲しかったなぁ。

また、検索結果が端末の高さ、もしくは20を超えると表示できなくて、ページ遷移できない。なのでその場合、もっと絞り込めるように検索する必要がある。ただ、albumにアーティスト名を入れてもちゃんとアルバム名にアーティスト名が含まれてなくても、アーティスト名が一致するアルバムを検索してくれたのはありがたかったが。

見た目に変化が欲しい場合。

$HOME/.config/psub/config.yaml

    display: true

    show_mode: 0

pSub
0: show video or album art
pSub
2: show audio frequency band using RDFT ((Inverse) Real Discrete Fourier Transform)

と表示される。

まあ、なんにせよ、Subsonicを流し聞きする用途だなぁ。

その他CLI Subsonic Client