Rust で MPDクライアント作成

背景

私は、音楽再生にMPDを使っていて、クライアントはncmpcppを使っている。

でも、これはLinux機の話でwindows機だとiTunesを使っている。

個人的には、ncmpcppはキーボードだけで操作できるの良い点で、iTunesは、Albumで音楽を探せるのが非常に良いと思っている。

なので、その両方を兼ね備えた最強に見えるクライアントを作ろうと考えた。

開発環境

  • rust : 1.15.1
  • cargo : 0.16.0 - nightly
  • GUIライブラリ
    • GTK+3
    • gtk-rs : 0.1.2 feature : v3_16

 メインに考えている機能

1 それぞれの画面でのCUI操作

  • 音楽を選択して ‘a’ を押すと playlist に追加
  • playlist 画面で 選択した音楽を ’d' で plylist から削除
  • キーバインドの設定
  • GUIでの操作も可能

2 Album 画面

  • MPD内のアルバム全てをリストアップしてそのカバーアートを表示
  • 選択すると、そのアルバムの音楽リストを表示
  • カバーアートを音楽データから、あるいはネットから取得

現在の状況

  • 表示できるウィンドウ
    • playlist window( TreeView ) f:id:naxatoko:20170327222402p:plain
      • 現在再生している playlist の音楽データ(title, artist, album)を表示
      • 音楽を選択して ’d' を押すと playlist から音楽を削除
    • album window ( FlowBox ) f:id:naxatoko:20170327222410p:plain
      • アルバムのリストを表示
    • music directory window(mpd 内の音楽ディレクトリをそのまま表示) ( TreeView ) f:id:naxatoko:20170327222423p:plain
    • seek bar
      • 再生中の音楽の再生時間に応じて変化
      • 停止、再生などのボタンはあるが、何の動作もしない。

問題点

1 MPDのアルバム名取得(list album)で、アルバム名だけしか取得できないので、アルバムから音楽の取得がしにくい。

2 list album でアルバム名がかぶると一つにまとめられて表示されるので同じ名前のアルバムを表示できない。

3 album window でアルバムを選択すると、iTunes みたいに下の行に音楽リストを表示したいが、FlowBoxの特性上難しそう。

4 music directory window でMPDから音楽を取得するために、音楽のタイトルをファイル名にしている。

5 シークバーに gtk の Scale が ダサいのでProgressBarを使っているが、クリックなどのイベントがないので、時間操作ができない。

その他