LoginSignup
1
0

More than 1 year has passed since last update.

【Playdate】動画を再生する

Posted at

Playdate用の動画作成

Playdateで動画を再生するにはpdv形式の動画ファイルと音声ファイルに分割されたものを用意する必要があります。
ここではmac環境でのpdvファイルの生成方法を説明します。
以下のdevforumのスレッドに1bitvideo.app.zipというファイルがリンク付けられていますのでそちらをダウンロードします。
(※こちらのファイル実行は各個人で判断の上行ってください)

解凍するとappファイルが生成されるのでプライバシーとセキュリティから実行を許可した上で開きます。
以下のようなappのGUIが表示されます。

「Open...」から動画を読み込み、下の設定を操作したあと「Save...」で任意の名前で保存します。
ここではmovie.pdv``movie.aifで保存しました。

ファイル配置

保存したファイルをプロジェクトファイルに配置します。

myProjectName/
    source/
        main.lua
        Videos/
            movie.pdv
            movie.aif

動画再生スクリプト

動画再生スクリプトはここではmain.luaに記述します。

main.lua
import "CoreLibs/object"
import "CoreLibs/graphics"

local disp <const> = playdate.display
local gfx <const> = playdate.graphics
local snd <const> = playdate.sound

local video = gfx.video.new("Videos/movie") -- movie.pdv を読み込む
local audio, loaderr = snd.sampleplayer.new("Videos/movie") -- movie.aif を読み込む
local prevframe = 0

function setUp()
	disp.setRefreshRate(0) -- フレームバッファが利用可能になったらplaydate.update()を呼び出すように
	
	-- 音声
	if audio ~= nil then
		audio:play(0)
	else
		print("audio error:"..loaderr)
	end
	-- 動画
	video:useScreenContext()
	video:renderFrame(0)
end

setUp()

function playdate.update()
	if audio:isPlaying() == true then
		-- 音声の再生位置から動画のフレーム位置を求める
		local frame = math.floor(audio:getOffset() * video:getFrameRate())
	
		if frame ~= prevframe then
			video:renderFrame(frame)
			prevframe = frame
		end
	end
end

playdate.graphics.video.new("Videos/movie")でmovie.pdv を読み込み、videoに格納、
playdate.sound.sampleplayer.new("Videos/movie")でmovie.aif を読み込み、audioに格納しています。

次にsetUp関数で初期化を行っています。
playdate.display.setRefreshRate(0)はフレームバッファが利用可能になったらplaydate.update()を呼び出すようにする設定です。
audio:play(0)で音声の再生を行い、動画の初期化を行います。
video:useScreenContext()はレンダリングコンテキストとして表示フレームバッファを設定し、
video:renderFrame(0)は動画の最初のフレームをレンダリングコンテキストに描画しています。

毎フレームの描画処理はplaydate.update()で行います。
音声再生状態のとき、音声の再生位置から動画の現在のフレーム位置を求め、前のフレーム位置と差分があれば描画するようにしています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0