世界を動かす技術を、日本語で。

Show HN: Petrichor – macOS用の無料オープンソースオフライン音楽プレーヤー

概要

Petrichor はmacOS向けの オフライン音楽プレーヤー で、多彩なファイル形式と大規模ライブラリに対応。 プレイリスト作成フォルダ管理 など、直感的な操作性を重視。 macOSネイティブ統合 や高速検索など、現代的な機能を多数搭載。 今後の機能追加 や簡単なインストール方法も用意。 オープンソース で開発が進行中、貢献やフィードバックも歓迎。

Petrichor: macOS用オフライン音楽プレーヤー

  • MP3、M4A、WAV、AAC、AIFF、FLAC など主要音楽ファイル形式対応
  • 音楽フォルダのマッピング と、整理されたライブラリビューを実現
  • プレイリスト作成再生キューのインタラクティブ管理
  • 必要に応じて フォルダビュー でのブラウズ
  • サイドバーへのピン留め 機能で、お気に入りへ素早くアクセス
  • 右クリックでトラック情報(アルバム、アーティスト、年)へ即移動
  • macOSネイティブ統合 (メニューバー・Dock再生コントロール、ダークモード対応)
  • 数千曲規模の大規模ライブラリ も高速検索
  • メタデータの品質 が機能性に大きく影響

今後追加予定の主な機能

  • スマートプレイリスト (条件フィルタ設定可能)
  • イコライザー
  • Opus・OGG等の追加ファイル形式対応
  • AirPlay 2キャスト対応
  • ミニプレイヤー・フルスクリーンモード
  • 自動アプリ内アップデート
  • オンラインアルバム・アーティスト情報取得

動作要件

  • macOS 14以降

インストール方法

  • Homebrew(推奨)
    • tap追加: brew tap kushalpandya/tap
    • Petrichorインストール: brew install --cask petrichor
    • 安定版リリース後は公式Homebrewリポジトリでも公開予定
  • 手動インストール
    • Releasesページで最新の.dmgをダウンロード
    • .dmgを開き、アプリアイコンをApplicationsフォルダへドラッグ
    • Applications内でPetrichorを右クリック→「開く」

トラブルシューティング

  • Gatekeeper回避
    • notarization未済のため、右クリック→「開く」で一度だけGatekeeperをバイパス
  • dmgが開けない場合
    • ターミナルで xattr -cr ~/path/to/Petrichor-<version>-Universal.dmg
  • アプリ起動不可の場合
    • ターミナルで xattr -dr com.apple.quarantine /Applications/Petrichor.app

開発の動機

  • 長年集めた音楽コレクション の管理・再生に適したオフライン音楽プレーヤーがmacOSに不足
  • Swinsian 愛用者だったが、近年アップデートがなく機能不足を感じたため自作を決意
  • SwiftとmacOSアプリ開発の学習 を兼ねたオープンソースプロジェクト

技術概要

  • Swift・SwiftUI によるフルネイティブ実装
  • フォルダ追加時に自動スキャン・SQLiteデータベース(GRDB)へ登録
  • 音楽ファイルは非改変、指定ディレクトリを読み取りのみ
  • 検索はSQLite FTS5+インメモリ検索のフォールバック
  • 再生エンジンはAVFoundation

データベーススキーマ(主な構成)

  • folders :音楽フォルダ管理
  • artists :アーティスト情報・外部サービスID管理
  • albums :アルバム情報・ジャケット・レビュー
  • tracks :トラック情報・メタデータ・再生履歴
  • playlists / playlist_tracks :プレイリスト・トラック紐付け
  • genres / track_genres :ジャンル管理
  • pinned_items :サイドバーのピン留め情報
  • tracks_fts :全文検索用仮想テーブル

ビルド・セットアップ手順

  • macOS 14以上 を用意
  • Xcodeインストール
  • ビルド用スクリプト(build-installer.sh)実行には以下が必要
    • xcpretty
    • create-dmg

