ラベル MPC の投稿を表示しています。 すべての投稿を表示
ラベル MPC の投稿を表示しています。 すべての投稿を表示

2016年10月4日火曜日

MPD+Raspberry Pi 3 BによるDAP、及び専用クライアント開発記録_Vol.2

 さて、連載二回目となります。前回JavaMPDというjarを発見して、なんだこれをGUIに乗っけるだけじゃないか、と意気込んでいました。
 過去形ということで察していただきたいのですが、今回はそんな前回の発見と方針などどこへやら、だいぶん違う方策でMPDを制御してゆくことにしましょう。

 というのも、JavaMPDをコンパイルする段階で設定ミスなどなどあったのかも知れませんが、どうやってもコンパイルエラーを吐きまくり、コンパイルできる状態に無かったのです。
 本来は、どこがおかしいのか、どこをどう変えれば修正できるのか探って行くことになるのでしょうが、あいにくとそんな技術を持ち合わせていない以上に、そこまで時間を割くことができない、という状況があります。

 首都大学東京の大学祭、みやこ祭でのオーディオ研究会の展示の一翼を担うものであるだけに、失敗と遅れは許されません。他のメンバーたちは続々と展示物を完成させていく中で焦りが募ります。

 というわけで、JavaMPDを諦めることにしました。といっても、やはりGUIで実装するという目標を変えるというのもこれはこれで残念です。ということで、JavaMPDを使わず、何かの方法でMPDを制御するGUIを制作する必要がありそうです。

  

 では、現状を整理しましょう。現在、Raspberry Pi上ではxwindowを実行しない状態、つまりCUIでRaspbianが走っており、その上で MPDと基本の通信機能を走らせている状態になります。そして、MPDの制御にはとりあえずC言語で書かれたCUIベースMPDクライアントであるMPCが走っており、MPCを介してMPDを制御することには成功しています。
 MPCは大変シンプルなソフトで、mpc playで再生、mpc nextで曲送りなど、きわめて手軽かつ直感的なコマンド操作でMPDを制御できますので、Volumioなどを使わない人にとって、とりあえずMPDを入れた後の動作確認などの段階で同時に入れてしまうことの多いものです。
 
 ならば、MPDを直接いじるプログラムを書くのが難しいのなら、MPCコマンドをsshで送信するGUIアプリケーションを書いてしまえばとりあえず解決するんじゃ無いか、ということに思い至ります。

 以上から、MPDクライアントを自作するというよりは、二次的にMPDクライアントを制作する、つまりMPCをGUIでフロントエンド実装してしまおうという非常に文系的な発想で開発を進めて行くことにしました。

 このアイデアに思い至るまで、オーディオ研究会の皆々様には多大な意見をいただきました。ありがとうございます。

 では、改めて今回作るアプリケーションソフトの定義をしていきましょう。
  1.  MPC/MPDを導入したRaspbianに対して動作するアプリケーション
  2.  言語はJAVA
  3.  ひとまずmac/Windowsを対象としてjarファイルを以て完成とする
  4.  GUIアプリケーション
  5.  必須機能は「再生」「停止」「曲送り」「曲戻し」 「プレイリスト更新」
  6.  可能ならUSBから取り込みも行う
  7.  I2S出力を行うためその部分と干渉しない
ついでに、今回のDAPの定義もしていきましょう(アプリケーション定義以外の部分で)。
  1.  Raspberry Pi 3 Model B上で動作するRaspbian JessyをOSとするシステム
  2.  MPDをメインとする
  3.  音楽再生機能・ネットワークラジオ機能(ひとまずSHOUTcast対応)
  4.  曲は内部保存(あくまでポータブルDAPである)
  5.  電源はUSB経由
  6.  I2S接続のDACチップ経由で出力する
  7.  DACチップはPCM5102A(テキサスインスツルメンツ製品頁)を搭載したモジュール(サンハヤト社MM5102)
開発環境は
  1. macOS sierra macbookAir e2015 上 IntelliJ IDEA 2016.2
  2. Windows 8.1 Embedded Industry Pro 上 IntelliJ IDEA 2016.2
  3. JAVA 8
  4. Raspberry Pi 3 Model B
  5. So-net 0simで運用するテザリング用Android携帯(Xperia A) ←この端末を介してssh接続 
以上の条件で、明日からまた開発を進めていきましょう!

 次回!「正社員ってお給料を安くするための法の抜け穴!?」 お楽しみに!

2016年9月28日水曜日

