前回の動画再生プロジェクトを改造してクランクを回すことで動画の早回し、巻き戻しを実装してみます。
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
のときのみなので描画が更新されないときはこのあたりを見てみるとよいです。