noteでやれ。
内容的に、というだけでなく、noteでやればそれでnoteの今週分クリアになるぞ。
今回やったこと
なでしこで、動画を○倍速で再生したときどのくらいの時間で再生し終わるか、それにより普通に再生するよりどのくらい時間を節約できそうかを計算する。
プログラム
倍速計算機 (プログラム貯蔵庫)
See the Pen nako3 speed multiply calculator by MikeCAT (@mike_cat) on CodePen.
ポイント
パラメータの用意
倍率リストは[0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 3, 4]。
計算に用いる倍率のリストを用意しておく。
UIの用意
「元の長さ:」のラベル作成。
元時間入力欄は「60」のエディタ作成。
それの「type」に「number」をDOM属性設定。
それの「min」に「0」をDOM属性設定。
「分」のラベル作成。
改行作成。
結果テーブルは空のラベル作成。
元の動画の長さを入力する欄を作成し、結果を表示する準備を行う。
入力は、あまり細かくても便利さはあまり増えず、入力の煩雑さが増えるのみだと判断したので、分単位にした。
ここで作成する「結果テーブル」は直接用いず、適当な部品が入っていればよいので、とりあえずラベルを置いた。
時間をわかりやすく表示する用の関数の用意
●(Aを)分秒変換とは
定数の秒数はAの絶対値に60を掛けて四捨五入。
分秒とは変数。
もし、秒数が60以上ならば
分秒は「{秒数を60で割って切り捨て}分{秒数を60で割った余り}秒」。
違えば
分秒は「{秒数}秒」。
ここまで。
もし、Aが0未満ならば
分秒は「-{分秒}」。
ここまで。
分秒を戻す。
ここまで。
分数 (整数とは限らない) を受け取り、それを「○分○秒」の形の文字列に変換して返す。
まず、与えられた分数を、秒数に変換する。
次に、それを整数の分数と余りの秒数に分解する。
最後に、最初の入力が負であった場合、マイナスをつける。
計算を行う
●倍速計算とは
定数の元時間は元時間入力欄のテキスト取得して整数変換。
もし、それを非数判定ならば、空を戻す。
定数の計算結果は[["倍率", "時間", "時間節約量"]]。
倍率で倍率リストを反復
定数の加速後時間は元時間を倍率で割る。
定数の時間節約量は元時間から加速後時間を引く。
計算結果に[
「×{倍率}」,
加速後時間を分秒変換,
時間節約量を分秒変換
]を配列追加。
ここまで。
結果テーブルをDOM部品削除。
結果テーブルは計算結果のテーブル作成。
ここまで。
{関数}倍速計算で元時間入力欄の変更された時。
倍速計算。
計算処理を関数にして、最初や入力が変化したときに実行する。
まず、入力を数値に変換し、変換できなければ処理を打ち切る。
計算結果を格納する配列を用意し、ヘッダを入れておく。
そして、それぞれの倍率について、倍率を適用した際の時間と、それが元の時間よりどれだけ短いかを計算し、文字列化して配列に追加する。
最後に、前回計算を行った際の結果テーブルを画面から外し、新しい結果テーブルを画面に置く。
「テーブル更新」の罠
なでしこには「テーブル更新」という命令があり、一見、これを用いることでテーブルを毎回作り直さずに既存のテーブルの中身を更新できそうに思える。
しかし、実際に試してみたところ、この関数ではヘッダのはずの部分も、ヘッダではなく普通のデータとして出力されることがわかった。
データは[[1,2],[3,4]]。
データのテーブル作成。
データのテーブル作成。
それをデータにテーブル更新。
これをWeb簡易エディタで実行すると、最初の「テーブル作成」しただけのテーブルではヘッダがヘッダとして表示されている一方、2番目の「テーブル更新」を行ったテーブルではヘッダのはずの行も普通のデータとして表示されていることがわかる。
このため、今回は「テーブル更新」は使わず、毎回テーブルを外して作り直すことにした。
おわりに
なでしこで、動画を○倍速で再生したときどのくらいの時間で再生し終わるか、それにより普通に再生するよりどのくらい時間を節約できそうかを計算することができた。
速度を上げれば上げるほど時間を節約できそうな気がするが、速度を上げすぎ、聞き取れないなどの理由で巻き戻しを繰り返すと、むしろ長時間かかってしまう可能性もある。
また、単純に聞き取りにくいのはストレスになる可能性もある。
2倍のときと1.75倍のときで、もとの動画が120分であっても差は10分もないことがわかった。
もとの動画がより短ければ、2倍と1.75倍の差もより短くなるはずである。
そのため、2倍で聞き取りにくい場合は、時間の余裕などとも相談の上、1.75倍を使うのもよいだろう。