ライセンス・クレジット

  • MITライセンス
  • Paul Hudson (Swiftチュートリアル提供者)、 Sindre Sorhus (create-dmg作者)、 Claude by Anthropic (共同プログラミング支援)

開発者からのメッセージ

  • ストリーミング主流時代におけるオフライン音楽プレーヤー不足 を解決するためのプロジェクト
  • 3ヶ月かけて開発、v1リリースに向けてα版をテスト・改善中
  • GitHubでのフィードバック・貢献を歓迎
  • 今後も機能追加・品質向上を継続予定

Hackerたちの意見

Spotifyに飽きてきたユーザーとしては、これは新鮮な風を感じるね。ただ、音楽を集めることから離れちゃったのが気になる。昔はCDをリッピングしたり、音楽をダウンロードしてライブラリを作ったりしてたけど、ストリーミングに移行してからはその習慣がなくなっちゃった。今の人たちはどうやって音楽を集めてるのかな?アーティストにちゃんと報酬を渡す方法ってある?

Bandcampが思い浮かぶね。でも、Bandcampにいないアーティストについてはちょっとわからないな。

BandcampとQobuzから買ってるよ(特にクラシックやBandcampにいないアーティストのために)。

「古いiTunes」みたいなプレーヤーを探してるなら、ここもおすすめだよ:https://swinsian.com/

Readmeには「モチベーション」のところでこのアプリが紹介されてるね。>「私は何年もかけて集めた音楽ファイルの大きなコレクションがあり、macOSで良いオフライン音楽プレーヤーが欲しかった。」Swinsianを使ってたけど(すごくいいアプリだよ!)、何年も更新されてないんだ。ストリーミングアプリにある機能も恋しかったから、Petrichorを作って、その欲求を満たしつつSwiftやmacOSアプリ開発も学んだんだ!

Windows/Linuxユーザーには、よりレトロなメディアプレーヤーとしてquodlibetが強くおすすめだよ:https://github.com/quodlibet/quodlibet

おすすめありがとう!今まで試した中で、これが一番の「昔のiTunes」プログラムだわ。しばらくこれを使うかも。特に、ネストしたルールでスマートリストが作れるのが気に入ってる。唯一足りないのはボリュームレベリングかな。

友達(音響エンジニア)がずっとVLCプレーヤーを音声再生に使ってるんだけど、俺も同じことしてる。利点は、音楽をファイルシステムで整理することを強制されることで、それが将来の他のシステムにもすごくうまく適応できるってこと。特別なプレイリストが欲しい?ファイルをコピーして、数字のプレフィックスを付けて名前を付ければいい。10年後に別のOSでそのプレイリストを開くこともできる。俺はフルアルバムを聴くことが多いから、これがいいやり方だと思ってる。

Swinsianは24.95ドルの価値が100%あるよ。オフラインで音楽を買うための良いシステムがあるのは本当にいいね。

俺のアプリも試してみてね:https://www.plastaq.com/minimoon

Petrichor、おめでとう!本当に素晴らしい作品だね!クリーンでモダンなUIが大好き。今はSwinsianを使ってるけど(多くの面でまだまだ良い)、Petrichorは新鮮な風を感じる。特にローカルライブラリを大事にしてる人にはね。これがiOSにも来ることを心から願ってるよ。ありがとう!

実装の手間や難しさを考慮する時間があれば、2つ提案があるよ。> P.S. 近いうちにHomebrewで公開する予定だよ。1. MacPortsでも公開を検討してほしい。2. m4bオーディオブックのサポートも考えてほしい(一般的なm4aとは異なるファイル拡張子だけど、チャプターもサポートしてる)。

そうだね、アプリはもう十分に注目を集めてるから、HomebrewとMacPortsでの配布も考えてるよ!オーディオブックのサポートは面白いアイデアだね。将来的に対応できるか見てみるけど、今は音楽ファイルだけに限定してるよ。

