• ポータブル版プロジェクト

    理想のDAPがなければ作ればいいじゃない

    度重なる増税にDAPの不作、良質なDAPの価格高騰に市民の不満は高まるばかり。

    Do you hear the people sing ?
    Singing the song of angry men ?

    DAP革命に賭ける開発者とユーザがアイデアを語り合うスレッドです。


    開発者を募ります

    ポータブル版を開発したい方はご一報ください。
    私もソース提供や実装の手伝いなど、全面的な支援を行う予定です。

    2019/12/31までに希望者いなかった場合、本スレッドはクローズします。

  • @パパリウス さん

    どの位力になれるのかはわかりませんが、参加させて頂きたいと思います。
    Javaの一般的なプログラムの開発の末端に従事しています。
    linuxのデバイスドライバの開発は勉強で少し触った事がある程度です。

  • :headphones: @デジタル さん

    モバイル版のリードプログラマーをお迎えでき、大変うれしく思います。
    余暇を充実させる趣味として、ご自身のペースで進めていただければと思います。

    gitを利用されたことはありますでしょうか?
    ソース共有の準備を進めますのでお時間をくださいませ。

    Cのコーディングが必要にることはほとんど無いと思いますが、Cのソースを読む場面は時々あると思います。

    Javaが読めれば難なく読み進めることができると思いますが、例外処理の違いやシフト演算・ポインタの多用など、慣れが必要な部分はあります。

    それから、シェル(bash)をたくさん書くことになると思います。

    作りたいモバイル版の理想像について、アイデアを出し合いましょう。

    進め方についてご要望があれば何なりとご相談ください。

  • @パパリウス さん

    gitを利用されたことはありますでしょうか?

    使った事はあります。
    以前自分のプライベート用のソースを管理していました。

    他の部分については、どれも経験が浅いのですが一応触った事はあります。
    シェル(bash)については仕事で書く事もあるので他よりはましかもしれません。

    作りたいモバイル版の理想像について、アイデアを出し合いましょう。

    ラズパイでDAPを作って外に持ち出すという試みをやっている方は、既に一定数おられるようなのですが、
    ネット上でみかける方はだいたいラズパイZEROでやっておられます。
    ラズパイ3でやっておられる方も見た記憶はあるのですが、モバイル用途では不利な点が2点あります。
    1つは基板自体の大きさ、もう1つは消費電流の大きさです。
    ここをどう想定するかは非常に大事なように思えます。

  • 基板の大きさなのですが、実際に自作ラズパイ製DAPを持ち出してみると、
    ラズパイZEROで作っても結構な大きさになります。
    通常の工作の範囲ではラズパイとDACを縦に重ねるしかなく、スペーサーを薄くしても
    意外に高さは高くなります。
    これに最低でもバッテリーが必要ですので、トータルでは結構な大きさです。

    また消費電流の問題も結構重要で、バッテリーの持ちが大きく変わります。

    ラズパイ3を採用するには、このあたりを解決しないといけないと思います。

  • @デジタル さん

    大きさや消費電力を考慮すると、ラズパイ以外のSBCという手もありますかね?!
    NanoPiのようにすごく小さいボードもありますし。

    シングルコアのボードを採用する場合は、動作検証が必要になります。
    Xenomai、aplay-rt、rtalsa、xsinkがシングルコアでは動かないかもしれません。

    マルチコア向けにビルドすると、コア間で同じアドレスを読み書きしても問題ないように排他制御の処理が含まれたバイナリが生成されます。
    インラインアセンブラを手書きしている箇所はマルチコアを前提にして書いていますので、手直しが必要になるかもしれません。

    手直しを避けるため、2コア以上のCPUを持つSBCを選択するのが無難ではあります。

    出荷台数が多くて人気があり、情報が豊富なSBCとなると、NanoPi-NEOシリーズでしょうか。他にも候補を探してみたいですね。

    メモリは256MBあれば十分だと思いますが、メモリの速度はとても重要です。
    RPi3はLPDDR2ですが、LPDDR3やLPDDR4の方がうれしいですね。
    CPUキャッシュは大きければ大きいほどいいです。

  • @パパリウス さん
    NanoPi-NEOシリーズだと弱点と思えるのが、wifiとBluetoothに非対応な点です。
    こういうものを作るとスマホから操作する形になると思いますが、Bluetoothで接続できれば結構快適に操作できます。
    wifiも悪くないです。
    (ただし、スマホでwifiを使いたい時に自由に使えない欠点があります。)
    現実問題としてはラズパイ3を通常よりもダウンクロックして低消費電力化し、
    大きさについては妥協するのもありかもしれません。
    ハードからして難しいところがありますね。
    SONY SPRESENSE メインボード
    本当はこういうボードが向いていそうですが、linuxは大きすぎて動かせません。

  • @デジタル さん

    CPUの周波数を落とすのは賛成です。
    v0.4系のころ、donutsさんがsmpdplayerを発表されました。900MHz前後、かつシングルコアという構成でしたが、その音質と性能にインスピレーションをもらいました。
    高クロックに頼らず、シンプルさを追求することで音質を磨くことができるという証左です。
    消費電力と性能のバランスから、600MHz〜900MHzをターゲットにすると良いかと思います。


    wifiを使う場合、スマホを親機にするか、SBCをアクセスポイント化するか。
    bluetoothを使う場合、どのプロファイルを、何に使うか、がポイントになりそうですね。

    bluetoothにはTCPを通すプロファイルがあります。bluetoothでAirPlayによるロスレス伝送を試してみましたが、全く帯域が不足しており、実用には至りませんでした。
    bluetoothの音声用プロファイルは、どれも非可逆圧縮をするものですので、個人的には躊躇するところがあります。

    スマホ(iPhone)とUSBで繋いで、「USBテザリング」というアイデアもあるかもしれません。
    USBテザリングでAirPlayすれば、iPhone上の音源もネット上の音源も全て再生でき、手軽でよいかもしれません。
    ただし、AirPlayの仕様により44.1KHz/16bitに制限されるのが欠点です。
    ハイレゾは不要と割り切れるかどうかですね。

  • @パパリウス さん

    BluetoothについてはLean MPDを使わせてもらう事で知ったのですが、リンク先の使い方だと接続を確立してMPDの操作用に利用するのみで、音は本体のDACから出てきます。
    wifiに較べてスマホの操作性を損なわないので非常に便利です。

  • @デジタル さん

    音源の格納先は

    • SDカード
    • USBストレージ
    • NAS
    • クラウドストレージ
    • スマホ
      のどこをターゲットにしましょうか
  • @パパリウス さん
    個人的には今までSDカードにOSも音楽データも入れていました。
    スマホのSDカードに音楽データを保存できればなあ、という気持ちはありましたが、
    私の調べた限りではroot権限が必要なやり方しか見つからなかったので諦めました。
    私としては特にこだわりはないのですが、できれば持ち歩くものが少ない方が嬉しいと思っています。
    音質的にはどこに保存するのが有利なのでしょうか?

  • @デジタル さん

    私も極力シンプルな構成が美しいかなぁと思います。
    SDカードかスマホ内に音源を置ければシンプルでいいですね。


    音質については、

    • 消費電力の変動
    • CPU負荷
    • スループット
    • 遅延の大きさ

    が複合的に影響してくるようです。

    経験的には、SDカード、USB、Wifiなど、ラズパイの内蔵デバイスの稼働が増えるにつれて音質的には不利になっていきます。

    モバイル版は音質と利便性の良いとこどりを目指したいですね。
    SDカード/USB/Wifi/bluetoothも恐れず利用し、ボトルネックがあれば対策していくという進め方でいいと思います。


    KichitaroさんのLean MPDを使い慣れてらっしゃるのでしたら、Lean MPDにXenomai/aplay-rt/rtalsa/xsinkを組み込むことに取り組んでみるというのはいかがでしょうか。

    モバイル向けに工夫されたLean MPDにsymphonic-mpdのモジュール類を組み込んで音質の底上げを図るというのは面白そうです。

  • 私はsmpdをポタでのみ運用しているので楽しみな試みです。
    開発に直接お役に立てることはほぼ無いですがテスト等あれば積極的に参加したいと思います。

  • :bear: @トイ さん

    ポタで常用されている方のご意見はとても参考になります。

    できる/できないは気にせず、ポタ版の理想を呟いてもらえればと思います。

  • @パパリウス さん

    KichitaroさんのLean MPDを使い慣れてらっしゃるのでしたら、Lean MPDにXenomai/aplay-rt/rtalsa/xsinkを組み込むことに取り組んでみるというのはいかがでしょうか。

    私にとっては非常に嬉しいご提案です。
    ですが、Kichitaroさんにソースのご提供をお願いしたり、smpd側でソースを修正する必要が発生したりするのではないかと思っています。
    ですので、大きな障害がなければというところでお願いします。

    @トイ さん
    ラズパイ3でポタを運用されているという事ですが、電源はモバイルバッテリーを使用されておられるのでしょうか?
    また、本体はどのようにして持ち歩かれておられるのか、支障がなければお聞かせ下さい。

  • @デジタル さん

    ポタ版第1弾のテーマは決まりましたね!
    成果を早く刈り取れそうですし、素晴らしいです。

    本プロジェクトを進める中で共同作業の環境も整っていくと思いますし、私もとても楽しみです。

    早めに @Kichitaro さんも巻き込んじゃいましょう:stuck_out_tongue_winking_eye:


    まずはuname -aでカーネルのバージョンを確認してください。
    それから、modprobe configs のあと
    /proc/config.gz
    をコピーしてお送りください。

    Lean MPDのカーネルをベースにするか、smpdのカーネルをベースにするか判断していきましょう。

  • @パパリウス さん

    まずはuname -aでカーネルのバージョンを確認してください。

    pi@leanmpd:~ $ uname -a
    Linux leanmpd 4.9.73-rt60-lean+ #1 PREEMPT RT Wed Jan 3 06:14:49 PST 2018 armv6l GNU/Linux

    それから、modprobe configs のあと

    /proc/config.gz

    をコピーしてお送りください。

    config.gz

    以上よろしくお願いいたします。

  • @パパリウスさん

    本プロジェクトを進める中で共同作業の環境も整っていくと思いますし、私もとても楽しみです。
    早めに @Kichitaro さんも巻き込んじゃいましょう

    @Kichitaro さんに特に面識があるわけではありませんが、一度ポータブル版プロジェクトへの参加を打診してみます。
    @Kichitaro さん、R&D Club のメンバーだったんですね・・・
    ある意味嬉しいサプライズです。

  • @デジタル さん
    はい、モバイルバッテリーでの運用になります。
    3B+digi+pro→γ2DAC 18650×2→A2P TR-01re→Ether C1.1
    で運用しています。
    音源はNAS兼Wi-Fi子機のWRH-300を使用しています。
    画像に関してはプロフィールページにあるので参考になればと思います。
    私は一般的な利便性を追求したポータブラーではなくキャリング性は二の次の類のポータブラーです。
    持ち運びはpeak designの15㌅メッセンジャーに詰めて運んでいます。

  • @デジタル さん

    コンフィグを取得いただきありがとうございます。
    raspbianベースでカーネルは4.9系ですね。

    symphonic-mpdも元を辿れば同じ構成です。
    v0.9.2のカーネルにそっくりそのまま差し替えても動きそうですね。

    ただ、smpdのカーネルはalsaドライバーのソースも弄っているので、mpdからalsaアウトプットに出力しようとしてもうまく動かないのではないかと多います。音がでないか、ハングアップするか。

    カーネル/aplay-rt/rtalsa/xsink一式を入れ、mpd側でpipeアウトプットを使うように設定変更して、ここでようやく音が出るようになります。


    mpd -Vで、Output pluginsにpipeがリストアップされていれば、pipeアウトプットプラグインが利用可能です。

    使用できない場合は、smpdから/usr/local/bin/mpdを取り出してももらうか、ソースからビルドするかのどちらかになります。

    smpdのmpdを使う場合、依存しているライブラリ類もまとめてコピーする必要がありますので、これはこれでちょっと大変かもしれませんね。
    lddコマンドで参照しているライブラリをリストアップできます。

    チャットでv0.9.2 のカーネルへの差し替え手順をご連絡しますね。