ページ 1 / 1
音声のピッチ変更
Posted: 2010年9月23日(木) 13:31
by yuno
ご無沙汰してます
いま、音声のピッチ変更を必要とするプログラムを組んでいるのですが
DXライブラリ には、音声関係はもともと簡易なものしかなく
WEBで検索してみてもなかなか方法が分かりません……
少々難しくなってもよろしいので
誰かご教授願います
以下は制作環境です
OS:Windows XP
ソフト:VS 2005 C++
ライブラリ:DXライブラリ
Re:音声のピッチ変更
Posted: 2010年9月23日(木) 14:37
by やっくん
ピッチ変更とは周波数を変化するってことでしょうか?
音声に詳しくないのでわかりませんが、以下のような関数を用いるのはどうでしょう?
的外れでしたら申し訳ないです(^^;
【DXライブラリより】
// メモリに読み込んだWAVEデータの再生周波数を設定する
int SetFrequencySoundMem( int FrequencyPal, int SoundHandle ) ;
// メモリに読み込んだWAVEデータの再生周波数を取得する
int GetFrequencySoundMem( int SoundHandle ) ;

Re:音声のピッチ変更
Posted: 2010年9月23日(木) 15:27
by Yuno
確かにそれでもできることはできますが
再生速度を変えずに…ということなので苦戦しています
流れとしては
音声ファイルのピッチ変更
↓
長さに合わせて伸縮
↓
それぞれのファイルをつなげる
VOCALOIDとかUTAUみたいなやつですね
それの会話版を作ろうとしてるんですが……
あ、それと名前ひさしぶりなので間違えてました(T_T)
yunoではなくYunoでした
すみません
Re:音声のピッチ変更
Posted: 2010年9月23日(木) 16:08
by やっくん
申し訳ありません;
前に音声データをテキスト形式で少し弄ったくらいしかの知識しかないので誰かにバトンタッチします。
>誰かご教授願います
Posted: 2010年9月23日(木) 16:19
by あたっしゅ
Re:音声のピッチ変更
Posted: 2010年9月23日(木) 16:22
by あたっしゅ
再生周波数を変えただけだと、低くしたときは再生時間が長くに、速くした時は再生時間がみじかくなる。
たぶん、それでは、不満なのだろう。
そこで、「高速フーリエ変換(Fast Fourier Transform, FFT)」とその逆変換。
「FFT ソース」で検索すれば、いっぱい、FFT のソース・ファイルが公開されているのが出てくる。
具体的に、どう使うかは、わたしにはわからないので、ほかの人に聞いて。
# レスをオフ書きしているうちに、話が進んでいるが、そのまま、書き込む。
Re:>誰かご教授願います
Posted: 2010年9月23日(木) 16:22
by Yuno
誤字指摘どうも
なるほど、そして俺は何で誤字の勉強をしているwww
Re:>誰かご教授願います
Posted: 2010年9月23日(木) 16:28
by Yuno
Re:>誰かご教授願います
Posted: 2010年9月23日(木) 16:33
by Yuno
http://floor13.sakura.ne.jp/book03/book03.html
ここにおいてある
chapter12.zipの中のex12_4フォルダのファイルは使えませんか?
実用例っぽいので……
ただ、このファイルは.cなんですがC++でもうまくコンパイルできますかね……
Re:>誰かご教授願います
Posted: 2010年9月23日(木) 16:47
by MNS
一応、規約上の注意として、
マルチポストはきちんと明記しないと駄目ですよ。
Re:音声のピッチ変更
Posted: 2010年9月23日(木) 16:52
by 住所特定反対
マルチポストすんな
答える必要なし
Re:音声のピッチ変更
Posted: 2010年9月23日(木) 17:39
by Yuno
すみません、一つにまとめればよかったです
Re:音声のピッチ変更
Posted: 2010年9月23日(木) 18:35
by softya
>すみません、一つにまとめればよかったです
そうお思いなら利用規約に従われていかがでしょうか。
Re:音声のピッチ変更
Posted: 2010年9月24日(金) 23:33
by 438番
なんだか荒れてますね
質問を見る限りやりたいことはサンプリングなどの信号処理なのではないでしょうか
もしそうならDXライブラリは使わなくても出来ると思います
信号処理ならFFTの他にもDFT(離散フーリエ変換)やDCT(離散コサイン変換)
等も一緒に勉強した方が判りやすい気もします
>使い方いまいちわからないです
いきなりC言語のソースを見ても難しいですよ
まずは元の数式の方を見て理解するのが一番早いですが
これについては数学の知識が必要です
最低限三角関数・微分・積分の知識が必要になります
物理で波動やスペクトルを習ったことがあればまだ親しみやすいかもしれません
数学のレベルとしては数Ⅲ程度では話にならないほど難しいかと思います
もし数学がわからないというなら
三角関数、微分・積分、オイラーの公式、フーリエ級数、ラプラス方程式、フーリエ変換
このあたりから勉強すると良いかと
ボーかロイドなどは"素片接続法"や"HMM合成法"などで検索すれば詳しいサイトが出てくると思いますよ
(この方法で合成していると聞いたことがあります、うろ覚えですみません
また、ここで書くには非常にしんどいので検索していただいたほうが効率がよいと思います)