Categories: 工作・開発

Raspberry Pi Zero 2WでFLAC対応音楽プレーヤーを製作、OLEDディスプレイで曲情報を表示

市販の音楽プレーヤーは高機能だが、自分の用途に合わせたカスタマイズは難しい。また、高音質を求めると価格も高くなる。この課題に対し、Makerのw3kta氏がRaspberry Pi Zero 2Wを使った音楽プレーヤーを製作し、GitHubで公開した。FLAC形式を含む複数の音声フォーマットに対応し、OLEDディスプレイで曲情報をリアルタイムに表示する。

高音質DACとヘッドレス動作の組み合わせ

このプロジェクトの中核となるのは、Raspberry Pi Zero 2WとHiFiBerry DACの組み合わせだ。DACにはPCM5102Aチップを採用しており、デジタル音声信号を高品質なアナログ信号に変換する。OSにはRaspberry Pi OS Liteを使用し、GUIを持たないヘッドレスモードで動作する。この設計により、システムリソースを音声再生に集中させることが可能になる。

ディスプレイには1.3インチのSH1106 OLEDを採用した。I2C接続を使用することで、配線をシンプルに保ちながら曲名、アーティスト名、再生時間、ボリュームレベルといった情報を表示する。操作は7つのボタンで行い、上下ボタンで曲選択、決定ボタンで再生、戻るボタンでフォルダ移動、音量ボタンで音量調整という直感的なインターフェースを実現している。

mpvとIPCソケットによる制御

音声再生にはmpvプレーヤーを使用している。このアプローチの工夫点は、IPCソケット経由でmpvを制御することだ。Pythonスクリプトから起動したmpvプロセスに対し、UNIXソケットを介してコマンドを送信し、再生中のボリューム調整をリアルタイムに反映させる。

メタデータの取得にはffprobeを活用している。FLAC、MP3、WAVファイルから曲名とアーティスト名を抽出し、OLEDディスプレイに表示する仕組みだ。再生時間もffprobeで取得した総再生時間と、経過時間を組み合わせて「MM:SS/MM:SS」形式で表示する。

フォルダ構造でプレイリスト管理

このプレーヤーの設計で注目すべき点は、プレイリスト管理にフォルダ構造を利用していることだ。ユーザーは音楽ファイルをフォルダ単位で整理しておけば、フォルダを選択するだけで自動的にプレイリストが生成される。再生は選択した曲から始まり、フォルダ内の全曲を順番に再生してループする。

ファイルブラウザは最大6行の表示に対応し、スクロール機能を備えている。リストが6行を超える場合、カーソルが画面の端に達すると表示領域がスライドする仕組みだ。ファイル名が長い場合は25文字で切り詰め、末尾に「…」を付加して表示する。

誰でも再現可能な設計

このプロジェクトの特徴は、すべての情報がGitHubで公開されていることだ。使用するハードウェア、配線図、必要なソフトウェアパッケージ、Pythonコードが詳細にドキュメント化されている。Raspberry Pi Zero 2W、HiFiBerry DAC、1.3インチOLEDディスプレイ、7つのボタンという構成で、部品を揃えれば誰でも製作できる。

セットアップ手順も明確だ。Raspberry Pi OS Liteをインストールし、I2Cを有効化してDACの設定を行う。Python仮想環境を作成し、luma.oled、gpiozero、Pillowといった必要なライブラリをインストールする。最後にplayer.pyスクリプトを実行すれば、音楽プレーヤーとして動作する。

このアプローチは、既製品に頼らず自分の要件に合わせた音楽プレーヤーを作りたい人にとって参考になる設計だろう。オープンソースとして公開されているため、コードをカスタマイズして機能を追加したり、別のディスプレイやDACに変更したりといった拡張も可能だ。

関連情報

GitHub – OledMusicPlayer

FabScene編集部

FabScene編集部