MPD+Raspberry Pi 3 BによるDAP、及び専用クライアント開発記録_Vol.1

 114514日ぶりの更新となってしまいました。ここ最近いわゆるこのような形式のブログというものに魅力を感じなくなってしまい、Twitterなど短文ブログやfoursquare等位置情報、及びGPSトラッカなどを活用し、なるべく簡易に日記のようなものを作り出すことに心血を注いで来ました。
 AppleWatchで散歩コースをトラッキングし、kmlデータとして抽出してGoogle Earthなどに落とし込んでみたり、日常の記録としてのブログ(日記)を文章として残すより相当に効率的に、かつ手軽なため三日坊主にならないことから、ズボラな自分には大変馴染むものでした。
 
 ところで、ブログに魅力を感じなくなってきつつある一方、Evernoteにも同時に別れを告げ、かといってOneNoteはまだまだmacで使いやすいとはいえない現状、何かの一連の創作などの記録をつけるのに良いサービスはないものかと模索していたところ、見捨てていたブログが目に留まりました。
 ブログはタグ機能も充実し、公開も容易であり、かつ執筆も容易で、BloggerではHTMLタグによる装飾も可能、ひいてはブログ内検索も標準のためEvernoteよりも優れたメモサービスとなりうる可能性を感じました。
 というわけで、これから暫く開発日記として当ブログを執筆していこうかと考えております。

 さて、現在開発を進めているのは表題の通りMPDのクライアントとDAPです。詳しくは冬コミで出す予定の部誌に譲るとして、備忘兼ねて簡単に書くと、MPDはMusic Player Daemon といい、UNIX系で動作する音楽を再生するためだけのデーモンです。
 このMPDはシングルボードコンピュータであるRaspberry Piとよく併用され、ラズパイの持ち前の単純さと、MPDの単純さが相まって非常にシンプルなDAPとなります。
 余計な機能がないDAPは当然ノイズなどの原因が少なくなるため、音質向上に寄与するわけですが、正直ココに関しては一個人、素人が設計するレベルでは都市伝説の域を出ないものかもしれません。ですが、DAPをイチから(サンくらいから?)設計するなど普通は出来ない体験でもあり、その達成感は何物にも代えがたいものです。
 
 以上の理由から、Raspberry PiにMPDをインストールし、できるだけ余計な機能を省きつつ(機能追加はそこから分化して開発するのも面白そうですね)、とりあえずはできるだけ音質を求めたオリジナルPDAP(ポータブル・デジタル・オーディオ・プレーヤ)を製作していくことにしました。
 といっても、音楽を鳴らすところまでは対して難しいことはありません。一度設定を書き間違えてしまい、イチから導入し直す機会がありましたが、そのときは手順も確立していたことから、真っ更な状態から全部込みで音楽再生まで3時間程度で行うことが出来ます。
 
 こちら(mpd導入まで)に関しては、部誌には詳細を改めてまとめてみようと思いますが、ブログとしては諸先輩方のサイトに譲ることにしたいと思います。最も参考とさせて頂いたのはn-mmra.net Web Site 様によるmpdの設定についてのページ(http://www.n-mmra.net/audio/raspimpd/raspimpd.html)です。
 Embed好きの諸兄御用達のエレキジャック様にも解説があるので、そちらも大変参考になります(http://www.eleki-jack.com/Kurobox-pro2/2007/09/music-player-daemon-mpd.html)

 mpdの導入と、mpcによる操作までは私の頭と能力でもすぐにできました。が、ここから躓いてしまったのです。
 さすがに、PDAPとして持ち運ぶのに毎度terminalを開いてssh接続を噛ませて"mpc play"と打っていたのでは現実的ではありません。せめて、ポータブル性は一旦置いておいたとしてもパソコンからGUIで操作するくらいのことは行いたい。そして、GPIO経由の物理操作もできれば受け付けたい。そういう思いになるのは当然です。
 ですが、これがなかなか難しいのでした。mpcも内部はCで書かれており、使えた気になっていただけです。私の技量ではライブラリは然るべきところからお借りするとしても、やはりクライアント程度は自作しなければ「ラズパイでDAP作った」とはとても冬コミ電子工作島の猛者の中で申し上げる勇気はありません。
 というわけで、ひとまずmpdクライアントの自作ができないか、調査をしていくことにしました。

 mpdクライアント  自作 と検索をかけると、2016/09/28時点で~magi mode~ver 3.10 様(http://ameblo.jp/magi-alphard/entry-12042016946.html)のページがトップに引っかかります。メイドちゃんに案内されながらブログを拝見すると、まさに自分の作りたかったMPDクライアント(JAVAベース)が。世の中には上がいるものですね。
 1時間半で作られたとのことで、調査にかかった時間よりも短く作成されており頭が下がるばかりですが、これを何十時間かけてでも完成させよう、ということになりました。
 実際こうして作っている方がいるわけですから、やってやれないことは無いはずです。

 mpdをjavaで制御するには、もちろん根本的に理解して作成するのはアリでしょうが、自動でsshなどを経由して制御を可能とするJavaMPD(http://www.thejavashop.net/javampd/) が存在するので、喜んで謹んで跪いて使わせていただくことにしまして、あとはGUIに乗っけるだけです。お手軽。

 しかし、重大な問題としてJavaのGUIアプリケーションを作成したことがないという致命的なものがありました。AWTでも、Swingでも作成したことがない。
 さて、明日から一旦MPDから離れ、ひとまずAWTの勉強が始まることになりました。

 
 次回!「城之内死す!」