Iもっさりのんびりと音周りの話を書いてます。Cadenciiにv.Connectが搭載されます。STRAIGHT周りの論文を読んできた。自分でプログラム組みたい人向け。サンプルソース読めばモーフィングくらいは誰でも書けるので、その他大したことの無い発見をつらつら、要するに検証した部分。1.フォルマント変化straightSynthComputeでフォルマント変化率を指定できるが、それだと全体のフォルマントが変わってしまう。フレームごとにフォルマントの変化をさせたい時には、非周期性バッファとスペクトルバッファの長さを伸長させるとよい。pTempSpBuffer;配列位置の指定にdouble型使うなよ俺、ってちょっと思った。2.ブレスノイズの増幅これは比較的簡単で、増幅したいフレームの非周期性指標をスペクトルに対して大きくしてやればいい。3.ノーマライズ処理straightWriteSynthAudioFileでは単純に内部保持されているdouble型配列を16bit整数型の配列に直してWaveヘッダとかもろもろをつけているだけの模様。振幅の絶対値は1.0未満でなくてはならず、超えるとオーバーフローして負の最大値とかその近辺に行ってしまうため、激しいノイズが発生する。straightSynthGetOutputWave関数を使用して得られる配列を、配列の最大値で除算してしまってもちゃんとノーマライズされる。Waveヘッダとか書くの面倒ならこれでもいいみたい。4.音定差による音量の変化STRAIGHT技術では、空気の運動エネルギーっぽい何かを使っている節がある。高い音はエネルギーが高く、低い音は低く、また大きな音は高く小さな音は低い。エネルギーを考えると、音程を低くすれば音量が大きくなり、逆もまたしかり。高音部で音の芯が抜けてしまうのは、元々のデータと同じエネルギーで高音域を出そうとしても、低い音程の低いエネルギーではしっかり響かない、なんてことがありそう。いうわけでちょりっと調べたところ、周波数が4倍になると音量が約半分、周波数が1/4倍になると音量が約2倍になる。上の仮説であってると思う。低い音程を扱う時はクリップしないようにノーマライズするなり何らかの処理が必要です。【関連する記事】UTAU音源の表現力VCVしてみたResamplerとSTRAIGHT感情合成STRAIGHT周りの論文を読んできた。[必須入力]※画像の中の文字を半角で入力してください。Aカテゴリ日記(197)打ち込み(33)プログラミングメモ(15)完成した曲(18)音声合成(11)作曲(123)合唱(7)音楽全般(20)v.Connect(5)過去ログ2010年12月(2)2010年10月(3)2010年09月(1)2010年05月(3)2010年04月(4)2010年03月(7)2010年02月(1)2010年01月(1)2009年12月(2)2009年11月(2)2009年10月(7)2009年09月(11)2009年05月(1)2009年04月(2)2009年03月(2)2009年02月(1)2009年01月(1)2008年12月(3)2008年11月(2)2008年10月(10)Seesaaブログ×この広告は180日以上新しい記事の投稿がないブログに表示されております。