スポンサーリンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« 唸りの対策は出来たものの | トップページ | 処理の負荷は結構高い »

気持ち的には同等に出来た

今は、AmuseGraphics Ver1.4.1の開発フェーズで、macOS版AGMPlayerに続き、macOS版AG-ムービーカッターの開発中なのだが、この一週間は、音声速度の低速化時の音質がiMovie等よりも劣っていたので、改善してきたのだが、気持ち的には、同等にできた。

オーバーラップFFTをベースに、周波数領域でデータをシフトして周波数を変更する場合、例えば、0.5倍速にすると、時間領域に戻すと、元々のSin窓の周波数も実質的に2倍になってしまっている。

なので、本来なら、Sin窓の位相が90度異なる二つのオーバーラップFFTデータを足し算すると、綺麗な波形に戻る筈の所が、0.5倍速にすると、これらの位相が同等になってしまうために、合成波形には元々のSin波の2倍の周波数の唸りが発生してしまう。

この唸りの問題に対しては、合成時に、片方の使用サンプルの時間をズラす事で、Sin窓の位相が90度の両者が合計される格好にすれば、唸りは無くなる、という所までは、昨日書いた。

で、上記でメデタシ・メデタシにはならなかったのだが、これは、音声の合計時には、少々の時間的なズレがあっても、リバーブがかかった感じになる以外、さほど問題にはならない場合も多いのだが、上記の場合には、元々、無理をしてピッチ変更しているという事もあり、音質的に少し宜しくなかった訳だ。

具体的には、音が篭った感じになったり、たまに、ノイズが乗ったりしていたのだが、iMovieではそんな問題は発生していなかったので、作者的には、更に、改良に取り組んだ。

で、結果的には、更に、結構な改善が行えたので、全く同等と言うとAppleの技術者に失礼なので、そういう事は言わないのだが、作者的な感覚では、iMovieと比べても、遜色ないくらいにはなった。

それでは、どういう改良を行ったのかというと、Sin窓と周波数を2倍した事により発生した音の唸りについては、無理やり修正しようとはせず、その唸りがある音声波形と45度ズレた波形を生成し、合計する事で、唸りを無くす事にした訳だ。

つまり、時間軸で、元々のFFT領域で言えば、その1/4ズレた位置でも、上記と同様のオーバーラップFFTを行い、出てきた結果を上記の結果と合計する格好にした訳だ。

そうすると、比較的無理なく、音の唸りが消せたので、音質は向上する事になったのだが、こういった理屈が厳密に通用するのは、0.5倍速の場合のみだ。

なので、0.5倍速以外では、若干の音の歪みも発生しているのだが、iMovieや巷の動画プレイヤーなんかでも、デフォルトでは低速再生は0.5倍速と0.25倍速になっているので、その辺については気にしないことにした。

もっとも、0.5倍速以外でも、注意して聞いていないと音の歪み等に気がつかない場合もあるレベルなので、実用上はさほど問題はない場合も多い筈だ。

ただし、0.25倍速については、上記の通り、よく使われるので、何とかしようとしたのだが、この程度の速度になってくると、上記の様に、採取するサンプルの時間軸をズラしても、リアルな時間はさほど変わりないので、音の歪み等も殆どない感じだった。

なので、0.25倍速については、本来なら、更に、オーバーラップFFTを繰り返せば良いかもしれないのだが、昨日書いた手法により、音の唸りを除去するだけ、ということにした。

と、言うことで、やっと、iMovieと比べても、それほど恥ずかしくはない音質になったので、一週間は遅延したのだが、AG-ムービーカッター Ver1.4.1の仕上げ作業に戻ることにする。

ちなみに、上記以外にもやったことはあって、それも、結構、効果的だったので書いておくと、入力データのリサンプリングを行った。

具体的には、AG-ムービーカッターの速度変更処理では、元々のソースデータのサンプリング周波数をベースに様々な処理を行っているのだが、サンプリング周波数が一般的な44.1kHzでは、微妙に、宜しくなかったので、その二倍の周波数にリサンプリングして使う格好にした。

何故、そんな処理が必要になるのか、というと、FFTを行う場合、入力データのサンプル数が多いほど、周波数分解能は増えるのだが、サンプル数が多くなると、時間領域での音の変化が問題になるからだ。

つまり、例えば、FFTの分解能をあげたいがために、元々は、20mSec分のデータを入力していたのを40mSec分に変更すると、周波数の分解能は増えても、時間領域で音声が変化している可能性も増えるので、逆FFTすると、モワモワした感じの音声になってしまったりする訳だ。

なので、AG-ムービーカッターでは、FFTの入力データ数というのは、時間領域の長さを考慮して自動的に変更している。

具体的には、44.1kHzと22.05kHzの場合、44.1kHzの入力データ数を22.05kHzのデータ数の二倍にしている。

つまり、FFTを行う場合に、サンプル数を固定するのではなく、時間を固定している感じにしてあるのだが、現行版のサンプル数は少し多い感じになっている。

これは、音楽の周波数を変更しようとする場合、周波数分解能がそれなりに高くないと、綺麗な変換結果は得られないからなのだが、その結果として、人間の話し声なんかを変換すると、少し、モワモワした感じになってしまっている。

と、言うことで、判ったと思うのだが、AG-ムービーカッターの速度変換処理では、入力データの時間領域の長さを短くしつつ、サンプル数を増やすのが望ましかったので、サンプリング周波数を高くする様にリサンプリングした訳だ。

その結果としては、現行処理については、音楽データの変換時の音質を落とすことなく、人間音声の変換時のモワモワ感を消すことが出来たのだが、0.5倍速以下用に今回開発した処理については、音質を上げることが出来たので、iMovieに匹敵するかなあ、という感じにもなった訳だ。

« 唸りの対策は出来たものの | トップページ | 処理の負荷は結構高い »

2019年10月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    収集された情報がGoogleによってどの様に使用されるか、収集される情報をユーザーが管理する方法については、以下のリンクを参照下さい。

    ポリシーと規約 - Google