シンプルだけどパワフルな音楽プレーヤー、Cog(https://cog.losno.co/)をおすすめするよ。FLACも再生できるしね。

“iTunesがクソになる前の雰囲気”を求めてるなら、Dopplerもおすすめだよ: https://brushedtype.co/doppler/

おすすめありがとう!試してみたけど、残念ながら昔のiTunesの良かったところがないんだよね。ぱっと見た感じでは、スマートリストがないし、検索も思ったように機能しない(入力しながらフィルターがかかる巨大なエクセルみたいなリストが欲しい)。ボリュームレベリングもないし。

俺のアプリも試してみてよ:https://www.plastaq.com/minimoon

完璧な「昔のiTunes」プログラムを探してるんだけど、たぶん存在しないよね。いつか自分で作ってみようかな、誰かが先に作らない限りは?欲しい機能はこんな感じ:* スマートリスト、できればネストしたルール付き * iTunesみたいなちゃんとした検索:入力しながらフィルターがかかる巨大なエクセルみたいな曲リスト * ボリュームレベリング * Windows/Mac/iPhone用の対応プログラム、Dropboxみたいにコレクションを同期できる機能 これに100ドル払ってもいいよ。

スマートプレイリストはもうすぐ来るよ。インフラの作業は全部終わったからね。実際、今のデフォルトプレイリスト(お気に入り、最も再生されたトップ25、最近再生されたトップ25)は裏でスマートプレイリストを使ってるんだ。ただ、まだルールを編集するためのUIはないけどね。検索はもうかなり速いはずだよ(メタデータのどのフィールドでもマッチをフィルタリングできるし)。アプリはSQLiteのFTS5を使ってトラックを検索してるから。もしパフォーマンスの問題やバグがあったら教えてね。将来的にはiOSアプリも考えてるけど、Windowsアプリは別のプロジェクトだから計画はないよ。クラウドストレージの同期については、一度考えたことがあるけど、このアプリの範囲がすごく広くなっちゃうからね。クラウドストレージデータを同期するための良いアプリはたくさんあるし、俺は個人的にhttps://maestral.app/を使ってDropboxを同期してるよ。

音楽プレーヤーで一番困るのはNASの状況に関することだね。うちのNASはシンプルで、RAIDをMacに接続して共有するだけ。そしたら他のMacがこの「サーバー」に接続できる。Finderで他のディレクトリと同じようにアクセスできるんだ。ただ、この設定には多くのプレーヤーにとって明らかな2つの問題がある。まず、ディレクトリが常に利用可能じゃない(家にいないときは特に)から、いくつかのプレーヤーはメインディレクトリが存在しない問題をうまく処理できない。次に、異なるコンピュータ間でプレイリストを簡単に同期させたいけど、多くのプレーヤーはプレイリストをファイルとして保存することをサポートしていないし、NASに保存場所を指定したり、NASからプレイリストを読み込むように設定したりできない。これらの問題がすごくストレスになってる。今はVOXを使ってるけど、まあまあ許容できる選択肢だね。もっと良い解決策が見つかるといいな。

SynologyのDS Audioは結構いいと思うよ。モバイルアプリもあるし、ウェブインターフェースを通じてローカル再生もできる。ただ、会社としてはあまり信頼してないけどね。

俺のセットアップはJellyfin、Finer、Tailscaleを使ってる。外出先でも音楽にアクセスできるし、プレイリストやメタデータも全デバイスで同期されてるよ。

Macは持ってないから直接使うことはないけど、たまにMacを使うことがあって、見た目はすごくいいね!ネイティブコードでSwiftで作られてるのもポイント高いし、RAMを食うx番目のHTML/JSベースのプログラムじゃないのがいいね :-)

.appはたったの14MBだってことを言いたいだけなんだ。これが正解だよ。いい仕事してるね、OP。