こんにちは毎度お騒がせします、いかおです
早送りと遅送り(?) まず、映像だけ考えていきますと・・・・・
1.再生時にフレームレートを偽る
→毎秒30フレームの動画であれば、これを毎秒60フレームの動画として再生すれば2倍速、毎秒15フレームで再生すれば0.5倍速になる。
2.フレームを間引いたり、水増しする
→再生対象フレームを半分にすると2倍速、同じフレームを2回づつ再生すると0.5倍速になる。
1の方法は昔のビデオテープの早送りに似た方法ですね。 デバイスその他が対応すれば、サンプリングレートを自在に操って様々な再生に対応できます。 遅くする方は簡単なのですが、早くする方は場合によって、デバイスが対応しないことがありそうです。
多分、普通は2の方法を採用しますね。ただ、これも2倍、3倍、1/2倍、1/3倍位はたやすいのですが、 1.5倍とか2/3倍とかの割り振りというか、計算は大変そうです。 この様に映像の方は案外簡単に速度変更できます。ま、こういうところは所詮ぱらぱら漫画の延長なので、考え方的にも 楽ですね。
でも、音を考えると意外に難しいのがわかります。
ここで、色んな難しいパターンを排除して、音声の2倍速再生を想像して下さい
【音の2倍速再生をどうするか?】
皆さんならどうします?
映像と同じで音声サンプルを半分間引くと、半分の長さの同じ様な波形ができます。
これは実際、間引いたためのギャップでノイズが多発するのと、そうです、
周波数があがるのです。つまり、音が高くなります。
昔のアナログビデオやカセットテープ(みんな知らないか?)の早送りみたいです。
映像でいくところのフレームレートの偽りと似ています。そんなことなら
最初からサンプリングレートを偽って再生すりゃいいんですよね。
でも、現実的じゃない。じゃ、間引きでいきますか?
「いや、それでいいよね。普通」
っていうなよ絶対。ダメ絶対
音程を上げなくても倍速再生できるんです。
音は実はいろいろ奥が深くて様々な方法があるのですが、概ね
こんな方法が採られます。
・音をある時間的長さのかたまりに分割して考える
・その大きさで間引いて、それぞれをつなぎ合わせる
・つなぐ部分にのりしろを設けて、のりしろ部分で前のかたまりのフェードアウトと次のかたまりのフェードインを合成する
#これはノイズ除去のために行います
実際のコードは次回必ず載せます。
それでは