アットウィキロゴ

ファイルプレイヤー

PlaydateのSDKにおけるファイルプレイヤー(playdate.sound.fileplayer)は、ストレージ(フラッシュメモリ)から音声を直接読み込みながら再生(ストリーミング再生)するためのクラスです。
メモリ(RAM)を節約しつつ、BGMや長尺のボイスなどの長い音声ファイルを扱うのに最適です。


概要

1. サンプルプレイヤーとの決定的な違い
ファイルプレイヤー
データを少しずつ読み込む(ストリーミング)。
  • 利点: メモリ消費が非常に少なく、数分単位の曲でも再生可能
  • 欠点: 読み込みによるわずかな遅延が発生するため、フレーム単位の正確なSE(打撃音など)には不向き
サンプルプレイヤー
データ全体をRAMに展開。
  • 利点: 即座に反応し、ピッチ変更や逆再生が極めてスムーズ
  • 欠点: RAM(16MB)を大量に消費する

2. 対応フォーマットと「.pda」ファイル
Playdateでは、ビルド時に pdc コンパイラが音声ファイルを処理します。
ADPCM圧縮
ファイルプレイヤー用の音声(.wav, .aiff)は、通常コンパイルによって `.pda` という独自形式に変換されます。これはADPCM圧縮によりファイルサイズを抑えつつ、CPU負荷を低く保つ設計になっています。
MP3の直接再生
PlaydateはハードウェアでMP3デコードをサポートしているため、`.mp3` ファイルをそのまま読み込んでストリーミング再生することも可能です。

3. 実装の基本(Lua API
基本的な使い方はサンプルプレイヤーと似ていますが、インスタンス生成時にファイルパスを指定します。
-- プレイヤーの作成(パスを直接指定)
local music = playdate.sound.fileplayer.new("sounds/bgm_main")
 
-- 再生(リピート回数、0で無限ループ)
music:play(0)
 
-- ボリュームとパニング
music:setVolume(0.5, 0.5)
 
-- 停止と一時停止
music:stop()
music:pause() 
4. 便利な高度な機能
setFinishCallback(function)
再生が終了した瞬間に実行する関数を登録できます。イベント進行や曲の切り替えに便利です。
setLoopRange(start, end)
ファイル内の特定の範囲(秒単位)だけをループさせることができます。イントロがあるBGMのループ処理に役立ちます。
setStopOnFadeOut(flag)
フェードアウト終了時に自動的に再生を停止するかどうかを設定できます。

5. パフォーマンス上の注意点
同時再生数
ファイルプレイヤーはディスクI/Oを伴うため、サンプルプレイヤーに比べて同時再生数の上限が厳しくなります(通常、BGM 1〜2本程度が推奨されます)。
バッファリング
大量のディスクアクセス(データのセーブ/ロードなど)が同時に発生すると、ストリーミングが追いつかずに音が途切れる可能性があります。

活用のアドバイス
Playdateのゲーム開発では、「頻繁に鳴る短いSEはSamplePlayer」、「常に流れるBGMや環境音はFilePlayer」と使い分けるのが鉄則です。

関連ページ

最終更新:2026年04月30日 07:46