1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

PlaydateAdvent Calendar 2022

Day 11

【Playdate】動画をクランクで操作してみる

Posted at

前回の動画再生プロジェクトを改造してクランクを回すことで動画の早回し、巻き戻しを実装してみます。
main.luaを以下のように更新しました。

main.lua
-- 略 --

local CRANK_THREAD <const> = 2 -- 回したとされるしきい値
-- クランク回転
function playdate.cranked(change, acceleratedChange)
	if math.abs(acceleratedChange) > CRANK_THREAD then
		-- 再生している場合、コマ送りする
		-- NOTE: audio:setOffsetが動くのは audio:isPlaying() == true のときのみ
		if audio:isPlaying() == true then
			if acceleratedChange > 0 then
				local newTime = audio:getOffset() + 0.1
				audio:setOffset(newTime)
			else
				local newTime = audio:getOffset() - 0.1
				audio:setOffset(newTime)
			end
		end
	end
end

-- 略 --

playdate.cranked(change, acceleratedChange)でクランクを回したときの実装を記述しています。
時計回り、反時計回りの回転加速度をacceleratedChangeで取得してしきい値を超えると現在の再生位置から0.1ずつ早回しまたは巻き戻しし、新しい再生位置をセットしています。
音声の再生位置を調整しているのは、前回解説の通り音声の再生位置から動画の現在のフレーム位置を求めているためです。
注意点としてはコメントの通り、audio:setOffsetが動くのはaudio:isPlaying() == trueのときのみなので描画が更新されないときはこのあたりを見てみるとよいです。

以下がサンプルです。
タイトルなし.gif

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?